关于JAVA中的初始化及类的加载

来源:百度知道 编辑:UC知道 时间:2024/06/01 15:18:50
帮忙讲解一下在涉及到继承以及类中有static变量和方法的时候,JAVA中初始化及类的加载过程.
并且证明一下:1,加载类的动作只进行一次.
2,类的第一个实体的创建或者对static成员的访问都有可能引起加载.
光用语言描述我估计我是看不明白的,请用代码+语言描述....谢谢

你不太可能完全用代码证明类加载的动作,因为在你用这个类之前(也就是你想要开始证明一个类加载的过程时)她已经加载了。

现在来说,静态成员会和类加载的时候一起初始化,所以最多最多也只能通过静态成员来证明类的加载。

那么问题就是如何在静态成员被初始化的时候提示消息,两种方法:

第一种是使用静态的字段成员,此成员指定为一个对象初始化,在这个初始化对象的构造函数做通知。代码:
public class StaticLoad{
public static LoadNotify = new LoadNotify();
}

public class LoadNotify{
public LoadNotify(){
System.out.println("Class is Loaded");
}
}
那么使用StaticLoad类的时候,会打出Class is Loaded证明类加载的时候初始化了static成员,调用多次也仅会打出一次。

第二种是使用静态块,代码:
public class StaticLoad{
public static LoadNotify = new LoadNotify();
static {
System.out.println("Class is Loaded");
}
}
此时类加载时也会执行静态块中的代码。

这是进行当类加载的时候进行通知的方法,你可以自己写一写代码,他们仅会打出一次。

对于类的加载顺序,网上有详细的,我这里只说一些简单的:
首先需要用到一个类的时候,虚拟机会从classpath读取此类的代码,到内存的类的代码存储区,然后对于每一个静态字段开辟一个存储区,再存储方法的代码。接着初始化类,所有的静态成员按照顺序初始化(按代码声明顺序从上到下开始),当需要加载其他类的时候加载其他的类。