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 }