Java类的初始化顺序
Java类的初始化顺序
我把Java类的初始化顺序分为两部分。第一部分是类的初始化,第二部分是对象的初始化。
在初始化之前JVM必须先把该类的字节码加载到内存中来。这时不管创不创建对象都会马上执行类的初始化:
执行静态初始化表达式(如static int a = 10)和静态初始化块(即static{}中的内容),注意两者按在源代码中的先后顺序执行。
当创建一个对象,就会执行对象的初始化:
首先调用父类的构造函数。
第二步执行初始化表达式(如int a = 10)和初始化块({}中的内容),同样按在源代码中的先后顺序执行。
最后执行自身的构造函数。
对于静态初始化表达式与初始化表达式,如果只是声明,没有初始化,则赋默认值。如int i;则i会被赋值为0。
总结:
1、 类初始化
(1) 静态初始化表达式,静态初始化块
2、对象初始化
(1)父类的构造函数
(2)初始化表达式,初始化块
(3)自身的构造函数
注意:初始化表达式可能不是准确的术语,但明白是指什么就行了。
测试代码:
代码
package principle;
public class InitializeTest {
public static void main(String[] args) throws ClassNotFoundException{
System.out.println("-----类初始化-----");
Class.forName("principle.MyClass");
System.out.println("\n" + "-----对象初始化-----");
MyClass myClass = new MyClass();
}
}
class MyClass extends Father{
MyClass() {
System.out.println("3.自身的构造函数");
}
static int staticInt = 5; //如果放在static{}后面则编译不通过
static {
System.out.print("1.静态初始化表达式:staticInt=" + staticInt + "\t");
System.out.println("静态初始化块");
}
int instanceInt; //将会被赋默认值0
{
System.out.print("2.初始化表达式:instanceInt=" + instanceInt + "\t");
System.out.println("初始化块");
}
}
class Father {
Father() {
System.out.println("1.父类的构造函数");
}
}
输出结果:
-----类初始化-----
1.静态初始化表达式:staticInt=5 静态初始化块
-----
相关文档:
1.
BufferedReader in = new BufferedReader(new FileReader("远程文件"));
in.readLine() ;
l 使用 Java 操作文本文件的方法详解
http://java.ccidnet.com/art/3737/20041108/523627_1.html
l FileReader 是什么类?和 FileInputStream 有什么不同???
ht ......
自Java2以来,Java语言增加了一个关键字strictfp,虽然这个关键字在大多数场合比较少用,但是还是有必要了解一下。
strictfp 的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成 ......
Java虚拟机管理类和对象的生命周期;
(1)类的生命周期从类被加载,连接,初始化开始,到类被卸载结束;
(2)类处于生命周期时,它的二进制数据位于运行时方法区内,在堆区还有一个相应的描述类的Class类的对象;
(3)只有当类处于生命周期中时,Java程序才能够使用它。
1.Java虚拟机及程序的生命周期
(1) ......
Publication and Escape 发布一个对象意味着能够从它能够从它当前范围之外被访问到。比如,保存可以被其他代码找到的这个对象的一个引用,或者将其作为一个非私有方法的返回值,或者将其作为参数传递给其它的类。 public static Set<Secret> knownSecrets;
public void initialize() {
knownSecrets = new Ha ......
http://www.java-cn.com/technology/tech/4759.html
偶尔在网上发现的一片关于掌握JAVA的标准,感觉有点意思,虽然在一些观点上有些偏颇,但作为学习JAVA的引导尚可。至于原创是谁没有必要考证。
时常看到一些人说掌握了Java,但是让他们用Java做一个实际的项目可能又困难重重,在这里, ......