问题标签 [static-initialization]
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.
java - 在静态初始化程序中初始化静态最终字段不会给我一个编译时间常数(Java)
我尝试在 servlet 中使用注释 @MultipartConfig(location=Test.MY_CONST)。
当我使用下面的代码 1时,它工作得很好。当我使用下面的代码 2时,我在编译时得到以下输出:
错误:属性值必须是常量
@MultipartConfig(location=Test.MY_CONST)
代码 1
代码 2
问题: 我有几个问题可以归结为“这是怎么回事? ”
- 代码 1和代码 2之间有什么区别?
- 我收到这个错误是因为@MultipartConfig 需要一个编译时间常数,并且
MY_CONST
在静态初始化程序中分配一个编译时间常数不会产生MY_CONST
一个编译时间常数吗? - 在代码 2
System.out.println(Test.MY_CONST)
的情况下,如果我使用反射更改 的值,会打印什么?MY_CONST
c++ - 动态库中共享库的静态初始化器
所以我有一个静态库(MacOS,.a 库)。它是用 C++ 编写的,并且在它的代码中有静态初始化器,如下所示:
我将我的 .dylib 库与这个 .a 库链接起来。不幸的是,当我的 .dylib 文件被加载时,没有MyClass::newInitialDefaultValue()
被调用。可能是什么原因以及如何处理?
我已经尝试过没有运气-all_load
的-force_load
链接器标志。
java - 什么时候使用初始化器?
我最近遇到了以下一点 java 语法:
显然,这被称为“静态初始化程序”(参见Java 中的静态块),并且“在加载类时执行”。什么时候应该使用静态初始化器?与仅以通常的方式初始化变量相比,它的优点和缺点是什么?
c++ - 为什么静态初始化顺序仍未指定?
编译器是否拥有生成所有全局变量的依赖树并为它们创建定义良好且正确的初始化顺序所需的所有信息?我意识到您可以使用全局变量编写循环依赖项-仅在这种情况下进行未定义的行为-编译器可能会发出警告,也可能会出错。
通常这种事情的原因是它会给编译器制造商带来负担或导致编译显着变慢。在这种情况下,我没有任何指标或证据表明其中任何一个都不正确,但我的倾向是两者都不正确。
java - Is it standard / recommended practice to covert checked to unchecked exceptions in static blocks?
A static block cannot throw checked exceptions but I have seen a couple of codes where checked exceptions are converted unchecked and thrown from static blocks. An example of such would be reading a text file of dictionary. We do not want to read only half the dictionary, and makes sense to throw an exception instead of catching it. But my question is - is it just a hack or a commonly followed industry wide coding style ?
c++ - 间接递归,依赖静态变量
以下间接递归的结果是标准定义的还是未定义的行为?
在 VS2012 中,tmp 为 5,但我不确定标准是否保证了这一点。
java - JUnit:静态最终属性的初始化
通常在我的单元测试中,我有从资源文件中读取并存储到测试类的静态属性中的固定装置:
哪个有效,但我遇到的问题是我通常不喜欢我的测试中的非最终静态数据,因为它允许一个测试用例影响另一个测试用例的输出(在上面的示例中,如果一个测试重新分配fileContents
给别的东西,那么在使用夹具数据的其他测试中会有副作用)。
如果我添加了 final 修饰符,那么赋值必须在声明时发生,这在初始化非常重要时会出现问题(例如在上面的示例中,初始化代码可能会触发已检查的异常)。另一种方法是使用静态初始化块:
但由于必须编写 try/catch 的冗长,我并不特别喜欢这种方法。
哪种方法更常见/惯用 Java,还是有更好/更典型的方法来初始化静态最终资源?
java - 接口中的静态初始化
当我试图写这样的东西时:
编译器无法编译它。
但是当我写这样的东西时:
并反编译它,我看到了静态初始化:
你能向我解释一下这种行为吗?
java - 静态初始化
我在编译代码时遇到了问题。当我编译我的代码 foo2.var 在类 foo 中返回 null 时,我似乎无法弄清楚为什么。我在 foo2 类中进行静态初始化以导致 foo2.var 在 foo 类中为空的方式有什么问题吗?
任何帮助表示赞赏。
本例中 foo2.var 行出现空指针错误。
c++ - 为什么静态初始化顺序惨败会这样称呼?
由于静态初始化涉及零初始化和使用常量表达式的初始化,根据 C++03 标准,我看不出那里可能会出现哪些惨败。
那么,为什么要使用这样的名称,而不是例如“[Dynamic] Initialization Order Fiasco”?
编辑:
这实际上是一个反问,但我发现我的英语太弱了,无法自我回答。我也松散地使用“静态初始化”作为“所有初始化发生之前”的捷径main()
。但是由于“静态”术语已经超载,我写下了这个问题:
- 提醒一下,“静态初始化”在标准中有一个正式的定义。
- 收集此措辞的任何历史或轶事原因。
- 对于任何真正被看似悖论弄糊涂的人。