反射概述
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象。
获取字节码文件的三种方式
- Object类的getClass()方法(例:判断两个对象是否是同一个字节码文件)
- 静态属性class,(例:锁对象)
Class类中静态方法forName()(例:读取配置文件)
反射的三个阶段
演示
public static void main(String[] args) throws ClassNotFoundException {//方式一Class clazz1 = Class.forName("cn.giteasy.common.Person");//方式二Class clazz2 = Person.class;//方式三Person p = new Person();Class clazz3 = p.getClass();System.out.println(clazz1 == clazz2);//trueSystem.out.println(clazz2 == clazz3);//true}
equals方法用例
@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null) {return false;}//判断调用对象和传入对象的字节码文件是否是同一个字节码文件if (this.getClass() != obj.getClass()){return false;}Person other = (Person) obj;if (age != other.age) {return false;}if (name == null) {if (other.name != null){return false;}} else if (!name.equals(other.name)){return false;}return true;}
