发表于: 2017-11-09 22:41:52

2 831


今天完成的事情: 

              主要是围绕JDBC进行学习, 在学习JDBC的时候发现需要反射的内容,所以下午将反射的知识大概的了解了一下.


 A:反射概述
    * JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
    * 对于任意一个对象,都能够调用它的任意一个方法和属性;
    * 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
    * 要想解剖一个类,必须先要获取到该类的字节码文件对象。
    * 而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象。

B:三种方式
    * a:Object类的getClass()方法,判断两个对象是否是同一个字节码文件   

 Class c1 =Object.getClass()
    * b:静态属性class,锁对象                                                                      

Class c2 = Object.class
    * c:Class类中静态方法forName(),读取配置文件                                  

  Class c3 = Class.forName("java.lang.Object")


   c1==c2   c2==c3  都是true, 说明这三种方式获得的字节码文件都是同一个


反射的一大特点, 忽视私有, 以及忽视泛型很不错.

在泛型为integer的几个中插入字符串.


在自定义类中没有提供相应的set()get()方法,通过反射暴力修改.

在Democlass类中私有了run方法


在运行类里通过反射,暴力调用私有的这个方法.不过在编译运行的时候发现一个问题,如果我不提前把提供字节码文件的类先编译, 在运行类中是无法通过反射的编译以及运行的, 

由此让我对反射的思路有了更清晰的认知, 说明反射是对.class文件本身进行操作,生成对象, 已以及暴力修改成员变量,调用私有方法, 都是一个反编译的过程.



明天计划的事情:

因为今天精神状态不是很好, 下午敲反射的代码的时候,报错不少, 明天上午对反射再巩固一下,然后下午进行junit4的学习


 
收获:知道如何对一个字节码文件进行操作了.(是否意味着可以在脱离java文件的情况下操作别人给的.class文件?)


返回列表 返回列表
评论

    分享到