枚举&类加载器&反射

目录

枚举

格式

特点

方法

类加载器

加载过程

分类

双亲委派模型

ClassLoader两个方法

反射

获取Class类对象的三种方式

Class类获取构造方法对象的方法

Constructor类用于创建对象的方法

Class类获取成员变量对象的方法

Field类用于给成员变量赋值的方法

Class类获取成员方法对象的方法

Method类用于执行方法的方法


枚举

为了间接的表示一些固定的值,限定调用者的输入

格式

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)运行方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值