学Java反射,明白三点就足够了

(1).java(Java的源文件),通过编译生成的.class(字节码文件),要通过jvm(java虚拟机)加载到内存中运行,在加载的过程中会创建一个.class文件的文件对象,通过这个对象可以实现对.class文件的解析

(2)通过解析.class文件,我们可以获得类的构造函数(可以用来创建对象),属性和方法。值得注意的一点,属性和方法是对于一个类的实例而言的。

(3)反射起到的作用:一个已经编写好的程序,要添加新的功能。修改源码是非常困难的。我们可以通过反射,把拥有新功能的类加载到内存,然后利用反射获取这个类(属性和方法等),把这个类实现的功能添加到原来的程序中。要注意的是,反射机制是运行时候才产生的。

1.获取加载类对象

方式一: 通过Object类中的getObject()方法

Person p = new Person();

Class c = p.getClass();

方式二: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方式简单)。

Class c2 = Person.class;

方式三: 通过Class类中的方法(将类名作为字符串传递给Class类中的静态方法forName即可)。

Class c3 = Class.forName("Person");

我都是选用方法三

2.获取类的构造函数并且初始化对象

(1)不带参数

clip_image001

(2)带有参数

clip_image003

(3)对象的初始化

clip_image004

3.获取类的属性并且修改对象属性

(1)获取类的属性

clip_image005

4.获取类的函数并且调用对象的函数

(1)获取函数

clip_image006

5.反射的应用实例

(1)反射配置文件
为什么要使用反射配置文件?

clip_image007

创建了三个类Person Student Worker,每一个里面都已各自的方法,使用Test测试里面的方法,每测试一个都要实例化一个对象,也就是说要不断的修改源码,这种方式不好。我们可以通过反射,使用Peoperties.txt通过键值对的方式把类和方法存储起来,当要使用不同的类中的方法的时候只要修改键值对就可以了。Peoperties.txt的键值对如下:

clip_image008

具体的实现:

(1) 利用I/O把键值对读取出来

(2) 利用获取出来的类和方法,创建对象,获取方法,调用方法

clip_image009

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐