fzy-blog

java反射基础

2019-05-24

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

1.通过一个对象获得完整的包名和类名 (注:所有类的对象其实都是Class的实例)
Demo demo = new Demo();
demo.getClass().getName();
2.实例化Class类对象
//一般采用这种方式
Class<?> demo1 = Class.forName("Reflect.Demo"); //Reflect是包名 Demo是类名
Class<?> demo2 = new Demo().getClass();
Class<?> demo3 = Demo.class;
3.通过Class实例化其他类的对象
Class<?> clazz = Class.forName("Reflect.Person");
Person per = (Person)clazz.newInstance();
4.通过Class调用其他类中的构造函数
Class<?> clazz = Class.forName("Reflect.Person");
//取得全部的构造函数 包括父类的方法
Constructor<?> cons[] = clazz.getConstructors();
Person per1 = (Person)cons[0].newInstance("Rollen");
Person per2 = (Person)cons[1].newInstance(20);
Person per3 = (Person)cons[2].newInstance("Rollen",20);
5.返回一个类实现的接口:
Class<?> clazz = Class.forName("Reflect.Person");
//保存所有的接口
Class<?> intes[] = clazz.getInterfaces();
intes[0].getName();
6.取得其他类中的父类
Class<?> clazz = Class.forName("Reflect.Person");
//取得父类
Class<?> temp = clazz.getSuperclass();
7.获得其他类中的全部构造函数
Class<?> clazz = Class.forName("Reflect.Person");
Constructor<?> cons[] = clazz.getConstructors();
for(int i=0;i<cons.length;i++){
System.out.println("构造方法:"+cons[i]);
}
8.取得本类的属性
Class<?> clazz = Class.forName("Reflect.Person");

Field[] field = clazz.getDeclaredFields();
for(int i=0;i<field.length;i++){
int mo = field[i].getModifiers();
String priv = Modifier.toString(mo);
Class<?> type = field[i].getType();
}
//获得所有类的方法包括父类的方法
Field[] field1 = clazz.getFields();
for(int j=0;j<freld1.length;j++){
int mo = filed1[j].getModifiers();
String priv = Modifier.toString(mo);
Class<?> type = field1[i].getType();
}
9.调用类中的方法
//调用Person类中的sayChina方法
Class<?> clazz = Class.forName("Reflect.Person");
Method method = clazz.getMethod("sayChina");
method.invoke(clazz.newInstance());
//调用Person的sayHello方法
method = clazz.getMethod("sayHello",String.class);
method.invoke(clazz.newInstance(),"Rollen",20);
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章