java的反射机制

来源:互联网 发布:云购cms演示 编辑:程序博客网 时间:2024/06/05 15:51

    我最近在看这个《Thinking in java》,这本书是我第二次看,第一次看的时候没有看完,觉得这本书看不懂,所以认为这本书不好。这个就是人的基本的思维:自己不懂就是错误的或者是垃圾,但是我的思想还是左右自己觉得这本书不错。这个确实是有目共睹的一本书,确实不错。

    这个暑假,我有耐心的读了一遍,觉得耐心是一个重要的前提,个人认为现在的中国社会过于浮躁,整个社会都是浮躁,不能耐心的静下心来做一件事情,总是想让自己的工作可以立竿见影,感觉国家领导人似乎也存在急功近利的心态,这个心态是不好的,欲速则不达。好了,我们不过多的讨论这个耐心的问题了

    记住一句话:想学点东西,就的耐心。

    java的反射机制,我以前是不懂的,其实就是利用reflect机制对于要加载的class使用反射加载,达到动态加载的目的,其实现在我只是会用,但是不能理解这个reflect(反射)的应用。反正是在网上看的时候,具体的必须会的几个java方面是:泛型编程、设计模式、数据库操作、多态编程、java反射机制、多线程编程、io等。差不多就是这写了。

    这个reflect出现的目的是为了解决这个语言的动态加载问题,其实任何的东西出来都是有原因的,如果没有需求,那么就没有生产,这个是一个供求的关系,没有买卖就没有杀害。同理,。我大概的了解了一个背景知识:就是啊,这个其他的很多的语言都有动态的加载机制,所谓这个动态的加载机制和这阿静态的加载机制是相对的一个概念,静态加载机制,就是在你把这个程序交出来的时候,什么都是确定的,有人可能说这个多态是不确定的类型,是不确定,但是这个多态不确定的是那一种确定类型的不确定的具体类,但是你还是可以看出来这个是属于他的父类或者是属于一个接口的。如果让你在运行的时候使用一个你没有包含在程序之中的类,你的代码能动态使用吗,这个就是这个动态机制。其实这个是一个很深的哲学问题:静中有动,动中有静。

    问题:如果给你一个类,这个类不再你的程序之中,也不和你程序之中的一个类或者是接口存在继承或者是实现关系,那么你怎么使用?开始,我是这样子想的,既然是想使用这个类,我们就直接import这个包,之后查询这个api文档,对这个类进行使用就行了,还使用什么reflect啊,这个真是多此一举啊,但是,也许是我没有理解这个作者的意思,其实作者的意思是说这个在不准改动你的代码的基础上使用,就是让你的程序自动加载任何的未知的类型,你也不要认为把程序下面的一个class文件还一下就行了,不行,这个必须是使用这个未知的类。这个时候就要使用这个reflect机制了。

    reflect的作用就是这样子的,只有明白了为什么会出现这个东西,你学习的时候才会觉得这个学习来很深刻。我们如果不知道这个原因,就会觉得使用就使用呗,没有什么原因。

    我们好好的讨论一下这个使用这个reflect的过程。首先介绍这个jvm加载这个class的机制。

    只有在你使用到这个类的时候,无论是使用这个类生成对象还是使用这个类的static变量或者方法,这个jvm虚拟机都会一次性加载完这个类,如果不使用,那么这个jvm就会永远不加载到内存。对于加载进来的每一个类,jvm都会附带这生成一个对应的Class对象,这个Class对象主要是记录这个加载的类的信息:名字、包名、方法、方法参数、变量、权限(所有的方法和变量的权限)。我们首先使用这个Class c = Bean.class;取道这个class对象,之后使用这个对象的方法得到这个类的信息。

    我茶一句话啊,这个Bean.class怎么得到啊:这个很简单,你写一个读取文件的类,使用这个类,可以读取文件夹下面的文件,当然也是可以读取这个。class文件的。

    其实最难的还是怎么使用这个读取到的类,不错,我们是能够读取这个类,而且能够获得这个类的任何详细的信息,但是那有怎样,你只能当一个看客,我们的目的还是使用这个类,我也是在这个地方感到特别的疑问,我可以很容易的生成这个类的对象,但是我怎么使用这个类的方法啊,class有一个invoke()方法,我搜索了一下百度和google,但是似乎都没有解决这个问题,我的疑问就停留在这儿,在加上,网上说这个reflect用的不是很多,我觉得啊,这个类的方法规范一定是确定的,或者是有一定模式格式的。

    革命尚未成功,我辈仍需努力!

0 0
原创粉丝点击