一个,反射是什么(反射是框架设计的灵魂) ) ) )。
1,JAVA反射机制正在执行中
任何一个类都可以知道该类的所有属性和方法;
对于任何对象,都可以调用其方法和属性之一。
这种动态检索的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2、反射提供的功能:
在执行时判断任意一个对象所属的类
在运行时构建任意类的对象
在运行时确定其中一个类具有的成员变量和方法
在运行时调用任何对象的方法
要解剖类,必须首先获取该类的字节码文件对象(class )。 解剖时使用Class类的方法。 因此,首先获取与每个字节码文件对应的Class类型的对象。
3,关于class对象和此class类
Class对象的来源是将Class文件导入内存并为其创建Class对象
4,class类:表示一个类,是Java反射的起源和入口
它用于获取有关类的各种信息,并提供了获取类信息的方法
Class类从Object类继承
Class类是所有类通用的图形
每个类都有自己的对象,同时每个类也被视为一个对象,有一个通用的图形Class,存储类的结构信息,并通过类的名称、属性、方法、构造方法、父类和接口等适当的方法检索适当的信息
Class类的实例表示正在运行的Java APP应用程序中的类和接口。 也就是说,jvm具有n个或更多实例,每个类都有其Class对象。 (包括基本数据类型)
Class没有构建公共的方法。 加载类后,类对象由Java虚拟机自动生成,并通过调用类加载器的defineClass方法自动生成。 也就是说,我们不需要自己处理创建,JVM已经为我们创建了。
没有公共机制。 方法一共64个太多了。
5 )反射使用场景
因为在Java编码过程中知道类和对象的具体信息,所以在这种情况下直接处理类和对象即可,无需反射
如果不知道类或对象的具体信息,则必须使用反射来实现
例如,必须将类的名称放在XML文件中,将属性和属性值放在XML文件中,在运行时读取XML文件,并动态获取类的信息
在编译时,我们完全不知道该对象或类可能属于哪个类。 程序只根据运行时信息找到该对象和类的真实信息
第二种方法是获取反射门户(class对象)
操作反射,必须先拿到反射的入口
1,通过Class.forName ('所有类名') )
try {
classperclazz=class.forname (reflect _ fans he.person );
system.out.println(Perclazz;
}catch(classnotfoundexceptione ) )
e .打印堆栈跟踪(;
}
2,类名. class
Class perClazz2=Person.class;
3,对象. getClass ()。
人员人员=新人员(;
Class perClazz3=person.getClass (;
三.通过反射入口对象(class )获取类的各种信息
一个类的反射门户class对象可以获取类的所有信息
示例1:perClazz.getMethods ()获取所有此类公共方法(父类的、实现接口的、自己的) ) )。
Class perClazz=null;
try {
perclazz=class.forname (reflect _ fans he.person );
}catch(classnotfoundexceptione ) )
e .打印堆栈跟踪(;
}
method [ ] methods=perclazz.get methods (;
//遍历所有方法
方法方法:方法{
system.out.println(method );
}
}
示例2 :获取所有结构方法
示例3 :获取父类
例4 )获取当前类(仅限本类)的所有方法和属性。 包括私人生活
重要信息:可以检索当前类的对象,并从对象中调用类的方法
四.通过反射获取对象实例,操作对象
1,class.newInstance (),然后用力转动模具,即可操作对象。 主要调用方法。
2、操作属性,可以操作类中的公共属性和私有属性
如果属性为private,则通常不允许从外部操作属性值。 在此,可以使用Field类的setAccessible(true )方法临时打开操作权限
调用方法也同样可以调用私有方法。 null是因为此方法没有参数
五.在程序运行过程中动态确定要调用的类和方法