目录
枚举
为了间接的表示一些固定的值,限定调用者的输入
格式
public enum s{
枚举项1,...,...;
}
特点
-
所有枚举类都是Enum的子类
-
我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
-
每一个枚举项其实就是该枚举的一个对象
-
枚举也是一个类,也可以去定义成员变量
-
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
-
枚举类可以有构造器,但必须是private的,它默认的也是private的。
枚举项的用法比较特殊:枚举("");
-
枚举类也可以有抽象方法,但是枚举项必须重写该方法
方法
String name()获取枚举项的名称
int返回枚举项在枚举类中的索引值
int compareTo(E o)比较两个枚举项,返回的是索引值的差值
String toString()返回枚举常量的名称
static <T> T valueOf(Class<T> type,String name)获取指定枚举类中的指定名称的枚举值
values()获得所有的枚举项
类加载器
负责将.class文件(存储的物理文件)加载到内存中
加载过程
-
当一个类被使用的时候,才会加载到内存
-
类加载的过程: 加载、验证、准备、解析、初始化
分类
-
Bootstrap class loader:虚拟机的内置类加载器,通常表示为null ,并且没有父null
-
Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块(从JDK9开始,扩展类加载器(ExtClassLoader)被重命名为平台类加载器)
-
System class loader:系统类加载器,负责加载用户类路径classpath上所指定的类库
双亲委派模型
所谓的双亲委托机制,是指类加载器请求另一个类加载器来加载类的过程。
1、安全机制:自己写的java.lang.String.class类不会被加载,这样便可以防止核心 API库被随意篡改
2、避免类重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再加载一 次,保证被加载类的唯一性
ClassLoader两个方法
public static ClassLoader getSystemClassLoader() | 获取系统类加载器 |
public InputStream getResourceAsStream(String name) | 加载某一个资源文件 |
反射
在运行状态中,任意一个类,都能够知道这个类的所有属性和方法,无视修饰符
获取Class类对象的三种方式
-
类名.class属性
-
对象名.getClass()方法
-
Class.forName(全类名=包名+类名)方法
Class类获取构造方法对象的方法
Constructor<?>[] getConstructors() | 返回所有公共构造方法对象的数组 |
Constructor<?>[] getDeclaredConstructors() | 返回所有构造方法对象的数组 |
Constructor<T> getConstructor(Class<?>... parameterTypes) | 返回单个公共构造方法对象 |
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) | 返回单个构造方法对象 |
Constructor类用于创建对象的方法
T newInstance(Object...initargs) | 根据指定的构造方法创建对象 |
setAccessible(boolean flag) | 设置为true,表示取消访问检查 |
Class类获取成员变量对象的方法
Field[] getFields() | 返回所有公共成员变量对象的数组 |
Field[] getDeclaredFields() | 返回所有成员变量对象的数组 |
Field getField(String name) | 返回单个公共成员变量对象 |
Field getDeclaredField(String name) | 返回单个成员变量对象 |
Field类用于给成员变量赋值的方法
void set(Object obj, Object value) | 赋值 |
Object get(Object obj) | 获取值 |
Class类获取成员方法对象的方法
Method[] getMethods() | 返回所有公共成员方法对象的数组,包括继承的 |
Method[] getDeclaredMethods() | 返回所有成员方法对象的数组,不包括继承的 |
Method getMethod(String name, Class<?>... parameterTypes) | 返回单个公共成员方法对象 |
Method getDeclaredMethod(String name, Class<?>... parameterTypes) | 返回单个成员方法对象 |
Method类用于执行方法的方法
Object invoke(Object obj, Object... args) | 运行方法 |