如果我有静态类,jvm如何保证它被初始化一次?当两个线程第一次同时尝试访问时会发生什么?这种特征语言是不变的吗? 编辑:这是一个有静态变量的类。
答案 0 :(得分:2)
JVM保证任何类只被初始化一次。
用于执行此操作的确切低级机制实际上是特定于JVM的,但是作为程序员需要知道的是,它本身是线程安全的,试图从不同的类访问/初始化同一个类线程。 (当然,这只是用于类加载:在访问任何不可变数据方面,无论是静态数据还是特定实例,都需要采取适当的措施。)
答案 1 :(得分:1)
您可以拥有一个静态嵌套类,其行为与任何其他类一样。
我假设您指的是静态代码/块和类初始化。 JVM保证只有一个线程加载一个类。由于它内置于JVM,我不认为任何语言都不会使用它。
答案 2 :(得分:0)
首先,静态关键字不是在类声明中常用的,虽然它可以在那里使用,但意味着与变量或方法不同。
你真的想知道静态类吗?或者它是关于静态变量/方法的问题?
答案 3 :(得分:0)
静态任何内容在加载类时初始化,而不是在第一个线程尝试访问它时。但是,对于数据成员或函数/方法,类的static
与static
不同。有关详细信息,请参阅this article。如果您询问数据成员,如果它们是静态的,那么它们被认为是“类变量”或“类方法”而不是“对象变量”(参见this article from Oracle for that discussion)。它通过使它们成为类对象本身的一部分而不是实例来实现。任何给定的类只有一个类对象。
关于您关于其他语言的问题:不,静态可能意味着许多不同的东西,具体取决于语言。