首页 > 代码库 > java 反射机制-获取对应class信息

java 反射机制-获取对应class信息

技术分享
 1 package reflection;
 2 
 3 public class User {
 4     public String name;
 5     protected int age;
 6     String address;
 7     private String sex;
 8     
 9     public User() {
10         super();
11     }
12     
13     public User(String name, int age, String sex) {
14         super();
15         this.name = name;
16         this.age = age;
17         this.sex = sex;
18     }
19     
20     public String getName() {
21         return name;
22     }
23     public void setName() {
24         this.name = "test";
25     }
26     public int getAge() {
27         return age;
28     }
29     public String getSex() {
30         return sex;
31     }
32     public void setSex(String sex) {
33         this.sex = sex;
34     }
35     
36 }
class User
 1 package reflection;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 
 7 public class Demo01 {
 8     public static void main(String[] args) {
 9 
10         Class<?> c;
11         try {
12             c = Class.forName("reflection.User");
13 
14             // 获取类的名称
15             System.out.println("获取类的名称");
16             System.out.println("getName():" + c.getName());// 获得包名+类名
17             System.out.println("getSimpleName():" + c.getSimpleName());// 获得类名
18             System.out.println("getCanonicalName():" + c.getCanonicalName());// 获得类名
19             System.out.println("*******************************");
20             // 获取属性信息
21             System.out.println("获取属性信息");
22             Field[] fields = c.getDeclaredFields();
23             // Field[] fields = c.getFields(); 只能获取public修饰的属性信息
24             for (Field f : fields) {
25                 String fName = f.getName();
26                 System.out.println(c.getDeclaredField(fName));
27             }
28             System.out.println("*******************************");
29             // 获取方法信息
30             System.out.println("获取方法信息");
31             Method[] methods = c.getDeclaredMethods();
32             for (Method m : methods) {
33                 // String mName = m.getName();
34                 System.out.println(m.getName() + "-->" + m);
35             }
36             System.out.println("通过名称单独获取对应的getName方法:" + c.getDeclaredMethod("getName"));
37             System.out.println("通过名称单独获取对应的setSex方法:" + c.getDeclaredMethod("setSex", String.class));// 方法有参,必须传递参数类型
38             System.out.println("*******************************");
39             // 获取构造器信息
40             System.out.println("获取构造器信息");
41             Constructor<?>[] constructor = c.getConstructors();
42             for (Constructor<?> cons : constructor) {
43                 System.out.println(cons);
44             }
45 
46         } catch (ClassNotFoundException | NoSuchFieldException | SecurityException e) {
47             e.printStackTrace();
48         } catch (NoSuchMethodException e) {
49             e.printStackTrace();
50         }
51     }
52 }

output:

获取类的名称
getName():reflection.User
getSimpleName():User
getCanonicalName():reflection.User
*******************************
获取属性信息
public java.lang.String reflection.User.name
protected int reflection.User.age
java.lang.String reflection.User.address
private java.lang.String reflection.User.sex
*******************************
获取方法信息
getName-->public java.lang.String reflection.User.getName()
setName-->public void reflection.User.setName()
setSex-->public void reflection.User.setSex(java.lang.String)
getSex-->public java.lang.String reflection.User.getSex()
getAge-->public int reflection.User.getAge()
通过名称单独获取对应的getName方法:public java.lang.String reflection.User.getName()
通过名称单独获取对应的setSex方法:public void reflection.User.setSex(java.lang.String)
*******************************
获取构造器信息
public reflection.User()
public reflection.User(java.lang.String,int,java.lang.String)

 

java 反射机制-获取对应class信息