1
加载类的三种方法
使用new关键字让类加载器按需求载入所需的类
java.lang.Class的forName()方法加载
java.lang.ClassLoader的loadClass()方法加载
2
Class的方法
public static Class forName(String className)
public static Class forName(String className, boolean initialize,ClassLoader loader)
参数说明:
className - 所需类的完全限定名
initialize - 是否必须初始化类(静态代码块的初始化)
loader - 用于加载类的类加载器
调用只有一个参数的forName()方法等效于 Class.forName(className, true, loader)。
ClassLoader的方法
public Class<?> loadClass(String name)
protected Class<?> loadClass(String name, boolean resolve)
参数说明:
resolve是用于设置加载类的时候是否连接该类
调用只有一个参数的loadClass()方法等效于 loadClass(className,false)
而且只有它是public的
由此可见
默认下 forName会初始化 loadClass不会初始化
这也为什么JDBC里只能用forName不用loadClass的原因
3
在JVM加载类的时候,需要经过三个步骤,装载、连接、初始化。装载就是找到相应的class文件,读入JVM,初始化就不用说了,最主要就说说连接。
连接分三步,第一步是验证class是否符合规格,第二步是准备,就是为类变量分配内存同时设置默认初始值,第三步就是解释,而这步就是可选的,根据上面loadClass方法的第二个参数来判定是否需要解释
4
ClassLoader loader = obj.getClass().getClassLoader();
Class clazzA = loader.loadClass(AAA);
5
a, Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.
b, Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
c, System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.
b, User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.
-
启动顺序是abcd。其中至少a不是用java写的
-
abcd是继承关系,a是b的父类
-
在加载类的时候,采用
双亲委派
。
也就是说,如果是系统类加载器加载,那么先委派给扩展类加载器,扩展类加载器再委派给启动类加载器
如果启动类加载器找不到,在分发给扩展类加载器,扩展类加载器还找不到,再回到系统类加载器
参考
http://www.iteye.com/topic/83978
分享到:
相关推荐
主要内容包括 Java类加载机制及加载流程,以及如何定义自己的类加载器,如何实现类的热替换。
本篇文章主要给大家讲述了Java中ClassLoader类加载的原理以及用法总结,一起学习下。
主要介绍了Java类加载器ClassLoader用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,...
深入Java虚拟机JVM类加载学习笔记:jvm java classloader 垃圾回收 gc
主要给大家介绍了关于Java运行时环境之ClassLoader类加载机制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
面试题集共分为以下十部分: 一、Core Java: 1 — 95 题1 — 24 页 基础及语法: 1 — 61 题1 — 13 页 异常: 62 — 69 题13 — 15 页 集合: 70 — 80 题15 — 18 页 线程: 81 — 90 题18 — 21 页 ...
太原理工大学机器人团队20天学习打卡day2 学习内容:Java 学习网站:b站 day02 今天的内容比昨天多很多,也更难理解,希望能坚持下去 1、打开DOS命令窗口,执行java HelloWorld,执行原理 java.exe命令会启动JVM JVM...
15.2.2 建立classloader实例 518 15.3 重点复习 520 15.4 课后练习 521 chapter16 自定义泛型、枚举与标注 523 16.1 自定义泛型 524 16.1.1 定义泛型方法 524 16.1.2 使用extends与? 525 16.1.3 使用...
java jdk源码学习 ...ClassLoader 4 Compiler 4 System 4 Package 4 Void 4 java.util AbstractList 1 AbstractMap 1 AbstractSet 1 ArrayList 1 LinkedList 1 HashMap 1 Hashtable 1 HashSet 1 LinkedHashMa
java ClassLoader的学习 java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class形式,然后由java虚拟机(JVM)解释执行,.class字节码文件本身是平台无关的,但是jvm却不是,为了实现...
部分主要阐述Thread的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信,以及如何保护共享资源等内容,它是深入学习多线程内容的基础。 第二部分引入了ClassLoader,这是因为ClassLoader与线程不无关系,...
针对Java ClassLoaders的学习文章,让你全面掌握classloader的特性
插件化代码的编写,涉及到的知识点主要有java中的反射,动态代理,静态代理以及android中的AIDL跨进程通信,binder机制,ClassLoader加载机制,四大组件的运行原理等等。本项目代码主要参考和。在此基础上做了大量的...
DexClassLoader学习源码,使用时,请删除Lib.Java文件,否则会出现loadClass错误。
关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两...
作者与学习乐园原始码地址:我的作者:项目结构src目录Java虚拟机核心知识点学习代码并测试案例test目录(测试包名与src目录保持一致)对应学习代码包的详细测试案例包目录: ├── org.jvmcore.classloader// 类...
框架开发学习 此仓库给出了在框架开发中经常使用的不同Java概念和编程技术的示例。 例如,当我们想从头开始创建RPC框架时,我们需要了解Java动态代理和序列化。 这是清单: 技术 模块/链接 设想 地位 评论 动态...
类加载器 ClassLoader 字节码校验器 解释执行器 (翻译)逐行的解释执行代码 2.安全 健壮 3.面向对象 面向过程: 程序:函数+变量 (算法+数据结构) 面向对象: 如:SmallTalk 程序:对象和对象相互之间的“通讯” ...