Java反射
[toc]
参考:
学习java应该如何理解反射?
总结
反射机制的定义:
是在运⾏状态中,对于任意的⼀个类,都能够知道这个类的所有属性和⽅法;对任意⼀个对象都能够通过反射机制调⽤⼀个类的任意⽅法。这种动态获取类信息及动态调⽤类对象⽅法的功能称为java的反射机制。
反射的作⽤:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
详情
不使用反射机制:直接在代码中new出自己需要的类,这种静态编译的方法会在编译的时候绑定对象,虽然这样运行起来比反射要快,但是如果一旦需要在项目中修改某个类,那么多则几百处代码都要修改一遍,而且这个类的方法和属性也有可能要涉及修改,麻烦不断,这绝对不是我们想要看到的。
使用反射机制:相比较静态编译反射机制是动态编译,在运行的时候确定类并且实例化、调用方法。反射发挥了java编程的灵活性,如果此时类需要修改,那么只需要修改最开始反射类的那一句话即可,或者如果你喜欢,甚至可以把有关反射的内容单独作为一个配置文件用xml写出来,如果需要修改,直接在配置文件中修改反射的类名即可。
问题一:那么什么是Java的反射呢?
大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的已经被加载了。
Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才动态加载。使用在编译期并不知道的类。这样的特点就是反射。
那么Java反射有什么作用呢?
假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。