反射
解释
加载类,解剖类的各个组成部分(成员变量,成员方法,构造器),简单来说就跟解剖牛一样,将内脏,血液,牛腱,牛腿肉,肋骨肉,,前座肉,后座肉,骨头单独拿出来
作用
- 可以通过反射得到类的全部的成分,进行操作,做成框架
2.可以破坏封装性- 对方法参数的提示操作
4 . 将其类的方法,成员变量展示给你看

操作
- 加载类的字节码文件到内存中,再获取该类的字节码,万物皆对象,所以可以把类的字节码文件看成一个对象--class对象,而这个clss对象会封装该类的所有信息
- 获取类的构造器,类的构造器也是个对象
Constructor- 获取类的成员变量,成员变量也是个对象`Field
- 获取类的成员方法,成员方法也是个对象
Method
class对象
3种方式获得class对象

获得class对象的三种方式
System.out.println("获取简单的类名: "+c1.getSimpleName());//Student
System.out.println("因为只有一个Student字节码文件,所以获得的地址是相同的"+c1 == c2);//ture

获得类的方法
1.获得类的方法(public修饰的)

2.获得类的所有的方法
这里查看了所有的方法的名字及各个方法形参的个数

获得类的构造器
1. 获得类的构造器(public修饰的)
- 这种不推荐,获取构造器受限于修饰符,更推荐使用
getDeclaredConstructor()获取类的全部构造器的方法- 获取指定构造器时,可以加泛型限制
<Student>, 这样就不用强转就能创建Student对象 ,但使用反射一般不加泛型限制的

2. 获得类的全部构造器

3. 获得所有的构造器的形参个数

4. 获得指定的构造器
这里获得的是有两个参数的构造器,获得无参
c1.getDeclaredConstructor()里面空白即可

5.暴力反射创建构造器对象
如果你使用反射方式获取私有对象,在创建对象之前不加 禁止检测访问权限
constructor.setAccessible(true);,就会在创建时报错
java.lang.IllegalAccessException: class com.itheima.TestReflection cannot access a member of class com.itheima.Student with modifiers "private"


我这里是12点53分
获得类的变量

1. 获得类的变量(public修饰的)

2. 获得所有变量

3.获得变量的类型
System.out.println(declaredField.getName()+"-->"+declaredField.getType());

4. 运行方法
这里使用
invoke()方法执行里面传要执行该方法的对象,及方法的实参, 有返回值就接收,没有返回值则返回null,注意私有方法也需要设置方法禁止检查访问权限
创建框架
可以通过定义一个框架类,定义静态方法,可以传老师对象和学生对象等,方法内部是通过对象.
getclass()获得其class对象,再遍历获得的所有的变量名,再拿到对象变量名对应的值,





浙公网安备 33010602011771号