java静态代码块
本笔记来源于周阳老师大厂面试题,视频地址:https://www.bilibili.com/video/BV15J4112785
静态代码块>非静态代码块>构造方法
静态代码块只会被调用一次
static修饰的静态代码块,是会在javac编译阶段完成就会执行的,且只执行一次
/**
* 静态代码块>非静态代码块>构造方法
* 静态代码块只会被调用一次
*/
class Code{
public Code(){
System.out.println("code的构造方法11111");
}
{
System.out.println("code的构造块22222");
}
static {
System.out.println("code的静态代码块33333");
}
}
public class Test {
{
System.out.println("Test的构造块44444");
}
static {
System.out.println("Test的静态代码块55555");
}
public Test(){
System.out.println("Test的构造方法66666");
}
public static void main(String[] args) {
System.out.println("==我是美丽分割线======Test的main方法77777");
new Code();
System.out.println("---------------");
new Code();
System.out.println("---------------");
new Test();
}
}
代码的输出为
Test的静态代码块55555
==我是美丽分割线======Test的main方法77777
code的静态代码块33333
code的构造块22222
code的构造方法11111
---------------
code的构造块22222
code的构造方法11111
---------------
Test的构造块44444
Test的构造方法66666
更复杂的带有继承的运行顺序
“先有Father类才会有Son”
class Father{
public Father(){
System.out.println("Father的构造方法11111");
}
{
System.out.println("Father的构造块22222");
}
static {
System.out.println("Father的静态代码块33333");
}
}
class Son extends Father{
public Son(){
System.out.println("son的构造方法44444");
}
{
System.out.println("son的构造块55555");
}
static {
System.out.println("son的静态代码块66666");
}
}
public class Test {
{
System.out.println("Test的构造块77777");
}
static {
System.out.println("Test的静态代码块88888");
}
public Test(){
System.out.println("Test的构造方法999999");
}
public static void main(String[] args) {
System.out.println("==我是美丽分割线======Test的main方法77777");
new Son();
System.out.println("---------------");
new Son();
System.out.println("---------------");
new Father();
System.out.println("----------------");
new Test();
}
}
执行结果
Test的静态代码块88888
==我是美丽分割线======Test的main方法77777
Father的静态代码块33333
son的静态代码块66666
Father的构造块22222
Father的构造方法11111
son的构造块55555
son的构造方法44444
---------------
Father的构造块22222
Father的构造方法11111
son的构造块55555
son的构造方法44444
---------------
Father的构造块22222
Father的构造方法11111
----------------
Test的构造块77777
Test的构造方法999999