@回首不见彼岸花 @回首不见彼岸花 你说的这部分是jvm加载类的过程,jvm在加载一个类的时候会根据全类名也就是带有包名的完整类名找到相应的字节码文件也就是编译生成的.class文件,然后生成一个java.lang.Class的类,这个类就是要加载的类,然后还需要 ①校验,包括字节码校验、元数据校验、符号校验等,以保证生成的类符合jvm规范;② 准备,这个阶段会给静态变量赋默认初始值,给final的变量赋值。③ 解析,将符号引用解析成直接引用,包括方法解析、接口解析等;④ 初始化,给类的成员变量赋值。完成以上步骤这个类就加载完成了 对象也初始化完成可以用了。
触发jvm加载类的时机之一就是调用class.forname, 还有调用一个类的静态变量或者静态方法,还有new,还有jvm启动时指定的类,这些都会出发jvm去加载一个类。
另外类的加载机制遵循 ① 全盘委托,一个类的和他依赖和调用的类都由一个加载器加载 ②双亲委托,加载一个类时总是由父类先去加载,找不到再由子类加载。③缓存机制,所有加载过的类都会被缓存起来,加载一个类时先到缓存里找,如果没有再去加载class文件。
最后类的加载器包括三种:BootstrapClassLoader 负责加载核心java类;ExtensionClassLoader,负责加载lib/ext下的扩展类;ApplicationClassLoader负责加载classpath下的类。
JAVA动态代理代理模式 为其他对象提供一个代理以控制对某个对象的访问。代理类主要负责为委托了(真实对象)预处理消息、过滤消息、传递消息给委托类,代理类不现实具体服务,而是利用委托类来完成服...