反射机制的相关类
与Java反射相关的类如下:
类名 |
用途 |
Class类 |
代表类的实体,在运行的Java应用程序中表示类和接口 |
Field类 |
代表类的成员变量(成员变量也称为类的属性) |
Method类 |
代表类的方法 |
Constructor类 |
代表类的构造方法 |
Class类
Class代表类的实体,在运行的Java应用程序中表示类和接口。在这个类中提供了很多有用的方法,这里对他们简单的分类介绍。
方法 |
用途 |
asSubclass(Class<U> clazz) |
把传递的类的对象转换成代表其子类的对象 |
Cast |
把对象转换成代表类或是接口的对象 |
getClassLoader() |
获得类的加载器 |
getClasses() |
返回一个数组,数组中包含该类中所有公共类和接口类的对象 |
getDeclaredClasses() |
返回一个数组,数组中包含该类中所有类和接口类的对象 |
forName(String className) |
根据类名返回类的对象 |
getName() |
获得类的完整路径名字 |
newInstance() |
创建类的实例 |
getPackage() |
获得类的包 |
getSimpleName() |
获得类的名字 |
getSuperclass() |
获得当前类继承的父类的名字 |
getInterfaces() |
获得当前类实现的类或是接口 |
方法 |
用途 |
getField(String name) |
获得某个公有的属性对象 |
getFields() |
获得所有公有的属性对象 |
getDeclaredField(String name) |
获得某个属性对象 |
getDeclaredFields() |
获得所有属性对象 |
方法 |
用途 |
getAnnotation(Class<A> annotationClass) |
返回该类中与参数类型匹配的公有注解对象 |
getAnnotations() |
返回该类所有的公有注解对象 |
getDeclaredAnnotation(Class<A> annotationClass) |
返回该类中与参数类型匹配的所有注解对象 |
getDeclaredAnnotations() |
返回该类所有的注解对象 |
方法 |
用途 |
getConstructor(Class…<?> parameterTypes) |
获得该类中与参数类型匹配的公有构造方法 |
getConstructors() |
获得该类的所有公有构造方法 |
getDeclaredConstructor(Class…<?> parameterTypes) |
获得该类中与参数类型匹配的构造方法 |
getDeclaredConstructors() |
获得该类所有构造方法 |
方法 |
用途 |
getMethod(String name, Class…<?> parameterTypes) |
获得该类某个公有的方法 |
getMethods() |
获得该类所有公有的方法 |
getDeclaredMethod(String name, Class…<?> parameterTypes) |
获得该类某个方法 |
getDeclaredMethods() |
获得该类所有方法 |
方法 |
用途 |
isAnnotation() |
如果是注解类型则返回true |
isAnnotationPresent(Class<? extends Annotation> annotationClass) |
如果是指定类型注解类型则返回true |
isAnonymousClass() |
如果是匿名类则返回true |
isArray() |
如果是一个数组类则返回true |
isEnum() |
如果是枚举类则返回true |
isInstance(Object obj) |
如果obj是该类的实例则返回true |
isInterface() |
如果是接口类则返回true |
isLocalClass() |
如果是局部类则返回true |
isMemberClass() |
如果是内部类则返回true |
Field类
Field代表类的成员变量(成员变量也称为类的属性)。
方法 |
用途 |
equals(Object obj) |
属性与obj相等则返回true |
get(Object obj) |
获得obj中对应的属性值 |
set(Object obj, Object value) |
设置obj中对应属性值 |
Method类
Method代表类的方法。
方法 |
用途 |
invoke(Object obj, Object… args) |
传递object对象及参数调用该对象对应的方法 |
Constructor类
Constructor代表类的构造方法。
方法 |
用途 |
newInstance(Object… initargs) |
根据传递的参数创建类的对象 |
=================================================================================
Java类加载器内容的详解:
1、类的加载
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化
·加载:
就是指将class文件读入内存,并为之创建一个Class对象,任何类被使用时系统都会建立一个Class对象
·连接:
验证:确保被加载类的正确性
准备:负责为类的静态成员分配内存,并设置默认初始化值
解析:将类中的符号引用替换为直接引用
·初始化:
局部变量保存在栈区:必须手动初始化
new 的对象保存在堆区:虚拟机会进行默认初始化,基本数据类型初始化值为0,引用类型初始化值为null
2、类加载的时机(只加载一次)
以下时机仅表示第一次的时候
① 创建类的实例的时候
② 访问类的静态变量的时候
③ 调用类的静态方法的时候
④ 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
⑤ 初始化某个类的子类的时候
⑥ 直接使用java.exe命令来运行某个主类
3、类加载器
负责将.class文件加载到内存中,并为之生成对应的Class对象
虽然我们在开发过程中不需要关心类加载机制,但是了解这个机制我们就能更好的理解程序的运行
4、类加载器的组成:
①Bootstrap ClassLoader 根类加载器
也被称为引导类加载器,负责Java核心类的加载,比如System类,在JDK中JRE的lib目录下rt.jar文件中的类
②Extension ClassLoader 扩展类加载器
负责JRE的扩展目录中jar包的加载,在JDK中JRE的lib目录下ext目录
③System ClassLoader 系统类加载器
负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径,主要是我们开发者自己写的类。
本文转载自:https://blog.csdn.net/wh710107079/article/details/86294628