
| 
	1、反射机制有什么用? 
	通过java语言中的反射机制可以操作字节码文件(可以读和修改字节码文件。) 
	通过反射机制可以操作代码片段。(class文件。) 
	2、反射机制的相关类在哪个包下? 
	java.lang.reflect.*; 
	3、反射机制相关的重要的类有哪些? 
	类 含义 
	java.lang.Class 代表整个字节码。代表一个类型,代表整个类。 
	java.lang.reflect.Method 代表字节码中的方法字节码。代表类中的方法。 
	java.lang.reflect.Constructor 代表字节码中的构造方法字节码。代表类中的构造方法。 
	java.lang.reflect.Field 代表字节码中的属性字节码。代表类中的成员变量(静态变量+实例变量)。 
	注:必须先获得Class才能获取Method、Constructor、Field。 
	eg. 
	java.lang.Class: 
	public class User{ 
	// Field 
	int no; 
	// Constructor 
	public User(){ 
	} 
	public User(int no){ 
	this.no = no; 
	} 
	// Method 
	public void setNo(int no){ 
	this.no = no; 
	} 
	public int getNo(){ 
	return no; 
	} 
	} 
	4、获取Class的三方式 
	要操作一个类的字节码,需要首先获取到这个类的字节码,怎么获取java.lang.Class实例? 
	方式 备注 
	Class.forName(“完整类名带包名”) 静态方法 
	对象。getClass()  
	任何类型。class  
	注:以上三种方式返回值都是Class类型。 
	5、通过反射实例化对象 
	对象。newInstance() 
	1 
	注:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以。 
	否则会抛出java.lang.InstantiationException异常。 
	eg. 
	class ReflectTest02{ 
	    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 
	        // 下面这段代码是以反射机制的方式创建对象。 
	        // 通过反射机制,获取Class,通过Class来实例化对象 
	        Class c = Class.forName("javase.reflectBean.User"); 
	        // newInstance() 这个方法会调用User这个类的无参数构造方法,完成对象的创建。 
	        // 重点是:newInstance()调用的是无参构造,必须保证无参构造是存在的! 
	        Object obj = c.newInstance(); 
	        System.out.println(obj); 
	    } 
	} 
	6、JDBC重点(Class.forName导致类加载) 
	如果你只是希望一个类的静态代码块执行,其它代码一律不执行,可以使用: 
	Class.forName("完整类名"); 
	这个方法的执行会导致类加载,类加载时,静态代码块执行。 | 













