java自学之路-day21
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java自学之路-day21相关的知识,希望对你有一定的参考价值。
JAVA21
类加载器
类的加载
l 当程序要使用某个类时,如果还没被加载到内存中,系统会就会通过加载 连接 初始化三个步骤对这个类进行初始化
l 加载
- 类的加载器将class文件读入内存,放入方法区,并为之创建一个Class对象
- 是编译后的class文件的一个对象
- 对象进入堆内存
- 又叫字节码对象
- 可以使用不可以创建
l 连接
- 验证 是否有正确的内部结构
- 为静态成员分配空间 并设置默认初始化值
- 解析 将类的二进制数据中的符号引用变为直接引用 比如a=1 在内存中直接为1没有了符号a
l 初始化
就是创建对象
类的加载时机
l 新建一个有main方法的类
l 其他类调用这个类中的方法 成员变量 或者实例化创建对象
l 其他类调用这个类的子类中的方法 成员变量 或者实例化对象
l 运行任何一个类都是先运行Object类的方法
=
类的加载器的组成
l 根类加载器
- 负责核心类库的加载
- Jre目录中的rt.jar
- 项目中的 JRESystemLibrary 中的rt.jar
l 扩展加载器
- 加载扩展的类
- Jre中的ext文件夹
- 项目中的 JRESystemLibrary 中的ext文件夹中的jar包
l 系统加载器
- 负责加载自己写的类
- 负责加载第三方工具类
反射
概念
l 运行时期对于任何一个类
l 都能知道这个类的所有属性和方法
l 对于任何一个对象都能调用他的任何一个方法和属性
l 这种动态获取信息及动态调用对象的方法的功能就叫做java语言的反射机制
功能
- 已经完成的一个类如果要增加功能在不改源码的前提下怎么添加
- 将新功能类的字节码文件也就是编译后的class文件解剖
- 在源类中调用即可
Class文件的产生过程
l 类加载器加载新功能类 产生一个class文件对象
l 用这个文件对象调用新功能类的方法
l Java.lang.Class类描述文件对象的类 文件对象就是这个类的类型
获取class文件对象的三种方式
l 对象获取
l 类名获取
l Class类的静态方法获取
l 三个方法获得的对象都是同一个
反射获取class文件中的构造方法
l 运行构造方法相当于创建了对象
l getConstructors()获取class文件对象中的所有公共的构造方法
l 返回Constructors类型的数组
l 获取一个指定构造方法
可变参数
l 运行
NewInstance()
l 获取有参数的构造方法并运行
l 快速方式
- 被反射的类必须具有空参构造方法
- 构造方法必须是公共的
反射获取私有构造方法
l 不推荐破坏了程序的封装性安全性
l getDeclaredConstructors()
l 获取所有的构造方法
l 返回一个Constructor类型的数组
l 示例
l getDeclaredConstructor(class..c)
l 可变参数
l 返回一个私有的构造方法
l 示例
不能访问私有的
l setAccessibale 对权限的访问
反射获取成员变量
l Class类中的方法 getFields() getDeclaredFields()则是获取私有的
- 获取所有公共的所有公共类的成员变量
- 返回值Field[]数组
l 获取指定成员变量
反射获取空参数成员方法
l getMethods()
- 获取Class文件中的所有公共成员方法包括继承的
- Method类是描述成员方法的对象
方法很多都是公共的
l getMethod()
- 方法参数 方法名和可变参数
- 返回一个method对象
l 使用获得的方法
Invoke()
- 运行method获得的方法
- 参数是一个类文件的对象
反射获取有参数的成员方法
反射泛型擦除
l 存储规定泛型之外的元素
l 伪泛型 编译后的class文件没有泛型可以直接获取class文件对象获取方法
l 不能使用曾强for或者迭代器遍历 所以只是为了练习反射
通过配置文件
l 原理
l 实现
以上是关于java自学之路-day21的主要内容,如果未能解决你的问题,请参考以下文章