java中的反射总结
2014-07-15 13:23
295 查看
刚开始学习java的时候真的很难理解反射到底是个什么东西
一些书籍,哪怕是很经典的书籍都解释的让人感觉懵懵的,或许的确是我太笨
况且,网上说在将来学习框架的时候需要经常应用到反射机制,这样一来总让人心里有些不安
就方才偶然又把讲解反射的章节和视频看了一点,觉得能理解一些了
现在决定一鼓作气,边看边写,顺便把一些主要的内容和操作都记载到这里
我想,对于我这么一个笨笨的人来说,学习的最好方法也许就是不断重复
遇到不懂的知识就停下来把以往的重新学一遍,虽然浪费了很多时间,但对我也有些效果
我的理解是:所谓反射,就是根据一个已经实例化了的对象来还原类的完整信息
至少对我而言,我认为它带给我的好处是,让我从下往上的又了解了一遍面向对象
x_x 在此又痛恨一边那些厚部头们,把我的脑细胞搞死一片
编译结果如下,注意包的编译方式即可
此处的getClass()方法是默认继承自Object类的
在java中,Object类是所有类的父类,同样,所有类的实例化对象也都是Class类的实例
因此,这样一来就会牵扯到向上转型和向下转型的概念
由于向下转型的不安全因素,在这里泛型也会接踵而来
(不过我想说的是,此处的泛型设计很刺眼!尼玛,整个java的语法设计同样刺眼,超恶心!!!)
对象.getClass( )
类.Class
forName( )
?
其中,forName( )方法需要重点掌握,因为它可以在类不确定的情况下实例化Class,更具灵活性
怎么说呢?Class对象包含的内容就是反射好的那个类,我们要构造那个类的新实例(新对象)
这样就通过无参数的形式构造了一个新的对象,如同正常模式中
通过无参构造方法来构造新对象一样
我们知道,类中除了有无参构造方法,还会存在有参数的构造方法
那在反射中如何通过有参数的形式构造对象呢?接着看
我们还是使用String类做例,因为String类用的比较多,便于理解
这里需要注意的是,构造方法需要使用getConstructor( )方法获得
至于参数类型则是:原有类型.class
还有一点,无论是有参还是无参,这里所使用的构造方法,原本的类里面必须对应存在
那么,如何才能知道原有类里面的构造方法,普通方法,继承的父类等详细信息呢?接着看
我选择了Boolean类来做例,因为Boolean类的构造方法就两个,方便看
没什么好说的,看结果
别忘了,java中是单继承,父类只有一个
截取一部分,看看,意思下就行了……这几个例子都比较简单
getDeclaredFielsd()方法可以获取全部属性,getFields()只能获取公共属性
要注意的是:setAccessible()方法可以设置是否访问和修改私有属性
坦白说,java学到现在我还没发现什么能亮瞎我钛金眼的知识在里边
每次都是写一堆繁琐的语法实现个小玩意儿,不然就是拼命调用API,拼命的抛异常
让本身显得不够紧凑的代码变得愈发累赘
如果我喜欢一门语言,在我利用它做出东西来之前,它本身的特性必须能够打动我
显然,java并不让我快乐,也许很多程序员跟我一样是被迫使用java的
仅以此来安抚我那颗孤独编码的心,下面接着看内容
几个方法都是有联系的,如果看不懂就先熟悉上面几个例子
这里演示了一个普通的有参方法和一个静态方法
既然有参数的都写出来了,那么无参的就更简单了,直接传入一个对象即可
这里要注意一点,getComponentType( )返回的是数组元素的Class
暂时就写这么多,我看的书中还有反射在工厂模式中的应用
无非是用forName()方法替换一下,没什么可说的
一些书籍,哪怕是很经典的书籍都解释的让人感觉懵懵的,或许的确是我太笨
况且,网上说在将来学习框架的时候需要经常应用到反射机制,这样一来总让人心里有些不安
就方才偶然又把讲解反射的章节和视频看了一点,觉得能理解一些了
现在决定一鼓作气,边看边写,顺便把一些主要的内容和操作都记载到这里
我想,对于我这么一个笨笨的人来说,学习的最好方法也许就是不断重复
遇到不懂的知识就停下来把以往的重新学一遍,虽然浪费了很多时间,但对我也有些效果
我的理解是:所谓反射,就是根据一个已经实例化了的对象来还原类的完整信息
至少对我而言,我认为它带给我的好处是,让我从下往上的又了解了一遍面向对象
x_x 在此又痛恨一边那些厚部头们,把我的脑细胞搞死一片
Class类
如果要完成反射,那么必须了解Class类实例1:通过对象取得包名和类名
?此处的getClass()方法是默认继承自Object类的
在java中,Object类是所有类的父类,同样,所有类的实例化对象也都是Class类的实例
因此,这样一来就会牵扯到向上转型和向下转型的概念
由于向下转型的不安全因素,在这里泛型也会接踵而来
(不过我想说的是,此处的泛型设计很刺眼!尼玛,整个java的语法设计同样刺眼,超恶心!!!)
实例2:Class类的实例化
由于Class类没有构造方法,所以实例化Class类的方式有点特殊,有三种方式:对象.getClass( )
类.Class
forName( )
?
Class类的应用
Class类中有一个方法叫做newInstance( ),它可以用来创建一个Class类对象的新实例怎么说呢?Class对象包含的内容就是反射好的那个类,我们要构造那个类的新实例(新对象)
实例3:Class类的无参构造对象
?通过无参构造方法来构造新对象一样
我们知道,类中除了有无参构造方法,还会存在有参数的构造方法
那在反射中如何通过有参数的形式构造对象呢?接着看
实例4:Class类的有参构造对象
?这里需要注意的是,构造方法需要使用getConstructor( )方法获得
至于参数类型则是:原有类型.class
还有一点,无论是有参还是无参,这里所使用的构造方法,原本的类里面必须对应存在
那么,如何才能知道原有类里面的构造方法,普通方法,继承的父类等详细信息呢?接着看
获取类的结构
要通过反射获取类的结构我们这里要导入一个新的包java.lang.reflect实例5:取得类的构造方法
?实例6:取得类所实现的接口
?实例7:取得父类
?实例8:取得类的全部方法
?实例9:取得本类的全部属性
?实例10:获取本类中属性的值
?坦白说,java学到现在我还没发现什么能亮瞎我钛金眼的知识在里边
每次都是写一堆繁琐的语法实现个小玩意儿,不然就是拼命调用API,拼命的抛异常
让本身显得不够紧凑的代码变得愈发累赘
如果我喜欢一门语言,在我利用它做出东西来之前,它本身的特性必须能够打动我
显然,java并不让我快乐,也许很多程序员跟我一样是被迫使用java的
仅以此来安抚我那颗孤独编码的心,下面接着看内容
反射的应用
实例11:通过反射修改属性
?实例12:通过反射调用方法
?既然有参数的都写出来了,那么无参的就更简单了,直接传入一个对象即可
实例13:通过反射操作数组
?暂时就写这么多,我看的书中还有反射在工厂模式中的应用
无非是用forName()方法替换一下,没什么可说的
相关文章推荐
- java 反射 总结
- java反射总结
- Java 反射获取类详细信息的常用方法总结
- 黑马程序员_java反射总结
- 基于java中反射的总结分析
- java 反射的一些使用总结
- 黑马程序员:Java基础总结----反射
- java反射reflect学习总结
- 黑马程序员__JAVA高新技术--反射、注解总结
- Java增强_反射的总结
- java 反射 总结
- Java基础加强反射总结
- 黑马程序员___java反射的总结
- 黑马程序员 Java高新技术 反射总结
- java中的反射总结
- java 反射 总结
- java 反射知识总结
- Core Java第十六章知识点总结——反射
- Java 反射机制简单总结
- Java反射与内省机制总结