天天看点

java反射学习笔记2

反射的基本操作原理

反射开发模式,重点:

java.lang.Class<T>
           

实例化对象有三种方式完成:

1、Object类之中存在有一个getClass()方法:public final Class<?> getClass();
此方法不能被子类所覆写,且所有类的实例化对象都可以调用;
2、利用“package.class.class”的形式实例化Class类对象
在一些开源框架中大量使用到
操作直观,直接
3、利用Class类中提供的public static Class<?>forName(String)
主要用于工厂类上,设计JDBC程序驱动加载
特点:程序没有很强烈的严谨性,只要程序不运行,就不会出现任何错误,要运行,就把指定的类设置上。
在Class类中提供一个实例化对象的方法 newInstance() throws
 实例化异常,Instantiation
 没有无参数构造,类名错误
 错误访问异常, IllegalAccess
 构造方法私有化
反射实例化对象

 newInstance() 只能调用无参数的构造方法,相当于使用new创建的实例对象
           

使用关键字new实例化对象以及反射实例化对象有什么区别?

若现在只是一个单纯的类进行对象的实例化,非要区别
采用反射进行实例化,灵活性更高,比new 获取 宽松
若现在是一个子类需要为父接口进行对象实例化,那么弱使用了关键字new,会造成接口耦合问题,因一个接口在使用中就与固定的一个子类进行了绑定。
最早的解耦和,利用工程模式,为了一个工厂类可以使用所有接口子类的扩展需求,则可以利用反射完成