**摘要:**今天你的静态变量和静态代码块执行了吗?
本文分享自华为云社区《【java】静态变量和静态代码块那些事》,作者: 大金(内蒙的)。
今天你的静态变量和静态代码块执行了吗?
话不多说,开始今天的题目讲解吧。
静态成员属性的初始化早于静态代码块;
静态代码块是指的类的初始化操作,初始化早于对象的创建;
类静态域的只会初始化一次。
class Father{
public static int m = 33;
static{
System.out.println("父类被初始化");
}
}
class Child extends Father{
static{
System.out.println("子类被初始化");
}
}
class StaticTest{
public static void main(String[] args){
System.out.println(Child.m);
System.out.println(new Child());
}
}
答案:
父类被初始化
33
子类被初始化
Child1@2781e022
class Const{
public static final String NAME = "我是常量";
static{
System.out.println("初始化Const类");
}
}
public class FinalTest{
public static void main(String[] args){
System.out.println(Const.NAME);
}
}
答案:我是常量
详细说明:
static final的变量是在类加载的准备阶段(还没有到初始化):
为类的静态变量分配内存,并将其赋默认值
对于该阶段有以下几点需要注意:
class Const{
static{
System.out.println("初始化Const类");
}
}
public class ArrayTest{
public static void main(String[] args){
Const[] con = new Const[5];
}
}
输出:空
class Other {
public static Other o1 = new Other();
public static Other o2 = new Other();
{
System.out.println("构造块");
}
static {
System.out.println("静态块");
}
public static void main(String[] args) {
Other other = new Other();
}
}
答案:
构造块
构造块
静态块
构造块
脑瓜子是不是嗡嗡的!!!
整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。
以下四种情况触发。
所以,结合常识:
静态成员变量的初始化早于静态代码块;
静态代码块是指的类的初始化操作,初始化早于对象的创建;
类静态域的只会初始化一次。
再看一遍上面的代码,是不是能得出答案了呢?
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://huaweicloud.blog.csdn.net/article/details/122302767
内容来源于网络,如有侵权,请联系作者删除!