反射获得类的成员变量以及构造方法——反射_3 – 热爱改变生活
我的GitHub GitHub |     登录
  • If you can't fly, then run; if you can't run, then walk; if you can't walk, then crawl
  • but whatever you do, you have to keep moving forward。
  • “你骗得了我有什么用,这是你自己的人生”
  • 曾有伤心之地,入梦如听 此歌

反射获得类的成员变量以及构造方法——反射_3

Java sinvader 3835℃ 0评论

1. 首先把要测试类的放出来。里面包含了成员变量以及构造函数:

  1. public class TestClass {
  2. public String name = "";
  3. public int age = 2;
  4. public double height = 2.2;
  5. private String address = "";
  6. float salary;
  7.  
  8. public TestClass() {
  9.  
  10. }
  11.  
  12. public TestClass(String name, int age, double height) {
  13.  
  14. }
  15. }

2. 下面是获得成员变量以及构造函数的方法:

  1. public class ClassUtil {
  2. /**获取类中的成员变量
  3. * @param obj
  4. */
  5. public static void getClassFieldUseGetFields(Object obj) {
  6. Class c = obj.getClass();
  7. System.out.println("当前类的名称为:" + c.getName());
  8. System.out.println("类中的成员变量有:");
  9. Field[] fields = c.getFields();// 使用这个方法获得的是 public 的方法
  10. // 使用 Modifier.toString(field.getModifiers()) 方法可以获得变量的修饰符:public private 等
  11. for (Field field : fields) {
  12. System.out.println(Modifier.toString(field.getModifiers()) + " " + field.getGenericType() + " " + field.getName() + "");
  13. }
  14. }
  15.  
  16. /**
  17. * 获取类中的成员变量
  18. * @param obj
  19. */
  20. public static void getClassFieldUseGetDeclaredFields(Object obj) {
  21. Class c = obj.getClass();
  22. System.out.println("当前类的名称为:" + c.getName());
  23. System.out.println("类中的成员变量有:");
  24. Field[] fields = c.getDeclaredFields();// 使用这个方法获得的是类里面所有的自己定义的变量
  25. // 使用 Modifier.toString(field.getModifiers()) 方法可以获得变量的修饰符:public private 等
  26. for (Field field : fields) {
  27. System.out.println(Modifier.toString(field.getModifiers()) + " " + field.getType() + " " + field.getName() + "");
  28. }
  29. }
  30.  
  31. /**
  32. * 获取类中的构造方法
  33. * @param obj
  34. */
  35. public static void getClassConInfo(Object obj) {
  36. Class c = obj.getClass();
  37. Constructor[] con = c.getConstructors();
  38. for (Constructor constructor : con) {
  39. System.out.print(Modifier.toString(constructor.getModifiers()) + " " + constructor.getName() + "(");
  40. Class[] parameterType = constructor.getParameterTypes();
  41. for (Class class1 : parameterType) {
  42. System.out.print(class1.getName()+",");
  43. }
  44. System.out.print(")");
  45. System.out.println("");
  46. }
  47. }
  48. }

3. 运行代码:

  1. public static void main(String[] args) {
  2. TestClass t = new TestClass();
  3. System.out.println("使用 GetField-----------------------------------");
  4. ClassUtil.getClassFieldUseGetFields(t);
  5. System.out.println("使用 GetDeclared-----------------------------------");
  6. ClassUtil.getClassFieldUseGetDeclaredFields(t);
  7. System.out.println("获得类的构造方法的信息-----------------------------------");
  8. ClassUtil.getClassConInfo(t);
  9. }

4. 运行结果:

  1. 当前类的名称为:cn.sumile.TestClass
  2. 类中的成员变量有:
  3. public class java.lang.String name
  4. public int age
  5. public double height
  6. 使用 GetDeclared-----------------------------------
  7. 当前类的名称为:cn.sumile.TestClass
  8. 类中的成员变量有:
  9. public class java.lang.String name
  10. public int age
  11. public double height
  12. private class java.lang.String address
  13. float salary
  14. 获得类的构造方法的信息-----------------------------------
  15. public cn.sumile.TestClass()
  16. public cn.sumile.TestClass(java.lang.String,int,double,)
  17.  
测试代码
¥ 有帮助么?打赏一下~

转载请注明:热爱改变生活.cn » 反射获得类的成员变量以及构造方法——反射_3


本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » 反射获得类的成员变量以及构造方法——反射_3

喜欢 (1)
发表我的评论
取消评论
表情

如需邮件形式接收回复,请注册登录

Hi,你需要填写昵称和邮箱~

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址