反射机制
一:反射机制:
反射机制,是java中十分常用的重要特性。
运用反射机制,可以动态的调用某一个对象的特定方法,或读取任意一个JavaBean(公共类)的所有属性,进行赋值删除等操作。
二:反射的应用
反射可以访问 - - 构造方法,方法,成员变量、泛型、注解等结构
1.访问前需要获取Class对象:
获取Class对象的三种方法: | 代码 |
---|---|
1. 通过Object类的getClass()方法: | Student obj = new Student(); Class stu = obj.getClass(); |
2. 根据Class中的静态方法: | Class stu = Class.forName(“Student”); |
3. 通过类本身获取: | Class stu = Student.class; |
4. 使用类的加载器ClassLoader: | ClassLoader classloader = 类.class.getClassLoader(); Class clazz= classloader.loadClass(path); |
注意:在运行期间,一个类,只有一个Class对象产生,所以在同一个程序中运用上述三个方法获取三个Class对象为同一个。
(补充:第四种方法:
通过类的加载器获取:
ClassLoader classLoader = this.getClass().getClassLoader();
Class clazz = classLoader.loadClass(className);
)
2.创建实例:
- 使用Class对象的newInstance()方法来创建Class对象对应类的实例。
Object b = c.newInstance();
- 获取Constructor对象后,调用该对象的newInstance方法利用指定参数创建一个该类型的对象。
Book c = (Book)constructors.newInstance("字符串", 6);
- 1)类中尽量有一个无参构造器
2)类的构造器的访问权限需要足够
3)传递对应的参数
3.访问构造方法:
首先通过下列方法之一创建一个Constructor类型的对象或数组
- getConstructors()//当前运行时类中声明为public的构造器
- getConstructor(Class<?>…parameterTypes)
- getDeclaredConstructors()//当前运行时类中声明的所有构造器
- getDeclaredConstructor(Class<?>…parameterTypes)
根据构造方法的入口参数的类型访问指定的构造方法:
objectClass.getDeclaredConstructor(int.class,String.class);
objectClass.getDeclaredConstructor(new Class[]{
int.class,String.class});
Constructor类的常用方法
方法名称 | 说明 |
---|---|
isVarArgs() | 查看该构造方法是否允许带可变数量的参数,如果允许,返回 true,否则返回false |
getParameterTypes() | 按照声明顺序以 Class 数组的形式获取该构造方法各个参数的类型 |
newInstance(Object … initargs) | 通过该构造方法利用指定参数创建一个该类型的对象,如果未设置参数则表示采用默认无参的构造方法 |