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反射的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide