问题标签 [static-initializer]

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 投票
1 回答
87 浏览

java - 静态初始化块返回 void

关闭问题 关闭问题 关闭问题

0 投票
1 回答
15 浏览

java - 从历史记录中清除活动会卸载应用程序

我一直在使用来自许多界面、活动、小部件和通知的相机手电筒,并协调所有界面,我在随机类中使用静态初始化块来实例化所有需要的组件、小部件和通知工作正常,但是当从最近的应用程序中清除启动器应用程序时,我的随机类似乎由于某种我不明白的原因被卸载了。

我不想让这个类被卸载,我做错了什么吗?

这是我的清单:(当我开始测试发生的事情时,我改变了一些东西)

这是我的随机课:

活动类在 onCreate 和 onDelete 事件上没有做任何奇怪的事情

每当从最近的应用程序中清除活动时,下一个开始打印

然后可能会崩溃,因为后台有一个线程打开和关闭闪光灯,并被创建了两次。

0 投票
1 回答
90 浏览

java - 一个线程可以在另一个线程完成静态初始化(类加载)之前进入静态方法吗?

假设我们有以下类和两个线程 t1,t2。

以下是死锁发生的顺序:

1) t1 执行 A.aSomeMeth() 获取 A 的类加载锁。

2) t2 执行 B.bSomeMeth() 获取 B 的类加载锁。

3) t1 继续执行 B.bMeth() 并在持有 A 的锁的同时要求 B 的锁。

4) t2 继续执行 A.aMeth() 并要求 A 锁定,同时持有 B 锁定。

这会导致死锁。但在我的情况下 t2 实际上进入aMeth() 并在访问静态成员时被阻止str。所以我想知道线程在特殊情况下初始化之前是否有可能进入静态方法。

在我的测试运行中,t2 总是按预期在 A.aMeth() 处被阻止,因此是否存在任何可以进入并被阻止的极端情况str,JIT 优化,如方法内联等。

0 投票
1 回答
58 浏览

java - 静态初始化程序是否必须按层次顺序执行?

假设我有一堂课

我创建了一个子类

如果我现在编写一些代码来检查静态初始化程序:

我知道这两个条目都必须在,tmap因为A最终必须加载,因为B's super call 最迟。

但是,如果我正在阅读静态类初始化何时发生?正确地,我不能假设该Hello值总是首先放入地图中,因为tmap它是最终的。

因此,如果排序很重要(例如,如果我知道某些值可能会在层次结构中进一步更新/覆盖),我是否需要删除final修饰符?

还是有其他东西已经强制执行“正确的”静态初始化程序排序?

0 投票
4 回答
2478 浏览

java - 无法在 try/catch 中初始化静态最终变量

我正在尝试初始化一个静态最终变量。但是,这个变量是在一个可以抛出异常的方法中初始化的,因此,我需要在一个 try catch 块中。

即使我知道该变量将在 try 或 catch 块上初始化,java 编译器也会产生错误

最后一个字段 a 可能已经被分配

这是我的代码:

我尝试了另一种方法,直接将其声明为 null,但它显示了类似的错误(在这种情况下,这对我来说似乎完全合乎逻辑)

最终字段 TestClass.a 无法赋值

有没有一个优雅的解决方案?

0 投票
1 回答
162 浏览

java - 使用静态初始化器是一个好习惯吗?

Java中的静态初始化器有什么替代方法吗?

只是一个随机的例子:

它不会使调试变得更加困难吗?

0 投票
3 回答
1420 浏览

java - 无法使用扫描仪类从静态块读取输入

我想从静态块中的用户那里读取数据并需要检查那里的一些情况但是当我试图调用 nextInt() 时会导致一些错误

线程“主”java.lang.ExceptionInInitializerError 中的异常

原因:java.util.Scanner.throwFor(Scanner.java:862) 处的 java.util.NoSuchElementException 在 java.util.Scanner.nextInt(Scanner.java) 处的 java.util.Scanner.next(Scanner.java:1485) :2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Solution.initialise(Solution.java:21) 在 Solution.(Solution.java:15)

0 投票
3 回答
64 浏览

java - 可以分配一个静态变量,但不能在静态初始化程序中打印出来

我能够为静态变量赋值,但无法在同一个静态块中打印出来。

如果我将静态变量移到静态块上方,那么一切正常。现在我没有遵循代码的执行顺序。代码是在java中运行的。

我预计打印可乐价格的输出是:R12。但是错误提示:在定义之前无法引用字段。

0 投票
1 回答
684 浏览

mockito - 如何使用 PowerMockito 停止静态初始化

我正在开发一个用于工作的 API,我们为多个项目使用一个共享库来实现我们的日志框架。使用的类对其调用使用所有静态方法。

我正在尝试对 API 调用进行单元测试,我不能让它在 Logging 类上调用任何东西,否则它将失败。

我曾尝试使用 Powermock,但它失败了

返回一个

ClassCastException: org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext

LoggingFramework 中抛出它的行位于类中任何方法之外的静态初始化程序块内。

0 投票
1 回答
206 浏览

java - 在多线程应用程序中捕获 java.lang.ExceptionInInitializerError 是否合适?

我有一个类可以在静态初始化程序中加载和解析来自 XML 文件的数据,如下所示:

此类加载的数据用于将关键数据加载到我的应用程序中:

建议不要捕获致命错误,但在这种情况下,捕获错误以通知用户是否合适?或者我应该在我的设计中采取不同的方向并在静态初始化程序之外加载数据?需要延迟加载数据,这就是我采用这种方法的原因。