类的加载:
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过
加载,连接,初始化三步来对这个类进行初始化。
加载:
就是将指定的class文件读入内存,并为之创建一个Class对象。
任何类被使用时系统都会创建一个Class对象。
连接:
验证:是否有正确的内部结构,并和其它类协调一致
准备:负责为类的静态成员分配内存,并设置默认值。
解析:将类的二进制数据中的符号引用,替换为直接引用,
初始化:类的初始化
类加载器:
负责将.class文件加载到内存中,并为之生成相应的Class对象。
类加载器的组成:
Bootstrap ClassLoader 根类加载器
-----也被称为
引导类加载器,负责java核心类的加载,比如System,String等,在JDK中的JRE的lib目录下的rt.jar下
Extendsion ClassLoader扩展类加载器
-----负责JRE扩展目录下的jar包的加载,在JDK的jre的lib目录下的ext目录
App ClassLoader系统类加载器
-----负责在JVM启动时加载来自java命令的class文件以及classpath环境变量的所指定的jar包和类路径
java反射机制:
JAVA反射机制是在
运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的
任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
得到类的Class文件
方式1:
new一个对象,然后用该对象的getClass()方法得到
方式2:
用类的class属性获得,
方式3:
用Class.forName(全限定包名); //推荐使用方式3