package com.sf.reflect; import com.sf.javase.TestString; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class TestReflect { public static void main(String[] args) throws Exception { Class testReflect = TestReflect.class; Class forName = Class.forName("com.sf.reflect.TestReflect"); // 获取类对象的方式有多种 但同一个类的对象只有一个 // true or false System.out.println(testReflect == forName); // 按住ctrl点进去 String str = new String("hello"); String str1 = new String("world"); // 我们声明的类或jdk提供的类 本身也是一个对象 是Class类的对象 // 如果我们有String类型的对象 还有Integer类型的对象 // 通过对象 获取类对象 Class strClass = str.getClass(); Class str1Class = str1.getClass(); System.out.println(strClass == str1Class); Integer i1 = 1; Class intClass = i1.getClass(); Object o = strClass.newInstance(); Object o1 = testReflect.newInstance(); // 和直接创建对象的区别 TestReflect testReflect1 = new TestReflect(); // 获取String类的属性 // .var快捷键 // .sout快捷键 Field[] fields = strClass.getDeclaredFields(); // for循环快捷键 iter itar for (Field field : fields) { // 依次获取属性的修饰符、类型名称、属性名称 // 修饰符本身是数字 所以再把数字转化成字符串 System.out.print(field.getModifiers() + " "); System.out.print(Modifier.toString(field.getModifiers()) + " "); System.out.print(field.getType() + " "); System.out.print(field.getType().getSimpleName() + " "); System.out.print(field.getName()); System.out.println(); } System.out.println("------"); // 获取String类的方法 by FanYunLong Method[] declaredMethods = strClass.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { System.out.print(Modifier.toString(declaredMethod.getModifiers())+" "); System.out.print(declaredMethod.getReturnType().getSimpleName()+" "); System.out.print(declaredMethod.getName()); System.out.println(); } System.out.println("------"); //strClass.getDeclaredFields(); // 如果要获取全部的 使用getDeclaredFields() // 如果要获取公有的属性 使用getFields() Field[] strClassFields = strClass.getFields(); for (Field strClassField : strClassFields) { System.out.print(Modifier.toString(strClassField.getModifiers()) + " "); System.out.print(strClassField.getType().getSimpleName() + " "); System.out.print(strClassField.getName()); System.out.println(); } //获取构造方法 Constructor[] constructors = strClass.getConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); } } }