Java反射机制
1、得到Class对象的三种方式(每个类被加载后,系统都会为之生成一个代表该类的Class对象,通过该Class对象就可以访到是JVM中的这个类了。):
|--Class.forName(String class_name) -- e.g.:Class t = Class.forName("java.lang.Thread")
|--调用类的"class"属性返回该类所对应的Class对象。
|--调用类的getClass()方法。该方法是java.lang.Object类的方法,所以所有的类都具有这个方法。
比较:
|--第一种和第二种都可以直接根据类来得到相应的Class对象,第二种更安全,因为在编译时就可以判断该类是不是存在了,而且不用调方法。
|--当所给的类只是一个字符串是,就只能用第一种了,Class.forName(String str).
2、使用反射生成对象:
|--使用Class对象的"newInstance()"方法来生成对象,这种方式要求该类必须有无参的构造方法(Servlet容器在初始化Servlet时就是调用Servlet的无参构造方 法,所以,我们写的Servlet中必须要有无参的构造方法。
|--先通过Class对象得到相应的Constructor对象,再调用Constructor对象的newInstance()方法来创建基于指定构造器的对象。