1反射-概述(Class)
Posted mrchengs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1反射-概述(Class)相关的知识,希望对你有一定的参考价值。
Java Reflection
Reflection(反射)是被视为静态语言的关键
反射机制允许程序员在执行期间借助于Reflection API取得任何类内部信息
并能直接操作任意对象的内部属性及方法
提供的功能
1、运行时判断任意一个对象所属的类
2、运行时构造任意一个类对象
3、运行时判断任意一个类所具有的成员变量和方法
4、运行时调用任意一个对象的成员变量和方法
5、生成动态代理
相关的API:
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造方法啊
Field提供如下几种方法:
1:Class.getDeclaredField(String name);
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括私有成员)。
field.setAccessible(true);
2:Class.getDeclaredFields();
返回 Field 对象的一个数组,该数组包含此 Class 对象所表示的类或接口所声明的所有字段(包括私有成员)。
3:Class.getField(String name);
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
4:Class.getFields();
返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段。
public class Person { private String name; public Person(String name) { this.name = name; } public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public void show(){ System.out.println("show方法..."); } public int display(int age){
System.out.println("age:" + age);
return age; }
@Override
public String toString() { return "Person{" + "name=‘" + name + ‘\\‘‘ + ‘}‘; } }
@Test
public void test1() throws Exception, InstantiationException {
//栈空间的引用---堆空间的实体
Class<Person> clazz = Person.class;
//1、创建clazz对应的运行时类Person对象
Person person = clazz.newInstance();
System.out.println(person);
//2、通过反射调用运行时指定的属性
Field field = clazz.getDeclaredField("name");
field.setAccessible(true);
field.set(person,"M");
System.out.println(person);
//3、通过反射调用运行时方法
Method show = clazz.getMethod("show");
show.invoke(person);
Method display = clazz.getMethod("display", int.class);
display.invoke(person,2);
}
Class
java.lang.Class:是反射的源头
public final Class getClass()
Person.getClass()//通过运行时类的对象,调用getClass()返回其运行时类
可以借助图解进行理解
1、创建一个类
2、通过javac.exe进行编译生成对应的.class文件
3、使用java.exe加载(JVM的类加载器).class文件
4、.class文件加载到内存以后,就是一个运行时类,存在缓存区
5、运行时类本身就是一个Class的实例
6、每一个运行时类只加载一次
有了Class的实例之后可以进行的操作:
1、创建对应的运行时对象
2、获取对应额运行时类的完整结构(属性,方法、内部类...)
3、调用对象的运行时类的指定的结构(属性、方法、构造器)
4、反射的应用动态代理
以上是关于1反射-概述(Class)的主要内容,如果未能解决你的问题,请参考以下文章