**反射:**在程序员运行过程中,可以对任意对象一个类型进行任意的操作。例如在加载任意类型,调用类型的任意方法,获取任意的成员变量,构造方法,可以创建该类型的对象
Class类:在程序运行期间,Java运行时系统始终为所以对象维护一个运行时类型标识;这个标识会跟踪每个对象所属的类,保存这些信息的类型为Clas;我们成Class类为类的字节码对象
获取字节码的三种方法:
1.对象名.getClass();
public class Demo {
public static void main(String[] args) {
Person p = new Person();
Class c = p.getClass();
System.out.println(p.getClass());
}
}
class Person{
private int i = 0;
private String name = "zs";
}
2、类名.class
public static void main(String[] args) {
Class c = Person.class;
}
}
class Person{
private int i = 0;
private String name = "zs";
}
3、通过Class.forName(String classname)
public static void main(String[] args) throws Exception{
String name = "com.wzl.day.Person";
Class c = Class.forName(name);
}
}
class Person{
private int i = 0;
private String name = "zs";
}
通过字节码对象创建真正的实体对象:
在字节码对象中有一个比较实用的方法,也是非常常用的方法:newInstance();
String name = "com.wzl.day.Person";
Class c = Class.forName(name);
Person p = (Person)c.newInstance();
Person pp = Person.class.newInstance();
}
}
class Person{
private int i = 0;
private String name = "zs";
}
反射是一个强大且复杂的机制。主要是开发工具的程序员对它感兴趣,一般的应用程序员并不需要考虑反射机制。