反射机制
- 反射机制的作用在于,利用类编译出来的字节码信息,来动态操作类对象。
Class类
- JAVA之所以能够存在反射机制,是因为实现了
Class
这个类,这个对象是每一个编译过的类都有的。
Class
类首先有一个forName(String s)
方法,通过传入package.class
,也就是对应类的全路径,来获取对应类的Class
对象。Class
中也有直接的newInstance()
方法,故名思意,可以直接创建对应类的对象,但是好像被抛弃了, 不知道什么原因Class
可以调用getMehtod(String method)
获取特定的类方法Class
可以调用getConstructor()
获取类构造器Class
可以调用getField(String name)
获取类中的变量(域)
反射过程
package classForName;
import java.lang.reflect.*;
import java.util.*;
class Pet{
public Pet(){
System.out.print("Hello ");
}
public void print() {
System.out.print("World");
}
}
public class ForNameTest {
private static Class<?> c;
public static void main(String[] args) throws Exception {
try {
c = (Class<?>)Class.forName("classForName.Pet");
Method m = c.getMethod("print");
Pet name = (Pet) c.getConstructor().newInstance();
name.print();
}catch(ClassNotFoundException e) {
System.out.print(123);
e.printStackTrace();
}
Class clazz = Class.forName("FornameTest");
ForNameTest fnt = clazz.getConstructor().newInstance();
System.out.println(fnt.c.toString());
}
}