Java反射的获取方法和属性

admin 2018-07-14 阅读


获取方法

getMethod(String name, Class<?>... parameterTypes) 返回类中的某个公共方法-包括父类中的公共方法

getMethods()返回方法数组 下同

getDeclaredMethod(String name, Class<?>... parameterTypes) 返回类中所有方法-包括私有方法

 

获取属性

getField(String name) 返回pubilc属性- 包括父类

getFields() 返回属性数组 下同

getDeclaredField(String name)返回所有属性-不包括父类

 

 

复制代码
//default包中的Test03类
public class Test03 {
    
    public String a = "Test03的public字符串";
    
    private String b = "Test03的private字符串";
    
    public void show(){
        System.out.println("hi huang!");
    }
    private void show_private(){
        System.out.println("this is a peivate method");
    }
    public void show(String str, String s){
        System.out.println(str+s);
    }
}
复制代码
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package lei;
 
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
 
public class Test04 {
    
    public static void main(String[] args){
 
      //用反射调用default包里的Test03类中的无参show方法 第二个参数也可以写null 这里空着
        try{
            Class<?> c = Class.forName("Test03");
            Method method = c.getMethod("show");
            System.out.println(method);
            method.invoke(c.newInstance());
        }catch(Exception e){
            
        }
        
      //用反射调用default包里的Test03类中的参数为两个String的show方法
        try{
            Class<?> c = Class.forName("Test03");
            Method method = c.getMethod("show", String.class, String.class);
            System.out.println(method);
            //String[] varArgs = {"shixin", "zhang"};
            method.invoke(c.newInstance(), "hi men""!!!");
        }catch(Exception e){
            
        }
        
      //调用Test03中的私有无参方法
        try{
            Class<?> c = Class.forName("Test03");
            Method method = c.getDeclaredMethod("show_private");
            method.setAccessible(true);
            System.out.println(method);
            method.invoke(c.newInstance());
        }catch(Exception e){
            
        }
        
      //反射实例化Test03类 打印Test03中所有属性
        try{
            Class<?> c = Class.forName("Test03");
            Field[] fields = c.getDeclaredFields();
            
            Field f = c.getField("a");
            System.out.println(f.get(new T()));
            
            for (Field field: fields){
                field.setAccessible(true);
                System.out.println(field);
                System.out.println(field.get(new T()));
            }          
        }catch(Exception e){
            
        }
        
        //反射实例化Test03类 打印Test03中私有属性
        try{
            Class<?> c = Class.forName("Test03");
            Field f = c.getDeclaredField("b");
            
            f.setAccessible(true);
            System.out.println(f);
            System.out.println(f.get(c.newInstance()));        
        }catch(Exception e){
            
        }
    }
 
}

 

声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。