TestReflect.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.sf.reflect;
  2. import com.sf.javase.TestString;
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.Field;
  5. import java.lang.reflect.Method;
  6. import java.lang.reflect.Modifier;
  7. public class TestReflect {
  8. public static void main(String[] args) throws Exception {
  9. Class testReflect = TestReflect.class;
  10. Class forName = Class.forName("com.sf.reflect.TestReflect");
  11. // 获取类对象的方式有多种 但同一个类的对象只有一个
  12. // true or false
  13. System.out.println(testReflect == forName);
  14. // 按住ctrl点进去
  15. String str = new String("hello");
  16. String str1 = new String("world");
  17. // 我们声明的类或jdk提供的类 本身也是一个对象 是Class类的对象
  18. // 如果我们有String类型的对象 还有Integer类型的对象
  19. // 通过对象 获取类对象
  20. Class strClass = str.getClass();
  21. Class str1Class = str1.getClass();
  22. System.out.println(strClass == str1Class);
  23. Integer i1 = 1;
  24. Class intClass = i1.getClass();
  25. Object o = strClass.newInstance();
  26. Object o1 = testReflect.newInstance();
  27. // 和直接创建对象的区别
  28. TestReflect testReflect1 = new TestReflect();
  29. // 获取String类的属性
  30. // .var快捷键
  31. // .sout快捷键
  32. Field[] fields = strClass.getDeclaredFields();
  33. // for循环快捷键 iter itar
  34. for (Field field : fields) {
  35. // 依次获取属性的修饰符、类型名称、属性名称
  36. // 修饰符本身是数字 所以再把数字转化成字符串
  37. System.out.print(field.getModifiers() + " ");
  38. System.out.print(Modifier.toString(field.getModifiers()) + " ");
  39. System.out.print(field.getType() + " ");
  40. System.out.print(field.getType().getSimpleName() + " ");
  41. System.out.print(field.getName());
  42. System.out.println();
  43. }
  44. System.out.println("------");
  45. // 获取String类的方法 by FanYunLong
  46. Method[] declaredMethods = strClass.getDeclaredMethods();
  47. for (Method declaredMethod : declaredMethods) {
  48. System.out.print(Modifier.toString(declaredMethod.getModifiers())+" ");
  49. System.out.print(declaredMethod.getReturnType().getSimpleName()+" ");
  50. System.out.print(declaredMethod.getName());
  51. System.out.println();
  52. }
  53. System.out.println("------");
  54. //strClass.getDeclaredFields();
  55. // 如果要获取全部的 使用getDeclaredFields()
  56. // 如果要获取公有的属性 使用getFields()
  57. Field[] strClassFields = strClass.getFields();
  58. for (Field strClassField : strClassFields) {
  59. System.out.print(Modifier.toString(strClassField.getModifiers()) + " ");
  60. System.out.print(strClassField.getType().getSimpleName() + " ");
  61. System.out.print(strClassField.getName());
  62. System.out.println();
  63. }
  64. //获取构造方法
  65. Constructor<?>[] constructors = strClass.getConstructors();
  66. for (Constructor<?> constructor : constructors) {
  67. System.out.println(constructor);
  68. }
  69. }
  70. }