20170718 类加载机制与反射

JVM和类

系统出现以下情形,JVM进程将终止

1、程序运行到最后正常结束

2、使用System.exit()或Runtime.getRuntime().exit()

3、遇到未捕捉的异常或错误而结束

4、所在平台强制结束了JVM进程


类的加载:将class文件读入内存

当程序主动使用某个类时,若类仍未加载到内存中,则系统会通过加载、连接、初始化对该类初始化

若无意外,JVM连续完成三步骤

JVM提供类加载器,类加载器加载类


加载类的本源

1、本地文件系统加载class文件(大多数)

2、从JAR包加载class文件

3、网络加载class文件

4、把一个Java源文件动态编译执行加载


类的连接

1、验证

2、准备:

为类变量负责内存

并设置默认初始值

3、解析
将类的二进制数据中的符号引用替换成直接引用


类的初始化

1、优先加载并连接

2、先初始化父类

3、优先执行初始化语句


初始化时机

1、创建类的实例

2、调用某个类的方法

3、访问某个类或接口的类变量

4、使用反射方式强制创建某个类或接口对应的java.lang.class对象

5、初始化某个类的子类

6、java.exc运行某个主类


ClassLoader加载器类

loadClass()加载

forName()强制初始化


类加载器层次结构:

根类加载器:非ClassLoader子类,由JVM自身实现

扩展类加载器

系统类加载器

类加载机制

全盘托出:

一个类加载器加载某个类时,该类所依赖和引用的其他Class也由该类加载器加载


父类委托

缓存机制

已夹在过的CLass会翻入缓存

使用某类时,检索缓存区NOT EXIST 加载

URLClassLoader

系统类加载器与扩展类加载器父类


通过反射查看类信息

获得Class对象三种方式1、forName()

2、类名.class

3、对象名。getclass()


通过反射生成对象的方式:

1、使用Class对象的newInstance()方法来创建该Class对象对应类实例

要求:有默认构造器

2、使用Class对象获取指定Constructor对象

再调用Constructor对象的newInstance()

来创建该Class对象类的实例


第一类比较常见

因为在很多JavaEE框架中都需要根据配置文件来创建Java对象,从配置文件读取的只是某个类的字符串类名,程序需要根据该字符串来创建对应实例,必须用反射

你可能感兴趣的:(20170718 类加载机制与反射)