小白学JAVA《十九》--- 反射、类加载

一、类加载
1.类加载器
1.1启动类加载器(由C语言编写)
负责加载存放在JDK\ire\lib下的等核心内库
1.2拓展类加载器
1.3应用程序类加载器
1.4自定义类加载器
1.5内加载概念:将.java文件编译后的class字节码中的二进制代码加载到内存中去的过程
2.类的生命周期
2.1加载
作用查找并加载类的二进制数据
2.11通过类的全限定名(包名加类名)来获取其定义的二进制字节流
2.12将类中的所有静态的存储结构都转化到方法区中去作为程序运行时所需要的数据结构,需要注意方法区也是堆,方法区放置更多的是和类相关的数据(类的代码,静态域、静态初始化块、静态方法、常量池(字符串常量池)中间的东西 )
2.13在JAVA堆中生成一个代表这个类的java.lang.class对象,作为对方法区中这些数据的访问入口
2.14流程: .class----类加载器----堆(方法区(加入运行时的数据)(并new 一个class对象由方法区指向class对象)该对象是方法区中“运行时的数据结构”访问入口)
2.2连接
2.21 验证:确保被加载类的正确性
2.211文件格式验证
2.212 元数据验证
2.213字节码严重
2.214 符号引用验证
2.22准备
负责为类的静态属性分配内存,并将其基础数据类型初始化为零,引用都是为null
2.23解析
把类中二进制的符合引用全部替换为直接引用
2.3初始化
为类的变化
2.31声明类变量是指定初始值 主动引用:
2.311创建类的实例
2.312访问某个类或接口的静态变量,或者对静态变量赋值
2.313 调用类的静态方法
2.314 反射
2.315初始化某个类的子类,则其父类也会被实例化
2.316启动类的类,直接被初始化
2.317 以下情况将不会进行类 的初始化
2.3171 使用final修饰符的常量调用
2.3172通过数组定义类的使用
2.3173通过子类去引用父类的静态变量,子类不会初始化
2.32 为类的静态变量赋初始值
2.33静态常量在连接的准备阶段就已经被赋初值了
2.4使用
2.5卸载
2.51 程序正常执行结束
2.52 程序在执行过程中遇到了异常或错误而异常终止
2.53由于操作系统出现错误而导致JAVA虚拟机进程终止
2.54 执行了System.exit( )方法
2.6 类是有缓存的
使用标准javaSE版本的类加载器加载的类一旦被加载完成,在一定时间内是有缓存效果的。
2.7类加载器加载类的来源
2.71 本地文件系统加载的.class文件(我们自己写的) ,绝大多数的加载都是这里来的
2.72 从jar文件中加载。class文件,这种也是比较常见的
2.73 通过网络加载class文件
2.74 动态加载一个JAVA源文件,先编译,后执行加载
3.JVM类加载机制
3.1 全盘负责
3.2父类委托(双亲委托机制),默认使用
3.3代理加载机制
当一个类加载器接收到一个类的加载请求的时候,让其他的类加载器去帮助加载的过程,父类委托本身也是一种代理加载机制。不同的加载器,加载相同的类的时候,产生的类的Class对象不一定一样。

二、反射
1.概念:在Java中,可以在运行期动态载入、探知和使用编译期完全无法确定的类(Java在运行期去动态载入一个只知道“类的全限定名”的类,获取其完整结构,还可以参照这个完整的数据结构,拥有创建类的实例,以及访问类的属性,访问类的方法的能力。这种“看透”类的能力,被称为反省、内省或自审) 一句话描述:运行时探究和使用编译时未知的类
2.Class c=Class.forName( 类路径 )
3.反射的核心 Class类
4.怎样得到class对象
4.1 如果一个类的实例已经存在,那么我们可以使用 Person=new Person( ) class c=p.getclass( );
4.2 如果在编译期知道类,我们可以使用 Class c=person.class
4.3 如果连类名都不知道,但是在运行期可以运行,用 Class c=class.forname( “文件路径” )

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值