1.类加载器
1.1类加载器
作用
负责将.class文件(存储的物理文件)加载在到内存中
1.2类加载的过程【理解】
类加载时机
创建类的实例(对象)
调用类的类方法
访问类或者接口的类变量,或者为该类变量赋值
使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
初始化某个类的子类
直接使用java.exe命令来运行某个主类
类加载过程
1.加载
通过包名 + 类名,获取这个类,准备用流进行传输
在这个类加载到内存中
加载完毕创建一个class对象
2.链接
验证
确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全
(文件中的信息是否符合虚拟机规范有没有安全隐患)
准备
负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值
(初始化静态变量)
解析
将类的二进制数据流中的符号引用替换为直接引用
(本类中如果用到了其他类,此时就需要找到对应的类)
3.初始化
根据程序员通过程序制定的主观计划去初始化类变量和其他资源
(静态变量赋值以及初始化其他资源)
小结
当一个类被使用的时候,才会加载到内存
类加载的过程: 加载、验证、准备、解析、初始化
1.3类加载的分类
分类
Bootstrap class loader:虚拟机的内置类加载器,通常表示为null ,并且没有父null
Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块
System class loader:系统类加载器,负责加载用户类路径上所指定的类库
类加载器的继承关系
System的父加载器为Platform
Platform的父加载器为Bootstrap
2.反射
2.1反射的概述
反射机制
是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意属性和方法;
这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
2.2获取Class类对象的三种方式
三种方式分类
类名.class属性
对象名.getClass()方法
Class.forName(全类名)方法
2.3反射获取构造方法并使用
2.3.1Class类获取构造方法对象的方法
方法介绍
2.3.2Constructor类用于创建对象的方法
方法介绍
2.3.3小结
获取class对象
三种方式: Class.forName(“全类名”), 类名.class, 对象名.getClass()
获取里面的构造方法对象
getConstructor (Class<?>... parameterTypes)getDeclaredConstructor (Class<?>... parameterTypes)
如果是public的,直接创建对象newInstance(Object... initargs)
如果是非public的,需要临时取消检查,然后再创建对象setAccessible(boolean) 暴力反射
2.4反射获取成员变量并使用
2.4.1Class类获取成员变量对象的方法
方法分类
2.4.2Field类用于给成员变量赋值的方法
方法介绍
2.5反射获取成员方法并使用
2.5.1Class类获取成员方法对象的方法
方法分类
2.5.2Method类用于执行方法的方法
方法介绍
参数一: 用obj对象调用该方法
参数二: 调用方法的传递的参数(如果没有就不写)
返回值: 方法的返回值(如果没有就不写)
补充:
反射:得到构造方法,属性,方法
1.得到反射的三种方式?
2.对构造方法的调用getConstructor,创建对象newInstance
3.对字段的取值赋值
Object o = aClass.getConstructor().newInstance();
Field address = aClass.getDeclaredField("address");
address.set(o, "12345");
address.get(o)
4.对方法的调用:
Object o = aClass.getConstructor().newInstance();
Method getAa = aClass.getDeclaredMethod("getAa", String.class);
getAa.setAccessible(true);
getAa.invoke(o,"aaaa");//执行方法
5.setAccessible(true);设置可以强制使用
6.无视Declared权限修饰符
7.枚举 赋值用构造方法
8.枚举没有无参数的构造方法,不允许实例化
9.注解:自定义注解:自己定义的注解
元注解:注解上面的注解
10.测试工具类,1.导jar包,2.创建测试类即可
11.复制多继文件夹,和以前删除文件夹类似,
1.对文件进行复制,
2.对文件夹进行创建
3.递归