问题标签 [static-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 回答
48894 浏览

java - 在 Java 中模拟静态块

我对 Java 的座右铭是“仅仅因为 Java 有静态块,并不意味着你应该使用它们。” 撇开玩笑不谈,Java 中有很多技巧让测试成为一场噩梦。我最讨厌的两个是匿名类和静态块。我们有很多使用静态块的遗留代码,这些是我们推动编写单元测试的恼人点之一。我们的目标是能够以最少的代码更改为依赖此静态初始化的类编写单元测试。

到目前为止,我对同事的建议是将静态块的主体移动到私有静态方法中并调用它staticInit。然后可以从静态块中调用此方法。对于依赖于这个类的另一个类的单元测试,可以很容易地staticInitJMockit模拟不做任何事情。让我们看看这个例子。

将改为

这样我们就可以在JUnit中执行以下操作。

然而,这种解决方案也有其自身的问题。您不能在同一个 JVM 上运行DependentClassTest和运行,ClassWithStaticInitTest因为您实际上希望静态块运行ClassWithStaticInitTest.

完成这项任务的方法是什么?或者任何更好的、非基于 JMockit 的解决方案,您认为它们会更干净?

0 投票
1 回答
7553 浏览

java - Scala 等价于 Java 的静态块是什么?

Scala 等价于 Java 的静态块是什么?

0 投票
14 回答
235764 浏览

java - 静态初始化块

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

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

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

0 投票
4 回答
5252 浏览

c# - Java 静态块是否等同于 C# 静态构造函数?

C# 静态构造函数和 Java 静态块之间的真正区别是什么?

它们都必须是无参数的。当第一次使用相关类时,它们都只被调用一次。

我是否遗漏了某些东西,或者它们是相同的东西,只是名称不同?

0 投票
1 回答
178 浏览

java - 关于单身财产的问题

我正在阅读此处的枚举 Java 教程并有一个问题:http: //java.sun.com/j2se/1.5.0/docs/guide/language/enums.html#Card

我感到困惑的部分如下:

“上面的 Card 类包含一个返回牌组的静态工厂,但无法从其等级和花色中获取单独的牌。仅仅公开构造函数会破坏单例属性(即每张牌只有一个实例允许存在)。下面是如何使用嵌套的 EnumMap 编写一个保留单例属性的静态工厂:“

现在据我了解,将原始私有“卡片”构造函数更改为公共将允许我们实例化具有给定套装+等级的“卡片”对象的无限数量的副本。所提议的解决方案是创建一个 EnumMap,它将存储四个 Map(每个花色一个),它们本身包含 13 个 Card 对象,以等级作为键。

所以现在如果你想从牌组中检索一个特定的 Card 对象,你只需调用“valueOf”方法。我现在的问题是,什么是阻止你尽可能多次调用 valueOf 方法的原因?这不会导致与公开原始私有构造函数相同的问题吗?

谢谢。

0 投票
5 回答
28504 浏览

c++ - 什么是 C 或 C++ 中的静态块?

我想知道 c 或 c++ 中的静态块是什么,举个例子?我知道什么是静态的,但静态块和静态块有什么区别?

0 投票
2 回答
201 浏览

java - 如何检测 ClassLoading 的时间

我有一个 TrirdParty API,其中包含一个 CLass [比如说 A]。它有一个奇怪的静态块,类似于以下内容:

我想阻止调用System.exit()被覆盖的SecurityManager. 但是,我想在执行SecurityManager此块之前覆盖,然后static我想恢复原始安全管理器。

我知道如何替换/覆盖/恢复SecurityManager

我的问题是如何确定何时static调用块[基本上是在加载类时],以便在此之前我将使用我自己的SecurityManager来防止System.exit()和之后恢复原始SecurityManager.

请注意,仅在执行静态块的持续时间内覆盖安全管理器很重要。

编辑:

出于许可原因,更改源不是一种选择。

0 投票
5 回答
1313 浏览

java - 静态块和主线程

我在尝试使用 java 时发现了一件非常有趣的事情。请在下面找到代码:

上面的程序运行没有任何异常(很好,因为我正在退出静态块本身)。但我得到以下输出:

主要的

由于我还没有启动主线程,它是如何创建的。根据我的理解,静态块是在加载期间执行的。那么主线程是如何出现的呢?

谁能简单介绍一下jvm中的编译,加载和执行是如何完成的?还有用rt.jar吗?

在此先感谢,布林纳

0 投票
1 回答
3313 浏览

html - 在magento的CMS页面中使用静态块时没有CSS

我有一个静态块作为主题的一部分,可以在主页上完美运行 - 但是当我将静态块添加到任何其他页面时,它会以不同的方式显示。基本上 CSS 不遵循该块,它看起来不像它应该的那样。该块包含主题提供的小部件,所以我是否正确地说应该在创建小部件时附加 CSS?

无论如何都可以强制 CSS 遵循该块而不用过多地摆弄核心文件?或者有人能看到我忽略的东西吗?

0 投票
3 回答
3758 浏览

java - “加载类时”实际上是什么意思?

据说java中的静态块只在加载该类时运行一次。但它实际上是什么意思?JVM(Java虚拟机)在什么时候加载一个类?

是在调用该类中的主要方法时吗?是不是同一个类的所有超类在main方法开始执行的时候也被加载了?

考虑 A 扩展 B 和 B 扩展 C。都有静态块。如果 A 有 main 方法,那么静态块的执行顺序是什么?