java反射
1. 什么是反射技术?
反射机制实在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用对象的方法和属性;这种动态获取的信息以及动态调用对方法的功能称为JAVA语言的反射机制。
2.反射机制能做什么?
-在运行时判断任意一个对象所属的类
-在运行时构造任意一个类的对象
-在运行时判断任意一个类所具有的成员变量和方法
JAVA中Class类和用法
原理:JAVA程序在运行时,系统一直对所有的对象进行所谓运行时类型标识,即所谓的RTTI。这项信息记录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类就是Class类。这个Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
例如你创建一个human,那么Java会生成一个内容是Human 的Class类的对象
Class类不能使用new来创建,这个对象是JVM创建的,因为这个类没有public构造函数。
- Class类原理
在object这个类中有一个方法:getClass()这个方法是用来取得该类已经被实例化了的对象的Class的引用,这个引用指向是Class类的对象。我们自己无法生成一个Class对象,而这个Class类的对象实在当各类被调用时由JVM
如何获得一个Class类对象。
public static void main(String[] args) {
System.out.println("Hello World!");
//第一种方法
try {
Class obj = Class.forName("Shape");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//第二种方法
Shape shape =new Shape();
Class obj = shape.getClass();
Class obj1 = obj.getSuperclass();//这个函数作用时获取shape父类的类型
//第三种方法
Class obj2 = Shape.class;
}
三使用Class类的对象来生成目标类的实例对象
//通过字符串的方式创建一个类,就得使用Class对象
Class rectangle =Class.forName(“Shape”);
Shape rectInstanc = (Shape)rectangle.newInstance();
System.out.println(rectInstanc.area(100,200));
使用泛型化Class引用生成带类型的目标实例;