类加载器、反射基础

类加载器
在这里插入图片描述

作用:

将硬盘的class字节码文件送到虚拟机里面运行

过程:

加载、验证、 准备、解析、初始化 其中中间三步叫做链接

加载:1、通过包名+类名得到这个类,通过流进行传输 2、到内存 3、创建class对象

加载时机:什么时候用就加载,不用就不加载—使用情况:

1、创建类的实例 2、调用类的方法 3、使用静态变量 4、反射创建对象 5、创建类的子类的 6、运行主类的时候

验证:代码是否安全

准备:给静态变量默认的值

解析:如果用到了其他的类,会用符号表示,使用这一步是将这些符号转换为使用到的类

初始化:给静态变量赋值,初始化其他资源

类加载器种类

启动类:Bootstrap ClassLoader :虚拟机内置的类加载器

平台类:platfrom ClassLoader :加载JDK一些特殊的方法

系统类:System ClassLoader :加载用户类路径上指定的类库

自定义类:User ClassLoader

双亲委派模型

从下到上 逻辑继承

当一个加载器需要加载一个字节码文件时,他会先请求委托给他的父类加载器,到最顶层启动类加载器时,如果字节码文件超过了自己的加载范围就会向下返回。

常用方法:

ClassLoader有一个方法 getSystemClassLoader()----得到SystemClassLoader 对象

然后可以使用getParent()方法得到上一层的加载类对象

systemClassLoader.getResourceAsStream(“路径名”)----利用加载器去加载一个文件得到io流

一般用于加载配置文件

反射
在这里插入图片描述

动态获取一个类的成员方法、成员变量、构造方法

1、首先得到class文件对象

a、类名.class() b、对象名.getClass c、Class.forName(“src路径下的文件路径”)—常用

2、得到构造方法对象

用class文件对象调用 参数都是类似。。int.class----String.class

a、getConstructor()-----获得单个public构造方法----参数可以写对应的参数获得不同的构造方法对象

b、getConstructors()----获得所有的public构造方法,返回的是一个数组

c、getDeclaredConstructor()—获得任意一个构造方法—参数匹配

d、getDeclaredConstructor()----获得所有的构造方法–返回的是一个数组

3、获取成员方法对象

class文件对象调用

a、getField(“name”)----得到指定名称的成员变量对象 public

b、getFields()----得到所有public 修饰的成员变量 返回的是一个数组

c、getDeclaredField(“name”)—得到指定名称的成员变量对象

d、getDeclaredFields()----得到所有的成员变量对象—返回的是一个数组

给成员变量赋值、获取成员变量值

用Field对象调用

set(类对象,值)

get(类对象)

4、获取成员方法对象

用class文件对象调用 参数都是类似。。int.class----String.class

a、gerMethod(“方法名”,参数类型)—得到public修饰的参数对应指定方法对象

b、getMethods()—得到的是所有的被public修饰的成员方法对象 返回的是数组

c、getDeclaredMethod(“f方法名”,参数类型)----获得自动名称切参数对应的指定方法对象

d、getDeclaredMethods()–获得所有的方法-返回的是一个数组

成员方法的使用

Method.invoke(参数1,参数2)

注意

所有的被private修饰的成员方法、成员变量、构造方法对象再被使用是 需要进行暴露反射进行取消检测 然后使用

对象名.setAccessibld(true)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值