Java类加载器与Java反射
2021/8/30 9:06:21
本文主要是介绍Java类加载器与Java反射,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、Java类加载器
当程序要使用某个类时,如果该类还没有被加载到内存中,JVM会通过加载、连接、初始化三个步骤,实现对这个类的初始化。
- 加载
将class文件读入JVM内存,并创建一个Class对象,任何类被使用时只有一个Class对象。
- 连接
验证是否有正确的内部结构,并和其他类协调一致
准备负责为类静态成员分配内存,并设置默认初始化
解析该类的二进制数据中的符号引用替换为直接引用
- 初始化
初始化相关步骤
二、Java反射
反射是在运行时根据指定的类获取类的信息。
对于任意一个类,都能够知道这个类的属性和方法;对于任意一个对象,都能够调用它的任意方法与属性。
要想了解一个类,必须先要获得字节码文件对象Class对象。
2.1 通过反射获取Class
获取Class对象的三种方式
- 对象.getClass
- 类名.class
- Class.forName
import agent.Person; /** * 对象.getClass * 类名.class * Class.forName */ public class Reflect { public static void main(String[] args) throws ClassNotFoundException { //方式一 对象.class Person person = new Person(); System.out.println("对象.class "+ person.getClass()); //方式二:类名.class System.out.println("类名.class "+Person.class); //方式三:class.forName System.out.println("class.forName "+Class.forName("agent.Person")); } }
2.2 通过反射获取实现接口及父类
import agent.Person; public class Reflect2 { public static void main(String[] args) { //获取运行时类 Class cl = Person.class; //获取类实现的接口 Class[] interfaces = cl.getInterfaces(); for (Class cls : interfaces){ //获取类接口的名称 System.out.println(cls.getName()); } System.out.println("------------------------"); for (Class cls : interfaces){ //获取类接口的名称的简称 System.out.println(cls.getSimpleName()); } //获取父类 Class class1 = cl.getSuperclass(); System.out.println(class1); } }
2.2 通过反射获取构造
这篇关于Java类加载器与Java反射的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28MQ底层原理资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:入门与初级用户指南
- 2024-11-28MQ消息队列资料入门教程
- 2024-11-28MQ消息队列资料:新手入门详解
- 2024-11-28MQ消息中间件资料详解与应用教程
- 2024-11-28MQ消息中间件资料入门教程
- 2024-11-28MQ源码资料详解与入门教程
- 2024-11-28MQ源码资料入门教程
- 2024-11-28RocketMQ底层原理资料详解