java 反射机制-获取对应class信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
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信息的主要内容,如果未能解决你的问题,请参考以下文章