2021年3月3日笔试面试题:请问输出的是什么?请说出原理?
public class static_01 { private static String username = "小王"; static { username = "小张"; } public static void main(String[] args) { System.out.println(username); } }
(这个图片是错误的感谢:kali98k用户的修正和指点)
正确截图如下:
static 代码块。
这个关键字就是为了形成静态代码块(废话),用静态的形式来优化程序性能,static块
可以置于类中的任何地方,类中可以有多个static块,在类初次被加载的时候会,按照static块的顺序来执行每个static块,并且只会执行一次。 因次很多时候将会一些只需要进行一次的初始化操作放在static代码中进行。
还是没解决我想得到的问题,
答案:
很明显了:根执行顺序有关
正常顺序:静态块(静态变量)-->成员变量-->构造方法-->静态方法
1.静态代码块(只能加载一次)
2构造方法(创建一个实例就加载一次)
3.静态方法需要调用才会执行
重点:
如果类还没有被加载:
1执行父类的静态代码块和静态量初始化,并且静态代码块和静态变量的执行顺序只根代码中出现的顺序有关。
2.执行子类的静态块和静态变量初始化。
3.执行父类的实例变量初始化
4.执行父类的构造函数
5.执行子类的实例变量初始化。
6.执行子类的构造函数
如果类已经被加载:
则静态代码块和静态变量就不用重复执行,菜创建类对象时,只执行与实例相关的变量初始化和构造方法
https://www.cnblogs.com/leiqiannian/p/7922824.html