|
@@ -0,0 +1,80 @@
|
|
|
+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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|