Java类加载器:

JAVA类装载方式,有两种:

1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。

2.显式装载, 通过class.forname()等方法,显式加载需要的类

类加载的动态性体现:

一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是一种可以理解的机制,而用到时再加载这也是java动态性的一种体现。

执行代码:

package Demo1;

public class Demo1 {
public static void main(String[] args) {
String a=new String("hello,boys");
// 1.getClass
Class cs=a.getClass();
System.out.println("类名:"+cs.getName());
System.out.println("包名:"+cs.getPackage());
System.out.println("是否为接口:"+cs.isInterface());
System.out.println("是否为基本类型:"+cs.isPrimitive());
System.out.println("是否为数组:"+cs.isArray());
System.out.println("String类的父亲:"+cs.getSuperclass());
// 2.Class
Class cs2=String.class;
System.out.println("类名:"+cs2.getName());
System.out.println("包名:"+cs2.getPackage());
System.out.println("是否为接口:"+cs2.isInterface());
System.out.println("是否为基本类型:"+cs2.isPrimitive());
System.out.println("是否为数组:"+cs2.isArray());
System.out.println("String类的父亲:"+cs2.getSuperclass());

System.out.println(cs==cs2);

}
}
package Demo2;
class Base{
static int a=1;
static{
System.out.println("init Base!");
}
}
class Sub extends Base{
static int b=2;
static{
System.out.println("init Sub!");
}
}
public class Demo2 {
static{
System.out.println("init Demo2!");
}

public static void main(String[] args) {
System.out.println(Base.a);
System.out.println("***********");
System.out.println(Sub.b);
int[] arr=new int[3];
System.out.println(arr.getClass());
System.out.println(int[].class);
int[] arr1=new int[5];
System.out.println(arr.getClass()==arr1.getClass());
int[][] arr2=new int[2][3];
System.out.println(arr2.getClass()==int[][].class);
}
}
package Demo3;
class Test{
static {
System.out.println("test静态块");
}
}
public class Demo3 {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class cs=Class.forName("Demo3.Test",false,Thread.currentThread().getContextClassLoader());
Object obj=cs.newInstance();
}
}
package Demo4;

public class Demo4 {
public static void main(String[] args) {
Class clz;
ClassLoader cl, cl1;

clz = String.class;
cl = clz.getClassLoader();
System.out.println("加载String类对象的加载器:" + cl);

System.out.println("******************************");
clz = Demo4.class;
cl = clz.getClassLoader();
System.out.println("加载Demo4类对象的类加载器:" + cl);
while(cl!=null) {
cl1 = cl;
cl = cl1.getParent();
System.out.println(cl1+"的父加载器是:" + cl);
}

}
}
Posted on 2020-08-20 17:05  脸红嘛宝贝  阅读(279)  评论(0编辑  收藏  举报