问题标签 [initialization-block]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
71213 浏览

java - Java 中初始化器与构造器的使用

所以我最近一直在复习我的 Java 技能,并发现了一些我以前不知道的功能。静态和实例初始化器就是两种这样的技术。

我的问题是什么时候会使用初始化程序而不是在构造函数中包含代码?我想到了几个明显的可能性:

  • 静态/实例初始化器可用于设置“最终”静态/实例变量的值,而构造函数不能

  • 静态初始化器可用于设置类中任何静态变量的值,这应该比在每个构造函数的开头使用“if (someStaticVar == null) // do stuff”代码块更有效

这两种情况都假设设置这些变量所需的代码比简单的“var = value”更复杂,否则似乎没有任何理由使用初始化程序而不是在声明变量时简单地设置值。

然而,虽然这些并不是微不足道的收获(尤其是设置最终变量的能力),但似乎确实有相当有限的情况应该使用初始化程序。

一个人当然可以使用初始化器来完成构造函数中所做的很多事情,但我真的不明白这样做的原因。即使一个类的所有构造函数共享大量代码,对我来说,使用私有 initialize() 函数似乎比使用初始化器更有意义,因为它不会锁定你在编写新代码时运行该代码构造函数。

我错过了什么吗?是否还有许多其他情况需要使用初始化程序?或者它真的只是在非常特定的情况下使用的一个相当有限的工具?

0 投票
14 回答
235764 浏览

java - 静态初始化块

据我了解,如果不能在一行中完成,则“静态初始化块”用于设置静态字段的值。

但我不明白为什么我们需要一个特殊的块。例如,我们将一个字段声明为静态的(没有赋值)。然后编写几行代码,为上面声明的静态字段生成并赋值。

为什么我们需要将这些行放在一个特殊的块中,例如:static {...}

0 投票
10 回答
75820 浏览

java - 什么是初始化块?

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

0 投票
2 回答
70655 浏览

java - Java中的静态块与初始化块?

可能重复:
静态初始化块

考虑以下代码

我们知道首先会执行静态块,然后是块。但问题是我一直无法理解块的真正用途。任何人都可以举一个真实的例子,其中 -

  • 静态块和块都在使用
  • 静态块和块都有不同的实用程序
0 投票
4 回答
2116 浏览

java - 实例初始化块和子类

我对实例初始化块何时应该运行感到困惑。根据 Kathy Sierra 的书:

每次创建类实例时都会运行实例初始化块

因此,根据这个问题和 java 的文档,考虑有两个类:父类和子类:

实例化子类对象只会创建 1 个子类类型的对象,但会调用其所有超类的构造函数。

根据上述: 为什么每次实例化子类的对象时都会调用位于超类中的实例初始化块?它不像超类的新对象被实例化。

0 投票
3 回答
1087 浏览

java - Java 实例初始化块和实例变量

在我之前的问题Java 类和静态块的上下文中,如果我将代码从静态块和变量更改为普通的实例初始化块和实例变量会怎样。现在代码将如何执行?

在这里,我得到的输出为 158。我无法理解这里的原因。其他代码是这样的:

这里的输出是 20,这是可以接受的,因为在创建对象时首先执行实例块。但是为什么第一个代码的输出是 158?

0 投票
1 回答
59 浏览

java - 静态类可以包含实例初始化块吗?

在阅读 Java 时,我遇到了一个问题:

静态类可以包含实例初始化块吗?

0 投票
1 回答
42 浏览

java - 为什么将变量初始化封装到初始化块中允许在声明之前进行初始化?

考虑以下代码:

显然,当我们尝试初始化一个未声明的变量时,它不会编译。

然而,将语句封装到初始化块中,使其编译成功:

使声明之前的初始化有效的初始化块的这个“特征”是什么?

在问这个问题之前,我阅读了几篇关于 SO 初始化块的帖子,但它们似乎主要解决了初始化顺序的问题(例如静态与非静态)。

0 投票
4 回答
58 浏览

java - 如何打破初始化块?

我有一堂课看起来像这样

我正在尝试Inner在我的测试类的初始化块中找到该类。

编译器不喜欢这样,我找不到更好的方法。

我该如何解决这个问题?这有什么好的模式吗?

0 投票
4 回答
31502 浏览

kotlin - kotlin 中的 init 块和构造函数有什么区别?

我已经开始学习 Kotlin。我想知道initblock 和constructor. 这与我们如何使用它来改进之间有什么区别?