`

Java学习 之 获取Class对象、使用反射生成并操作对象

阅读更多

1.获取对象

 

  共三个,例子代码如下:

 

  String sring = null;

 

  Class class1 = String.class;// 该方法最为安全可靠,程序性能更高。
  Class class2 = string.getClass();
  Class class3 = Class.forName("java.lang.String");// 可能抛出ClassNotFoundException异常

 

  一旦获取了该类所对应的Class对象之后,就可以通过调用Class对象的方法来获得该对象和该类的真实信息了。

 

2.创建对象 

 

  通过反射来生成对象有如下两种方式:

(1)使用Class对象的newInstance()方法来创建该Class对象对应类的实例。但是这种方式要求该Class对象的对应类有默认的构造器,而执行newInstance()方法时实际上是利用默认构造器来创建该类的实例。

(2)先使用Class对象获取指定的Constructor对象,再调用Construtor对象的newInstance()方法来创建该Class对象对应类的实例。通过这种方式可以选择使用某个类的指定构造器来创建实例。

 

  另外,如果我们不想利用默认构造器来创建java对象,而想利用指定的构造器来创建java对象,则需要利用Construtor对象,每个Construtor对应一个构造器,为了利用指定构造器来创建java对象,需要如下三个步骤:

(1)获取该Class对象;

(2)利用该Class对象的getConstrutor方法来获取指定的构造器; 

(3)调用Construtor的newInstance方法来创建Java对象。

 

3.调用方法

 

  获取到某个类的Class对象之后,可以通过该Class对象的getMethods方法或者getMethod方法获取全部或指定方法。

  每个Method对象对应一个方法,获得Method对象后,程序就可通过该Method来调用对应的方法,在Method里包含一个invoke方法,该方法签名如下:

  Object invoke(Object obj,Object... args);该方法中的obj是执行该方法的主调,后面的args是执行该方法时传入该方法的实参。

  当通过Method的invoke方法来调用对应的方法时,Java会要求程序必要要有调用该方法的权限。如果程序确实需要调用该对象的私有方法,则可先调用Method对象的:

  setAccessible(boolean flag);方法,将Method对象的accessoble标志设置为指示的布尔值。

  布尔值为true,则表示该Method在使用时应该取消Java语言访问权限检查;

  布尔值为false,则表示该Method在使用时应该实施Java语言访问权限检查;

 

4.访问属性值

 

  通过Class对象的getFields或getField方法可以获取该类所包括的全部Field(属性)或指定Field,Field提供了如下两组方法来访问属性:

  getXxx(Object obj);获取obj对象该Field的属性值,此处的Xxx对应8个基本类型,如果该属性的类型是引用类型则取消get后面的Xxx。

  setXxx(Object obj,Xxx val);将obj对象的该Field设置成val值,此处的Xxx对应8个基本类型,如果该属性的类型是引用类型则取消set后面的Xxx。

 

示例代码如下:

 

import java.lang.reflect.Field;

class Person{
	
	private String name;
	private int age;
	
	public String toString(){
		return "Person[name:  "+name+",age:  "+age+"]";
	}
	
}

public class FieldTest {

	public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
		// 创建一个Person对象
		Person person = new Person();
		// 获取该Person类的Class实例
		Class<Person> personClass = Person.class;
		// 获取属性名为name的属性
		Field nameField = personClass.getDeclaredField("name");
		// 设置通过反射访问该Field时取消访问权限检查
		nameField.setAccessible(true);
		// 设置新的值
		nameField.set(person, "ChenJianLi");
		
		// 类是
		Field ageField = personClass.getDeclaredField("age");
		ageField.setAccessible(true);
		ageField.setInt(person, 22);
		
		// 打印
		System.out.println(person);
	}
	
}

 

 

 

 

分享到:
评论

相关推荐

    利用java反射将json字符串转成对象.zip

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON...

    Java自定义注解使用反射获取字段注解

    Java的`Field`类提供了`getAnnotation(Class&lt;A&gt; annotationClass)` 方法,用于获取指定类型的注解: ```java public class AnnotationReflectionDemo { public static void main(String[] args) throws ...

    java使用反射创建并操作对象的方法

    Java 使用反射创建并操作对象的方法 Java 的反射机制允许程序在运行时动态地创建和操作对象,这是 Java 程序设计中非常重要的一种技术。下面我们将详细介绍 Java 使用反射创建并操作对象的方法。 反射机制概述 ...

    java 根据简单对象自动 生成excel

    接着,我们使用反射获取`User`类上所有带有`@ExcelColumn`注解的字段,并创建表头。对于每个用户对象,我们创建一行数据,并将字段值填入对应的单元格。 Apache POI是一个强大的Java API,可以处理Microsoft Office...

    JAVA反射机制动态调用 计算器对象的加法,减法函数;JAVA反射机制修改一个学生对象 的私有数据成员

    Java反射机制是Java语言提供的一种强大功能,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个机制在处理不确定类型或者需要灵活操作类的场景中非常有用。在这个...

    Java中Class对象详解.docx

    Java中的Class对象是Java反射机制的核心,它代表了一个类的信息,包括类的名称、属性、方法等。在Java中,每个类都有一个对应的Class对象,它由Java虚拟机(JVM)在类加载时创建。了解Class对象的生成方式和原理对于...

    java反射机制详解与应用

    Java反射机制是Java语言的一项强大功能,它允许程序在运行时动态地获取类的信息并操作类的对象。这一特性使得Java具有高度的灵活性和强大的扩展性,尤其是在开发框架和库时,反射机制起到了至关重要的作用。本文将...

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作

    Java反射 JavaBean 对象自动生成插入、更新、删除、查询 SQL 语句操作 Java 反射是 Java 语言中一个强大的功能,它允许开发者在运行时检查和修改类、方法、字段的行为。Java 反射机制可以动态地创建对象、调用方法...

    java反射机制学习(四):通过反射执行方法、操作属性、操作数组中的数据

    Java反射机制是Java编程语言中一个强大的特性,它允许运行时动态地获取类的信息并进行操作,如创建对象、调用方法、访问属性以及处理数组等。在本篇讲解中,我们将深入理解如何通过反射来执行方法、操作属性以及处理...

    Java常用的反射方法

    反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取...

    java反射.ppt

    Java反射是Java编程语言的一个重要特性,它允许在运行时检查和操作类、接口、字段和方法等对象。反射提供了一种动态访问和修改程序的能力,使得代码可以在不知道具体类的情况下,对对象进行操作。 1. **Class类的...

    Java 反射创建get set方法及反射方法的调用

    Java反射机制提供了一种方式,可以在运行时获取类的信息,并创建和操作对象。这为开发者提供了极大的灵活性,但也可能导致代码难以理解和维护。反射通常用于框架开发、动态代理等方面。 #### 创建get set方法 在...

    java反射全解(反射原理+反射API详解+反射与数组+反射与泛型+反射源码与性能开销+反射优缺点+反射与内省)

    要想使用反射,首先需要获得待操作的类所对应的 Class 对象。java.lang.Class 是所有反射 API 的入口点。通过 Class 对象,可以获悉整个类的结构,包括其modifiers、superclass、实现的 interfaces、fields 和 ...

    动态编译字符串成java,并且添加class到jvm

    在Java编程中,动态编译字符串成Java代码并将其加载到JVM(Java虚拟机)是一种高级技巧,常用于运行时代码生成、元编程或插件系统等场景。这一技术的核心在于利用Java的反射API和Java Compiler API。下面将详细阐述...

    在反射动态机制生成对象的实体

    反射是Java编程语言的一个核心特性,它允许程序在运行时检查、操作类的信息以及创建对象。通过反射,开发者可以实现高度灵活的应用程序,例如框架、插件系统等,其中非常重要的一环就是能够动态地创建对象。本文将...

    Java反射机制

    2. **单元测试**:反射可以用来创建对象并调用私有方法,对于编写单元测试非常有用。 3. **代码生成工具**:通过反射可以动态创建和修改代码,实现代码生成工具。 4. **ORM映射**:在ORM框架中,反射用于将数据库...

    JAVA 反射详解PPT

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过反射,我们可以动态地创建对象、访问和修改字段、调用方法,甚至执行私有方法和访问包内可见的元素。...

    Java反射机制的详细讲解及实例,有助于java深度开发

    2. 类的Class对象:每个Java类都有一个对应的Class对象,它是反射的入口,通过Class对象可以获取类的所有信息。 3. 获取Class对象:可以通过`Class.forName()`,`对象.getClass()`或类名.class等方式获取。 4. 对象...

    Java Reflection (JAVA反射)详解

    Java 反射(Java Reflection)是Java编程语言中的一种高级特性,它允许程序在运行时动态地获取类的信息(如类名、字段、方法等)并进行操作,从而增加了程序的灵活性和动态性。以下是对Java反射机制的详细解释: 1. ...

Global site tag (gtag.js) - Google Analytics