反射

8:反射:

"反":即可以通过对象取得对象的出处。因Object类对象可以通过getClass()取得class。

实例化对象有三种方式:new,clone,反射

 

在Java中,类是Class<T>类的一个对象:

java.lang.Class<T>:是反射的源头,全部的反射均从此开始。

Class类对象的实例化有三种办法:

1:      obj.getClass()

2:通过  类名.class   Sprint,hibernate等这样实现

                   Class<?>cls = Data.class;

 

3:通过java.lang.Class<T>的 forName(String className)

           Class<?>cls = Class.forName("java.util.Date");

       System.out.println(cls);

   因为类名称使用字符串,可以不用import导入类。该函数不但可以获取Class类对象,也将对应的类加载了。而后完成(加载,链接(验证,准备,解析),初始化)。

在链接的解析阶段,又将该类引用的类,接口,父类等又做加载。

 

反射构造:

有了class的对象以后,就可以通过newInstance()创建具体的对象(创建class类对象表示的类的对象)。

           Class<?>cls = Class.forName("java.util.Date");

           Objectobj = cls.newInstance();//相当于无参实例化,无参构造

           Datedt = (Date)obj;

这样做主要为了解耦合。

 

对于构造函数需参数的类,就必须明确调用有参构造:

Class.getConstructor();  //返回一个Constrator类的对象。

public Constructor<T> getConstructor(Class<?>... parameterTypes)

再通过这个Constractor对象调用newInstance(参数...)构造对象。

因此为做类厂等统一调用,最好简单类都提供无参构造函数。

 

调用普通函数,成员:

public Method getMethod(String name, Class<?>... parameterTypes)

返回一个Method对象,再通过它的invoke调用。

public Field getField(String name)

返回一个Field对象,通过set(),get()读写内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值