1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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);
- }
- }
- }
|