当一个类被第一次使用时,它需要被类加载器加载,而加载过程涉及以下两点:
(1)在加载一个类时,如果它的父类还未被加载,那么其父类必须先被加载;
(2)当类加载到内存之后,按照在代码中的出现顺序执行它的静态数据域和静态块。
2.调用一个类的构造函数时,调用过程涉及以下三点:
立即学习“Java免费学习笔记(深入)”;
(1)调用父类的构造函数;
(2)按照在代码中出现顺序初始化实例数据域和实行实例块;
(3)执行其构造函数体。
理论还是得通过实践来证明的,下面以一个简单的例子来证明。
/**
*
* @author Sel
*
* 2014.3.29
*/public class InitializationDemo { public static void main(String[] args) {
new InitializationDemo();
}
public InitializationDemo() {
new B();
}
{
System.out.println("2. Initialization 的实例块。");
}
static {
System.out.println("1. Initialization 的静态块。");
}
}class A {
A() {
System.out.println("6. A 的构造函数体。");
}
{
System.out.println("5. A 的实例块。");
}
static {
System.out.println("3. A 的静态块。");
}
}class B extends A {
B() {
System.out.println("8. B 的构造函数体。");
}
{
System.out.println("7. B 的实例块。");
}
static {
System.out.println("4. B 的静态块。");
}
}上面的例子在类中各个部分输出对应的文字,以便从输出中看出其执行顺序。
《PHP设计模式》首先介绍了设计模式,讲述了设计模式的使用及重要性,并且详细说明了应用设计模式的场合。接下来,本书通过代码示例介绍了许多设计模式。最后,本书通过全面深入的案例分析说明了如何使用设计模式来计划新的应用程序,如何采用PHP语言编写这些模式,以及如何使用书中介绍的设计模式修正和重构已有的代码块。作者采用专业的、便于使用的格式来介绍相关的概念,自学成才的编程人员与经过更多正规培训的编程人员
341
对应的输出如下:
1. Initialization 的静态块。 2. Initialization 的实例块。 3. A 的静态块。 4. B 的静态块。 5. A 的实例块。 6. A 的构造函数体。 7. B 的实例块。 8. B 的构造函数体。
由输出可以看出程序执行的顺序如下:
1.首先,要使用Initialization类,则加载Initialization类,所以它的静态块被执行,于是输出1;
2.程序调用Initialization的构造函数,所以Initialization类的实例块被执行,于是输出2;
3.然后,执行Initialization的构造函数体,即new B(),这时因为要使用类B,所以将其加载;
4.因为类B的父类为A,那么在加载B之前,要先加载A,所以这时候执行A的加载过程,即执行A的静态块,于是输出3;
5.A加载完之后,这时候就到B加载了,这时执行B的加载过程,即执行B的静态块,于是输出4;
6.加载完成后,这时候按照代码,执行new B(),即B的构造函数,所以这时又要先调用父类A的构造函数,于是这时依次执行A的实例块和构造函数体,输出5和6;
7.最后,终于到“真正”执行B的构造函数了(因为之前已经一直在说执行new B(),却是一直在调用其他),于是依次执行B的实例块和构造函数体,输出7和8。
以上就是关于Java的静态块与实例块。的内容,更多相关内容请关注PHP中文网(www.php.cn)!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号