二、反射机制动态操作方法_ 属性_构造器

 

 

 

 

 1 public class User {
 2     //类的属性
 3     //public int userId;
 4     private int userId;
 5     private String userName;
 6     private String password;
 7     //公有的取值,赋值方法
 8     public int getUserId() {
 9         return userId;
10     }
11     public void setUserId(int userId) {
12         this.userId = userId;
13     }
14     public String getUserName() {
15         return userName;
16     }
17     public void setUserName(String userName) {
18         this.userName = userName;
19     }
20     public String getPassword() {
21         return password;
22     }
23     public void setPassword(String password) {
24         this.password = password;
25     }
26     //构造方法
27     public User() {
28         // TODO Auto-generated constructor stub
29     }
30     public User(int userId, String userName, String password) {
31         super();
32         this.userId = userId;
33         this.userName = userName;
34         this.password = password;
35     }
36     
37     
38 }
 1 public class Test1 {
 2     public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
 3         String path = "fanshe.User";
 4         //(1)获取类的名称
 5         Class c = Class.forName(path);
 6         System.out.println("(1)获取类的名称");
 7         System.out.println("类的全名称:"+c.getName());  //fanshe.User
 8         System.out.print("类的名称:"+c.getSimpleName());   //User
 9         System.out.println("
--------------------------");
10 
11         //获取父类的Class对象
12         Class csuper = c.getSuperclass();
13         System.out.println("获取父类的Class对象");
14         System.out.println("类的全名称:"+csuper.getName());   //java.lang.Object
15         System.out.print("类的名称:"+csuper.getSimpleName());    //Object
16         System.out.println("
--------------------------");
17 
18         //(2)获取类的属性信息
19         //Field f=c.getField("userId"); //只能获取公共的属性
20         //System.out.println(f);
21         System.out.println("获取类的属性信息");
22         Field [] fields=c.getFields(); //只能获取公共的属性
23         System.out.println(fields.length);    //0
24 
25         Field [] fields2 = c.getDeclaredFields();
26         System.out.println(fields2.length);  //3
27         for (Field field : fields2){
28             //System.out.println(field);//调用了toString()方法
29             System.out.println(field.getModifiers()+"	"+field.getType()+"	"+field.getName());  //field.getModifiers():访问权限,2代表private
30         }
31 
32 
33         //(3)获取类的方法信息
34         System.out.println("(3)获取类的方法信息");
35         Method[] methods = c.getDeclaredMethods();//本类中的公共的方法对象
36         //System.out.println(methods.length);  //6
37         for(Method method:methods){
38             //System.out.println(method);
39             System.out.println("访问权限"+method.getModifiers());
40             System.out.println("返回值类型:"+method.getReturnType());
41             System.out.println("方法的名称:"+method.getName());
42             //获取方法的参数
43             System.out.println("//获取方法的参数");
44             Class [] cPara=method.getParameterTypes();
45             for (Class c1 : cPara) {
46                 System.out.println(c1.getTypeName()+"	");
47             }
48             System.out.println("
--------------------------");
49         }
50         System.out.println("
=============================
");
51 
52 
53         //(4)获取类的构造器
54         System.out.println("(4)获取类的构造器");
55         Constructor [] cons=c.getConstructors();
56         for (Constructor constructor : cons) {
57             System.out.println(constructor);
58         }
59         System.out.println("
=====================");
60         //获取指定的构造方法
61         System.out.println("获取指定的构造方法");
62         Constructor con=c.getConstructor(null);
63         System.out.println(con);
64         System.out.println("
=====================");
65         Constructor con2=c.getConstructor(int.class,String.class,String.class);
66         System.out.println(con2);
67     }
68 }

2.5 动态的操作属性、方法、构造方法

 1 public class Test2 {
 2     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
 3         //获到Class类的对象
 4         Class c=Class.forName("com.bjsxt.entity.User");
 5         
 6         //(1)得到无参构造方法的对象
 7         Constructor cons=c.getConstructor(null);
 8         //通过无参构造方法的对象,创建User类的对象
 9         User user=(User) cons.newInstance();
10         
11         //(2)动态操作属性
12         Field field=c.getDeclaredField("userId");
13         field.setAccessible(true);//这个属性不需要做安全检查了,可以直接访问
14         field.set(user, 1001);  //通过反射直接赋值
15         System.out.println("取出userId这个属性的值:"+field.get(user));//通过反射直接取值
16         
17         //(3)动态操作方法
18         Method m=c.getDeclaredMethod("setUserName", String.class);
19         //执行setUserName这个方法
20         m.invoke(user, "张三");
21         Method m2=c.getDeclaredMethod("getUserName", null);
22         System.out.println(m2.invoke(user));
23     }
24 }

原文地址:https://www.cnblogs.com/qiaoxin11/p/12706519.html