java-通過反射獲取目標類的屬性,方法,構造器


首先定義一個urse

 1 package com.studay_fanshe;
 2 
 3 public class User {
 4     private String uname;
 5     private int age;
 6     private int id;
 7 
 8     public User() {
 9     }
10 
11     public User(String uname, int age, int id) {
12         this.uname = uname;
13         this.age = age;
14         this.id = id;
15     }
16 
17     public String getUname() {
18         return uname;
19     }
20     public void setUname(){
21         this.uname="七月";
22     }
23     public void setUname(String uname) {
24         this.uname = uname;
25     }
26 
27     public int getAge() {
28         return age;
29     }
30 
31     public void setAge(int age) {
32         this.age = age;
33     }
34 
35     public int getId() {
36         return id;
37     }
38 
39     public void setId(int id) {
40         this.id = id;
41     }
42 }
 1 package com.studay_fanshe;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 
 7 public class test01 {
 8     public static void main(String[] args) throws Exception{
 9 
10         Class clazz = Class.forName("com.studay_fanshe.User");
11 //獲取名字
12         String name = clazz.getName();//獲取包名+類名:com.studay_fanshe.User
13         System.out.println(name);
14         String simpleName = clazz.getSimpleName();//獲取類名:User
15         System.out.println(simpleName);
16  //獲取屬性
17         Field[] fields = clazz.getFields();//獲取所有的公共的public修飾的屬性
18         System.out.println(fields.length);
19         Field[] f = clazz.getDeclaredFields();//獲取全部的屬性包括私有的
20         for (Field field : f) {
21           /*  private java.lang.String com.studay_fanshe.User.uname
22               private int com.studay_fanshe.User.age
23               private int com.studay_fanshe.User.id*/
24             System.out.println(field);
25         }
26         //獲取指定屬性名的屬性:private java.lang.String com.studay_fanshe.User.uname
27         Field uname = clazz.getDeclaredField("uname");
28         System.out.println(uname);
29 //獲取方法
30         Method[] methods = clazz.getMethods();//獲取指定類中所有的方法
31         for (Method method : methods) {
32             System.out.println("所有的方法:"+method);
33         }
34         //獲取指定類中公有的方法
35         Method[] m = clazz.getDeclaredMethods();
36         for (Method method : m) {
37             System.out.println("public公有的方法"+method);
38         }
39         System.out.println("--------------------------------------------");
40       /*  public void setUname(String uname) {
41             this.uname = uname;
42         }*/
43       //有參數類型必須傳入參數類型對應的class對象
44         Method setUname = clazz.getDeclaredMethod("setUname", String.class);
45         System.out.println(setUname);
46      /*   public void setUname(){
47             this.uname="七月";
48         }*/
49      //沒有參數類型那么參2我們就寫null
50         Method setUname1 = clazz.getDeclaredMethod("setUname", null);
51         System.out.println(setUname1);
52  //獲得構造器
53         Constructor[] dc = clazz.getDeclaredConstructors();
54         for (Constructor constructor : dc) {
55             System.out.println("構造器:"+constructor);
56         }
57         Constructor dec = clazz.getDeclaredConstructor(String.class, int.class, int.class);
58         System.out.println("指定的構造器:"+dec);
59     }
60 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM