一、获取类的信息
java.lang.Class是一个类,这个类是反射操作的源头,即所有反射都要从此类还是进行,有3种获取Class对象的方式:
第1种:调用Object的getClass方法
先产生对象,在获取源头
第2种:使用类.class取得(常用于Hibemate、MyBatis、Spring),这种方式需要在编译时就知道类的名称。
不用产生对象,可以直接取得
第3种:使用Class类的forName()静态方法
该方法需要传入字符串,并且该字符串的值是类的全名(包括完整的包名),如果不是类的全名,会抛出一个ClassNotFoundException的异常。
实例化Class类对象语法:public static Class<?>forName()
二、反射实例化对象
实例化对象方法:方法1:使用Class对象的newInstance()方法创建对象;方法2:使用Constructor对象创建对象
方法1:要求Class类有默认构造方法
方法2:可以利用Constructor对象指定的构造方法创建对象
先使用Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法创建该Class对象对应类的实例
很重要的一句话:new也能实例化,而且比反射实例化简单,但是,new是代码冗余的根本原因,反射可以减少冗余,提高代码效率!!!