张孝详java反射知识笔记

 
1.Class是类类型的意思,Class 类的对象就是字节码,实际应用反射的过程中用Class.forName()方法,生成字节码的方式比较常用,因为这个时候虚拟机并没有把字节码加载到内存中,其他方式已经进去内存了,Class.forName方法的参数就像一个变量一样,没有提前定义,其他几种是已经定义了,才拿到字节码的(你看是通过 类名.class),在写源程序的时候,并不知道类的名字,如forName的参数通过一个配置文件配置好,等运行的时候,你给我给这个变量赋值,就OK了!
--------------------------------------------------------------------------------------------------------
 
 
 
前面的1,其实就是告诉了我们如何去取的一个类的字节码,现在娶到了有什么用呢?你应该明白了为什么说Class类是反射的基石了,因为在这个类中的方法可以将一个类中的成员映射为相应的类,你可以看到它将一个类的成员变量,方法等,搞成了对象(娶到的字节码是Class的对象,因儿可以用他的各种方法
 
 
 
--------------------------------------------------------------------------------------------------------
 
在上图中,我们通过Class的实例对象拿到了他的构造方法对象,然后利用具体的构造对象,利用newInstance初始化了一个对象,其中newInstance对象的返回值是,object的,这样需要强制装换,(可能有人说程序应该知道他是String的构造方法啊,不用装换,事实是在等号的右边在编译时是不执行的,只是生成了2进制码放在右边,编译器只是做语法检查,我们可以事实吧newInstance的参数类型换掉,编译时是不报错额,可是运行时报错了,由这可以看出,编译右边不执行)!
 
 
 
 
 
其实newInstance(),就是提供给Class实例(即字节码),调用它的无参的构造方法!只是是Class的实例都都这个方法!( 其实就是一个拿到无惨构造方法的快捷方式
 
 *******************************************************************************************************************************************************************************
(这是拿到成员方法的讲解)
上面我们拿到了String类的charAt(int x)这个方法,然后我们用的时候str1,是String类的而一个实例对象,如果这个地方为空,那么说明这个方法四静态的!
然后呢,每一个Method方法都有一个invoke方法,只有这个方法才知道怎么去调用方法(人,圆,黑板,只有圆自己知道怎么画圆,只有火车才知道怎么去刹车,司机只是给了指令)
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值