java的运行流程

一,我们所看不到的:

1,如果java文件没有package,就默认给文件加上”无名”package;

2,默认导入java.lang包,所以我们的java程序中可以使用Sting,Math,Integer等类,包括一些异常类;

3,如果生成的类没有父类,则为这个类隐式加上父类:Object;因此,包括Object中的许多方法可以使用;

4,字段的初始化;

二,我们所看的到的:

既然看的到,就先看程序运行结果:

public class JRun1 {public JRun1() {System.out.println(" 构造函数");}static{System.out.println("static{}");}{System.out.println("{}");}public static void main(String[] args) {System.out.println("main()");}}

运行结果:

static{}

main()

显然,程序运行时,先运行:

static{System.out.println("static{}");}

再调用main();

注意: 我们可以得到一个副产品:不用main方法也能运行的程序:

public class JRun1 {static{System.out.println("no main()");System.exit(0);}}

如果我们在类中建立一个对象:

public class JRun1 {public JRun1() {System.out.println(" 构造函数");}static{System.out.println("static{}");}{System.out.println("{}");}public static void main(String[] args) {System.out.println("main()");new JRun1();}}

运行结果:

static{}

main()

{}

构造函数

从而,我们得出:

建立一个非主类对象,顺序为:静态初始化块static{}–>初始化块{}–>构造函数constructor;

那么,牵涉到继承,运行流程又如何?

看程序:

class JRun1Father{JRun1Father(){System.out.println("父类构造函数");}static{System.out.println("父类静态初始化块");}{System.out.println("父类初始化块");}}public class JRun1 extends JRun1Father{public JRun1() {System.out.println("子类构造函数");}static{System.out.println("子类静态初始化块");}{System.out.println("子类初始化块");}public static void main(String[] args) {//System.out.println("主方法)");new JRun1();}}

运行结果:

父类静态初始化块

子类静态初始化块

父类初始化块

父类构造函数

子类初始化块

子类构造函数

所以,牵涉到父类:父静态–>子静态–>父初始化及构造–>子初始化及构造;

注意:初始化块和构造是接连运行的,不会父类子类交替.

如果寒暄只是打个招呼就了事的话,那与猴子的呼叫声有什么不同呢?事实上,

java的运行流程

相关文章:

你感兴趣的文章:

标签云: