Java类加载机制和反射机制

一、 Java类加载机制
jvm把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成jvm可以直接使用的java类型的过程。

  1. 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结 构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。

  2. 链接:将java类的二进制代码合并到jvm的运行状态之中的过程,链接过程又分为3个过程:
    ① 验证:确保加载的类信息符合jvm规范,没有安全方面的问题。
    ② 准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方 法区中进行分配。
    ③ 解析:虚拟机常量池内的符号引用替换为直接引用的过程。(比如String s =“aaa”,转化为 s的地址指向“aaa”的地址)

  3. 初始化:初始化阶段是执行类构造器方法的过程。类构造器方法是由编译器自动收集类中的所有类变 量的赋值动作和静态语句块(static块)中的语句合并产生的。
    ①当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先初始化其父类的初始化
    ②虚拟机会保证一个类的构造器方法在多线程环境中被正确加锁和同步
    ③访问一个java类的静态域时,只有真正声明这个静态变量的类才会被初始化。

二、ClassLoader类加载器
ClassLoader类加载器的作用就是将 .class 文件加载到JVM虚拟机中去

三、 Java反射机制
在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够 调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的 功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何 东西都可以。

Class类常用方法:
1、 forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。
2、 getClassLoader() 返回该类的类加载器。
3、 getConstructor(Class… parameterTypes) 返回一个 Constructor 对象, 它反映此Class 对象所表示的类的指定公共构造方法。
4、 getDeclaredField(String name) 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
5、 getDeclaredFields() 返回 Field 对象的一个数组,这 些对象反映此 Class 对象所表 示的类或接口所声明的所有字段。
6、 getDeclaredMethod(String name, Class… parameterTypes) 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
7、 getDeclaredMethods() 返回 Method 对象的一个数 组,这些对象反映此 Class 对 象表示的类或接口声明的所有方法,包括公共、保护、默认 (包)访问和私有方法,但不 包括继承的方法。
8、 getField(String name) 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的 指定公共成员字段。
9、 getFields() 返回一个包含某些 Field 对象的 数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
10、 getMethod(String name, Class… parameterTypes) 返回一个 Method 对象,它反 映此 Class 对象所表示的类或接口的指定公共成员方法。
11、 getMethods() 返回一个包含某些 Method 对 象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值