java的类装载方式,有两种:
1.隐式装载,程序在运行过程中当碰到通过new等方式生成对象时,隐式调用类装载器加载到对应的类型jvm中。
2.显式装载,通过class.forName()等方法,显式加载需要的类。
类加载的动态性体现:
一个应用程序是有n多个类组成的,java程序启动时,并不是一次性加载完所有的程序,而是先把能保证程序启动的基础类加载一次性加载到jvm中,其他的类等需要的时候才会放到jvm。这样的好处是节省了内存的开销,因为java最早就是为了嵌入式系统而设计的,内存宝贵。所以用到再加载是java动态性的一种体现。
java类的加载器:
JDK默认了三种加载器ClassLoader:
BootStrapClassLoader:所有加载器的父类,是jvm的一部分,用c++编写的,加载的是 java_home/jre/lib 目录中的类库
extensionClassLoader:是父类加载器的子类,会加载 java_home/jre/lib/ext 目录中的类库以及java.ext.dirs
系统变量指定的路径中类库。
applicationClassLoader:加载 classPath 下的所有类
定义类加载器:
1、 继承java.lang.ClassLoader
2、 重写父类的findClass方法