##JAVA 反射
获取类对象
对象概念
: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。在理解类对象之前,先说我们熟悉的对象之间的区别:狗
和猫
都是动物
对象,他们的区别在于,各自有不同的名称,体型,叫声等。然后说说类之间的区别狗
和猫
都是类,他们的区别在于有不同的方法,不同的属性。
类对象
,就是用于描述这种类,都有什么属性,什么方法的。
获取类对象有3种方式
1. Class.forName
2. Hero.class
3. new Hero().getClass()
创建对象
反射机制
,会先拿到Hero的“类对象”,然后通过类对象获取“构造器对象”,再通过构造器对象创建一个对象
访问属性
通过反射机制修改对象的属性.
getField
和getDeclaredField
的区别,这两个方法都是用于获取字段。
getField
只能获取public
的,包括从父类继承来的字段。
getDeclaredField
可以获取本类所有的字段,包括private
的,但是不能获取继承来的字段。
(注: 这里只能获取到private的字段,但并不能访问该private
字段的值,除非加上setAccessible(true))
调用方法
有什么用
反射非常强大,但是学习了之后,会不知道该如何使用,反而觉得还不如直接调用方法来的直接和方便。
通常来说,需要在学习了Spring 的依赖注入,反转控制之后,才会对反射有更好的理解,
使用反射方式,首先准备一个配置文件,就叫做spring.txt吧, 放在src目录下。 里面存放的是类的名称,和要调用的方法名。
在测试类Test中,首先取出类名称和方法名,然后通过反射去调用这个方法。
当需要从调用第一个业务方法,切换到调用第二个业务方法的时候,不需要修改一行代码,也不需要重新编译,只需要修改配置文件spring.txt,再运行即可。
这也是Spring框架的最基本的原理,只是它做的更丰富,安全,健壮。