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 }