Java代码执行顺序

 1 package com.cn.donleo.test;
 2 
 3 /**
 4  * @author liangd
 5  * date 2020-10-20 15:23
 6  * code 代码执行顺序测试
 7  */
 8 public class TestCodeSequence {
 9     /*
10      * 静态代码块,类变量(静态变量),可以向前引用(即引用,再定义)
11      */
12     static {
13         username = "liangd1234";
14         System.out.println("执行静态代码块");
15     }
16 
17     /*
18      *  类变量(静态变量),再类初始化之前初始化,无论类的实例被创建多少个,凡是被static修饰符修饰的,
19      *  都将按照顺序执行,所以输出的是liangd,而不是liangd1234
20      */
21 
22     /**
23      * 类变量(静态变量)
24      */
25     public static String username = "liangd";
26 
27     /**
28      * 实例变量(非静态变量),定义时被赋予初始值,会比在构造器赋予值更早执行
29      */
30     private String phone = "18090287931";
31 
32     /*
33         非静态代码块 实际上,非静态代码块在类初始化创建实例时,将会被提取到类的构造器中,
34         但是,非静态代码块会比构造器中的代码块优先被执行,
35         所以phone输出的值是构造器中定义的值,不是非静态代码块的值,更不是初始值。
36      */
37     {
38         phone = "liangd18090287931";
39         System.out.println("执行代码块");
40     }
41 
42     /**
43      * 构造方法
44      */
45     private TestCodeSequence() {
46         phone = "15982600186";
47         System.out.println("执行构造方法");
48     }
49 
50     public static void main(String[] args) {
51         TestCodeSequence testCodeSequence = new TestCodeSequence();
52         System.out.println(username);
53         System.out.println(testCodeSequence.phone);
54     }
55 
56 }

 

posted @ 2020-12-02 14:19  donleo123  阅读(150)  评论(0编辑  收藏  举报