Java类代码块执行顺序

下面通过一个例子来说明java类中不同代码块的执行顺序.

class B {

//静态变量 static int a = 0;

//非静态代码块{ System.out.println("B.scope is running"); a = 10 ; }

//静态代码块 static { System.out.println("B.static scope is running"); a = 20; }

//构造函数 public B() {System.out.println("B.Constructor is running"); } public static void main(String arg[]) { System.out.println(B.a); System.out.println(B.a); B b1 = new B(); B b2 = new B(); System.out.println(b1.a); System.out.println(b2.a);

System.out.println(B.a);

}}

输出结果如下:

B.static scope is running2020B.scope is runningB.Constructor is runningB.scope is runningB.Constructor is running101010

由此我们得到,java中静态代码块首先被执行,且只被执行一次,当实例化一个对象之后,将会首先执行非静态代码块,接着执行构造函数。

当一个类从被JVM装载开始,各种代码的执行顺序大致如下:

被JVM装载->执行父类的相关代码->如果有静态初始化,先执行静态初始化,且只执行一次,以后即使有该类实例化,也不会再执行->如果有静态代码块,以与静态初始化一样的方式执行->如果有new语句带来的实例化,先为成员变量分配空间,并绑定参数列表,隐式或显式执行super(),即父类的构造方法,->执行非静态代码块-〉执行本类的构造函数-〉执行其他代码

人生不如意十之八-九,与其诅咒黑暗,倒不如在生命中点燃一盏灯

Java类代码块执行顺序

相关文章:

你感兴趣的文章:

标签云: