反射获得类的属性

蔚落 2022-03-16 07:12 277阅读 0赞
  1. package Reflect;
  2. public class Student {
  3. //属性
  4. public String name;
  5. protected int age;
  6. String address;
  7. private int idNum;
  8. /* //静态代码块,类加载的时候执行
  9. static{
  10. System.out.println("加载类-->我是静态代码块");
  11. }
  12. {
  13. System.out.println("生成了对象-->我是构造代码块");
  14. }
  15. public static void m1(int i){
  16. }
  17. public static int m1(int i,String a){
  18. return 1;
  19. }
  20. public static void m2(){
  21. }*/
  22. }
  23. package Reflect;
  24. import java.io.File;
  25. import java.io.FileDescriptor;
  26. import java.lang.reflect.Field;
  27. import java.lang.reflect.Modifier;
  28. /**
  29. * 通过反射得到类的属性:
  30. * Java中定义了一个Field类来表示属性
  31. * @author john
  32. *
  33. */
  34. public class Demo2 {
  35. /**
  36. * @param args
  37. * @throws ClassNotFoundException
  38. * @throws SecurityException
  39. * @throws NoSuchFieldException
  40. * @throws IllegalAccessException
  41. * @throws InstantiationException
  42. */
  43. public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException {
  44. Class class1=Class.forName("Reflect.Student");
  45. /**
  46. * 获得属性基本信息
  47. */
  48. System.out.println("========================获得可访问属性===================================");
  49. //获得可访问属性
  50. //getFields()获得的是public修饰的属性
  51. Field[] field1=class1.getFields();
  52. for(Field fs:field1){
  53. System.out.println(fs);
  54. }
  55. System.out.println("==========");
  56. //获得所有的属性
  57. Field[] field2=class1.getDeclaredFields();
  58. for(Field fs:field2){
  59. System.out.println(fs);
  60. }
  61. System.out.println("==========");
  62. //获得单独属性
  63. Field field3=class1.getDeclaredField("name");
  64. System.out.println(field3);
  65. System.out.println("======================== 给属性赋值===================================");
  66. /**
  67. * 给属性赋值(注意public与private属性)
  68. */
  69. //得到对象
  70. Object o=class1.newInstance();
  71. //赋值
  72. field3.set(o,"小汪");
  73. //查看属性的值
  74. System.out.println("给public属性赋值:name="+field3.get(o));
  75. //给private修饰的属性赋值
  76. Field field4=class1.getDeclaredField("idNum");
  77. field4.setAccessible(true);//打破封装-->导致属性不安全
  78. field4.set(o, 114);
  79. System.out.println("给private属性赋值:idNum="+field4.get(o));
  80. System.out.println("================获得属性中的类型,修饰符,变量名称===============================");
  81. /**
  82. * 获得属性中的类型,修饰符,变量名称
  83. */
  84. //获得类型
  85. for(Field fs:field2){
  86. Class type=fs.getType();
  87. System.out.println(type);
  88. }
  89. System.out.println("==========");
  90. //获得变量名称
  91. for(Field fs:field2){
  92. System.out.println(fs.getName());
  93. }
  94. System.out.println("==========");
  95. //获得修饰符(返回的数字代表不同的修饰符号)
  96. for(Field fs:field2){
  97. int i=fs.getModifiers();
  98. System.out.println(Modifier.toString(i));
  99. }
  100. System.out.println("==================================================================");
  101. }
  102. }

发表评论

表情:
评论列表 (有 0 条评论,277人围观)

还没有评论,来说两句吧...

相关阅读