Tag: static block

如何在Java中初始化ThreadLocal对象

我有一个问题,我正在创建一个ThreadLocal并使用新的ThreadLocal初始化它。 问题是,我在概念上只想要一个持久的列表,这个列表会延续线程的生命,但我不知道是否有办法在Java中初始化每个线程的东西。 例如,我想要的是: ThreadLocal static { myThreadLocalVariable.set(new ArrayList()); } 这样它就可以为每个线程初始化它。 我知道我可以这样做: private static Whatever getMyVariable() { Whatever w = myThreadLocalVariable.get(); if(w == null) { w = new ArrayList(); myThreadLocalVariable.set(w); } return w; } 但是每次使用它时我真的不需要检查它。 我能在这做什么更好的事情吗?

什么是Scala相当于Java的静态块?

什么是Scala相当于Java的静态块?

为什么我们不能通过类名在静态块中设置静态最终变量的值

例如,考虑下面的代码捕捉: public static final int a; public static final int b; static { a = 8; // it’s working Test.b = 10; // compilation error Test.b cannot be assigned. } 为什么我们不能使用Test.b = 10; 在Test类本身的静态块内? 如果没有class级名称,它的工作正常。 这背后有什么理由吗?

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

C#静态构造函数和Java静态块之间的真正区别是什么? 它们都必须是无参数的。 当首次使用相关类时,它们都只被调用一次。 我错过了什么,或者它们是同一个东西,只是用不同的名字?

为什么子类中的静态块不会被执行?

这是代码 public class ClassResolution { static class Parent { public static String name; static { System.out.println(“this is Parent”); name = “Parent”; } } static class Child extends Parent { static { System.out.println(“this is Child”); name = “Child”; } } public static void main(String[] args) throws ClassNotFoundException { System.out.println(Child.name); }} 我期望的是: this is Parent this is […]

“当一个class级加载”实际意味着什么?

据说java中的静态块只在加载该类时运行一次。 但它究竟意味着什么? 在哪一点上是由JVM(Java虚拟机)加载的类? 是否在调用该类中的main方法时? 并且当main方法开始执行时,是否还加载了同一类的所有超类? 考虑A扩展B和B扩展C.所有都有静态块。 如果A有main方法,那么静态块的执行顺序是什么?

枚举 – 静态和实例块

我已经了解到,在Java中,在初始化类时执行静态块,并在构造每个类的实例之前执行实例块。 我总是在实例块之前看到要执行的静态块。 为什么案件与enums相反? 任何人都可以请解释示例代码的输出: enum CoffeeSize { BIG(8), LARGE(10),HUGE(12),OVERWHELMING(); private int ounces ; static { System.out.println(“static block “); } { System.out.println(“instance block”); } private CoffeeSize(int ounces){ this.ounces = ounces; System.out.println(ounces); } private CoffeeSize(){ this.ounces = 20; System.out.println(ounces); } public int getOunces() { return ounces; } } 输出: 实例块 8 实例块 10 实例块 12 实例块 20 […]

什么是与C ++静态块等效的C ++习惯用法?

我有一个带有一些静态成员的类,我想运行一些代码来初始化它们(假设这段代码不能转换成简单的表达式)。 在Java中,我会这样做 class MyClass { static int myDatum; static { /* do some computation which sets myDatum */ } } 除非我弄错了,C ++不允许这样的静态代码块,对吧? 我应该做什么呢? 我想要解决以下两个选项: 进程加载时(或加载此类的DLL时)会发生初始化。 首次实例化类时会发生初始化。 对于第二种选择,我在考虑: class StaticInitialized { static bool staticsInitialized = false; virtual void initializeStatics(); StaticInitialized() { if (!staticsInitialized) { initializeStatics(); staticsInitialized = true; } } }; class MyClass : private StaticInitialized […]