JAVA反射机制
java反射机制是在运行的状态中,对于任意一个类(class文件)
都能知道这个类的所有属性和方法.
都能调用它的任意一个方法和属性
简单说: 动态获取类种的信息就是java反射
(可以理解为对类进行解剖)
获取类的第一种方法
被获取的类
package com.test;
public class Person {
public Person() {
System.out.println("Hello");
}
}
在这里类获取
package com.demo;
import com.test.Person;
public class Demo {
public static void main(String[] args) {
getClassObject();
}
public static void getClassObject() {
Person p1 = new Person();
Class<?> clazz1 = p1.getClass();
Person p2 = new Person();
Class<?> clazz2 = p2.getClass();
System.out.println(clazz1 == clazz2);
}
}
运行结果:
想要用这种方式必须要明确具体的类,并创建对象 麻烦
获取类的第二种方法
被获取的类
package com.test;
public class Person {
public Person() {
System.out.println("Hello");
}
}
在这里类获取
package com.demo;
import com.test.Person;
public class Demo {
public static void main(String[] args) {
getClassObject();
}
public static void getClassObject() {
Class clazz1 = Person.class;
Class clazz2 = Person.class;
System.out.println(clazz1 == clazz2 );
}
}
运行结果:
任何数据类型都具备一个静态的属性.class来获取其对应的Class对象
相对简单,但要明确用到类中的静态成员
.还是不够扩展.
获取类的第三种方法
扫描二维码关注公众号,回复:
8874189 查看本文章
被获取的类
package com.test;
public class Person {
public Person() {
System.out.println("Hello");
}
}
在这里类获取
package com.demo;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException {
//需要抛出异常..因为这个需要的类可能不存在
getClassObject();
}
public static void getClassObject() throws ClassNotFoundException {
String className = "com.test.Person";
Class clazz = Class.forName(className);
System.out.println(clazz);
}
}
运行结果:
只要通过给定的类的 字符串名称就可以获取该类, 更容易扩展
可以用Class类中的方法,forName.
这种方式只要有名称即可,更为方便,扩展性更强
.