什么是反射?
反射机制是在程序运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射的作用
1.可以实现简单的反编译,获取类中的属性和方法等基本信息,.class—>java
2.通过反射机制获取类的属性、方法等
在使用eclipse时,通过对象引用.的方式,eclipse就会将这个对象中的所有属性和方法展示出来,这个就是利用的反射机制。其实反射应用最多的地方就是将来要学习的框架,例如spring、spring MVC、Mybatis、hibernate、Struts等等
反射的优点
提高程序的灵活性和扩展性。使用反射机制后,程序在创建对象的时候不用使用new关键字写死在程序中了,而是从配置文件中进行读取,这样可以提高程序的灵活性
反射的缺点
影响性能。使用反射时,代码量稍微多点,并且是要动态的将读取类,所以会影响性能。下面例子可能不太恰当,不过希望能够帮助你更好地了解,比如你要做汽车:
正常的方式是司机停车,你开门上车。
动态的方式就是司机不停车,只降低车速,然后你跑着开门上车。
破坏封装性。
Class对象
在类加载器将.class文件读取到内存中的时候,jvm会创建这个.class文件的对象,并且只创建一个存放到jvm的方法区内存中,在java.lang包下有个Class类,这个类就是.class文件的对象类型,任何类在被使用时,都会创建这个类的Class对象。除此之外,在java.lang.reflect包下面的类也跟反射有关。
创建一个Person类:
获取这个Person类的Class对象有三种方式:
使用反射将.class文件读取到内存中
将上面的Person.java文件删除,留下Person.class文件。
使用反射将Person.class文件读取到内存中
使用反射创建Person类的对象
使用反射获取类中的属性
使用反射获取类中指定的属性并赋值
使用反射获取类中的方法
下面程序将.class文件中的方法反编译并打印出来了
User类:
测试类:
使用反射调用类中的方法
使用反射获取构造方法
使用反射获取父类和父接口
网友评论