反射介绍
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java的反射机制是通过对Java的字节码文件的剖析实现的,在编程中,我们编写的Java文件在javac的编译下会生成一个class文件,这个文件就是Java的字节码文件。字节码文件记录中对应编译类的类名,构造器名,变量名和方法名等。Java的反射机制正是的字节码文件的解析得到任意类的所有属性和方法。
反射获取字节码Class对象
Java获取字节码Class文件的方法一共有三种,其方法如下:
1.Class.forName("全类名"):将字节码文件加载进内存,返回Class对象。多用于配置文件,将类名定义在配置文件中。读取文件,加载对象。
2.类名.Class:通过类名的属性Class获取。这是在没有创建对象的时候。多用于参数的传递
3.对象.getClass():封装在Object类中,多用于对象获取字节码的方式。
我们以事先定义的一个person类为例子,通过上述三种方式的到该类的字节码文件:
public class demo01try {
public static void main(String[] args) throws Exception {
//1.Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
Class c1 = Class.forName("com.Javaweb.reflectman.person");
System.out.println(c1);//如果报错可能是包名或者类名写错了
// 2.类名.Class:通过类名的属性Class获取。这是在没有创建对象的时候
Class c2 = person.class;
System.out.println(c2);
//3.对象.getClass():封装在Object类中
person p = new person();
Class c3 = p.getClass();
System.out.println(c3);
//用==去比较三个class对象
System.out.println(c1 == c2);
System.out.println(c1 == c3);
System.out.println(c2 == c3);
}
}
上述代码中,我们通过