java初始化块是什么意思_什么是初始化块?

问题

我们可以将代码放在构造函数或方法或初始化块中。初始化块有什么用?每个java程序都必须拥有它吗?

#1 热门回答(145 赞)

实例初始化块,和

静态初始化块。

此代码应说明它们的使用以及它们的执行顺序:

public class Test {

static int staticVariable;

int nonStaticVariable;

// Static initialization block:

// Runs once (when the class is initialized)

static {

System.out.println("Static initalization.");

staticVariable = 5;

}

// Instance initialization block:

// Runs each time you instantiate an object

{

System.out.println("Instance initialization.");

nonStaticVariable = 7;

}

public Test() {

System.out.println("Constructor.");

}

public static void main(String[] args) {

new Test();

new Test();

}

}

打印:

Static initalization.

Instance initialization.

Constructor.

Instance initialization.

Constructor.

如果你想要运行某些代码而不管使用哪个构造函数,或者你想为匿名类执行某些实例初始化,则实例itialization块非常有用。

#2 热门回答(82 赞)

想加入@ aioobe的答案

执行顺序:

超类的静态初始化块

类的静态初始化块

超类的实例初始化块

超类的构造者

类的实例初始化块

类的构造函数。

还要记住几点要点(第1点是@ aioobe的回答重申):

静态初始化块中的代码将在类加载时执行(是的,这意味着每个类加载一次),在构造类的任何实例之前和调用任何静态方法之前。

实例初始化块实际上由Java编译器复制到该类具有的每个构造函数中。因此,每次实例初始化块中的代码都在构造函数中的代码之前执行。

#3 热门回答(5 赞)

很好的答案由aioobe增加几点

public class StaticTest extends parent {

static {

System.out.println("inside satic block");

}

StaticTest() {

System.out.println("inside constructor of child");

}

{

System.out.println("inside initialization block");

}

public static void main(String[] args) {

new StaticTest();

new StaticTest();

System.out.println("inside main");

}

}

class parent {

static {

System.out.println("inside parent Static block");

}

{

System.out.println("inside parent initialisation block");

}

parent() {

System.out.println("inside parent constructor");

}

}

这给了

inside parent Static block

inside satic block

inside parent initialisation block

inside parent constructor

inside initialization block

inside constructor of child

inside parent initialisation block

inside parent constructor

inside initialization block

inside constructor of child

inside main

它表示明显但似乎更清晰。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值