2018-03-13
类的加载
当Java虚拟机要运行某个类时,如果该类还未被加载到内存当中,
虚拟机则会通过加载,连接,初始化这三个步骤实现对这个类的
初始化。
加载:指将class文件读入内存,并为之创建一个Class对象。
任何类被使用时,虚拟机都会建立一个class对象。
连接:验证 是否具有正确的内部结构,并和其他类协调一致
准备 负责为类的静态成员分配内存,并设置默认初始化值
解析 将类的二进制数据中的符号引用替换为直接引用
初始化:创建对象
类初始化时机:
1.创建类的实例
2.使用类的静态成员或对其赋值(或调用静态方法)
3.使用反射方式来强制创建某个类或接口对应的Class对象
4.初始化某个子类(它的父类全部都要先于子类初始化)
5.直接使用java.exe命令来运行某个主类
类加载器:
1.负责将.class文件加载到内存当中,并为之生成对应的Class对象
三种类的加载器:
1.Bootstrap ClassLoader 根类加载器 也称为引导类加载器,负责Java核心类的加载
2.Extension ClassLoader 扩展类加载器
3.System ClassLoader 系统类加载器
反射
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动
态调用对象的方法的功能称为Java语言的反射机制。
获取Class对象的三种方式:
查阅JDK 1.6 API 文档可知:
public final class Class<T>
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器
中的 defineClass 方法自动构造的。
方式一:
Person p = new Person();
Class c = p.getClass();
方式二:
Class c2 = Person.class;
每个类型,包括基本和引用类型,都会赋予这个类型一个静态属性,属性名为class
方式三:
Class c3 = Class.forName("com.xiao.reflection.Person"); //类的全路径名