JAVA学习8
JAVA学习1-CSDN博客JAVA学习2-CSDN博客JAVA学习3-CSDN博客JAVA学习4-CSDN博客JAVA学习5-CSDN博客JAVA学习6-CSDN博客JAVA学习7-CSDN博客一、Java反射是什么反射Reflection是一种在运行时获取类信息的能力。通过反射可以在程序运行时获取类的完整结构类名、修饰符、父类、接口等获取类的成员字段、方法、构造器创建对象、调用方法、访问字段即使是私有的二、类信息包含哪些类别包含内容类基本信息类名、包名、修饰符public/private/final等、父类、实现的接口字段Field所有成员变量名称、类型、修饰符方法Method所有方法名称、返回类型、参数类型、修饰符构造器Constructor所有构造方法参数列表、修饰符注解Annotation类、字段、方法上的注解信息三、类加载成对象的过程三个阶段阶段说明源文件阶段.java源文件尚未编译类对象阶段编译成.class字节码文件由类加载器加载到内存生成Class对象运算时阶段通过Class对象创建实例调用方法实际运行程序类信息主要存储在类对象阶段即Class对象中。每个类在JVM中只有一个Class对象包含了该类的完整元数据。四、三种获取Class对象的方式方式适用场景特点类名.class已知类名最直接不会触发静态块对象.getClass()有对象实例运行时获取实际类型Class.forName()动态加载类名来自配置文件会触发静态块抛出ClassNotFoundException五、获取类的成员信息Class对象提供了多组方法来获取类的成员获取字段Field// 获取所有public字段包括父类 Field[] fields clazz.getFields(); // 获取所有字段包括private不包括父类 Field[] declaredFields clazz.getDeclaredFields(); // 获取指定public字段 Field field clazz.getField(fieldName); // 获取指定字段包括private Field declaredField clazz.getDeclaredField(fieldName);获取方法Method// 获取所有public方法包括父类 Method[] methods clazz.getMethods(); // 获取所有方法包括private不包括父类 Method[] declaredMethods clazz.getDeclaredMethods(); // 获取指定public方法 Method method clazz.getMethod(methodName, parameterTypes); // 获取指定方法包括private Method declaredMethod clazz.getDeclaredMethod(methodName, parameterTypes);获取构造器Constructor// 获取所有public构造器 Constructor?[] constructors clazz.getConstructors(); // 获取所有构造器包括private Constructor?[] declaredConstructors clazz.getDeclaredConstructors(); // 获取指定public构造器 Constructor? constructor clazz.getConstructor(parameterTypes); // 获取指定构造器包括private Constructor? declaredConstructor clazz.getDeclaredConstructor(parameterTypes);带上Declared的方法可以获得全部修饰符public、protected、private、default修饰的变量、方法和构造器不带的只能获得public修饰的成员。利用constructor获取当前构造函数获取每一个变量并给每一个变量赋值取值操作方法