JAVA反射调用无参构造、有参构造、普通方法、私有方法,成员变量操作
JAVA反射调用无参构造、有参构造、普通方法、成员操作
Person类
package demo; public class Person { private String id; private String name; public Person(){ System.out.println('我是无参构造'); } private Person(String id){ System.out.println('我是有参私有构造,传入的值为:'+id); } public Person(String id,String name){ System.out.println('我是有参公有构造,传入的值为:'+id+','+name); } public void create(String name){ System.out.println('我是create方法,参数为:'+name); } }
- 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
- 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
- 测试方法
package demo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Hello {
public static void main(String[] args) throws Exception {
//String fieldName = 'name' ; //要操作的成员
Class <?> cls = Class.forName('demo.Person') ;
Object obj = cls.newInstance(); //调用无参构造
//调用类成员
Field fieldName = cls.getDeclaredField('name') ;
fieldName.setAccessible(true); //允许访问私有
fieldName.set(obj, '张三') ;
System.out.println(fieldName.get(obj));
//调用公有有参构造
Constructor<?> csr = cls.getConstructor(String.class ,String.class) ; //调用有参构造
Object obj1 = csr.newInstance('123','张三丰') ;
//调用有参构造,私有的有参构造 需要用 getDeclaredConstructor方法
Constructor<?> csr1 = cls.getDeclaredConstructor(String.class) ; //调用私有构造
csr1.setAccessible(true);
Object obj2 = csr1.newInstance('123321') ;
// 第一个参数是方法名称,第二个参数是参数的类型,如果有多个参数,依次填写
Method mth = cls.getMethod('create', String.class);
// 调用方法
mth.invoke(obj, '创造');
//调用普通方法
}
}
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
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
赞 (0)