草庐IT

java - Java 中 C 的 "static"关键字等同于什么?

我想知道java中的等效关键字是什么,它可以执行与“C中的静态关键字”相同的功能。我想在java中进行递归,执行与C中的静态关键字相同的功能...请帮忙.. 最佳答案 C对static关键字有两种完全不同的用法,C++增加了第三种用法://Use1:declareavariableorfunctiontobelocaltoagivenmodule//Atglobalscope:staticintglobal_var;staticvoidfunc();在这种情况下,全局变量global_var和函数voidfunc()只能在声明它们的

相互依赖的Java静态变量

有两个类,每个类都有自己的静态字段。当一个领域依赖于另一个领域时会发生什么?例如:publicclassA{publicfinalstaticSomethingsomething=newSomething(B.needed);}publicclassB{publicfinalstaticNeededneeded=newNeeded();}我所做的测试表明,在那种情况下,needed将在something之前初始化。在测试中,我向Java询问类A的变量,而B之前未加载。然而,结果可能只是巧合。Java中是否有任何机制可以保证needed将始终初始化为用作参数?我做了另一个测试。结果还表明

java - 如何在java中的静态上下文中定义成员接口(interface)?

Thememberinterfacecanonlybedefinedinsideatop-levelclassorinterfaceorinastaticcontext.案例A:顶级类中的接口(interface)完美运行packagemultiplei.interfaces.test;publicclassInterfaceBetweenClass{interfaceFoo{voidshow();}classInnerClassimplementsFoo{publicvoidshow(){System.out.println("InnerClassimplementsFoo");}}

java - 为什么静态字段自赋值只能使用显式静态语法进行编译?

为什么这段代码在右侧使用显式静态字段符号进行编译,但不是没有?publicclassA{staticinta=++A.a;//compiles//staticinta=++a;//error-cannotreferenceafieldbeforeitisdefinedpublicstaticvoidmain(String[]args){System.out.println(a);}} 最佳答案 这就是语言规范的编写方式。具体来说,Sec8.3.3说:Referencestoafieldaresometimesrestricted,e

java - 为什么 Java 的列表有 "List.toArray()",而数组没有 "Array.toList()"?

数组没有“toList”函数,所以我们需要“Arrays.asList”辅助函数来进行转换。这很奇怪:List有自己的函数可以转换为数组,但数组需要一些辅助函数才能转换为List。为什么不让数组具有“toList”功能,这种Java设计背后的原因是什么?非常感谢。 最佳答案 因为List实例是一个实际的对象,而数组(出于大多数意图和目的)是一个原始对象并且不公开方法。虽然技术上数组是一个对象,因此它们可以具有字段length和方法调用,例如clone(),但它们的类是在JVM编译后创建的。

java - java中的局部变量

我了解了局部变量和类变量的概念。但我一直有一个疑问“为什么我们不能将局部变量声明为static”?例如假设我们有一个play()函数:voidplay(){staticinti=5;System.out.println(i);}它在eclipse中给我错误:Illegalmodifierforparameteri;我有这个疑问是因为我读过以下概念:方法内的变量:范围是局部的,即在该方法内。当变量声明为static时,它存在于整个类中,即不存在于特定对象中。谁能帮我澄清一下这个概念。谢谢。 最佳答案 因为局部变量的范围仅限于周围的bl

java - 有什么办法可以保存 `static members` 的状态吗?

就像我们使用序列化保存实例变量的方式一样,有什么方法可以保存static成员的状态吗?如果在某种情况下,必须恢复静态成员的状态才能恢复某些内容,该怎么做? 最佳答案 我想到的最简单的选择是使用singleton而不是静态字段。单例对象可以序列化和反序列化,您可以管理它的生命周期,同时保留静态字段为您提供的“全局状态”(也就是说,全局状态是一件坏事,但这是另一个话题)否则-静态状态在类加载器的整个生命周期(这通常意味着JVM的生命周期)中得到保留。因此,如果你想持久化状态,在关闭时执行它并在类加载时恢复它是有意义的。Runtime.a

Java静态/实例变量运行性能

在阅读JackShirazi的“Javaperformancetuning”时,我遇到了以下语句:“实例和静态变量的操作速度可能会慢一个数量级与方法参数和局部变量相比。”这仍然适用于Java6/7吗?如果是,其背后的原因是什么?(他解释了一些关于访问局部变量/参数的特殊字节码,但我不明白)。 最佳答案 这里的关键词是可以。问题是局部变量和参数(本质上是局部变量的一种形式)可能在寄存器中,而实例和静态变量最终会在内存中结束(它们会在必要的时间内进入寄存器对它们进行操作,但最终会回到它们所在的内存。

java - 无状态 session bean 中的静态字段

如果我在无状态bean中有一个静态字段:@Stateless@Local(SomeClass.class)publicclassAccountBeanimplementsSomeClass{privatestaticfinalintSTATIC_FIELD=0;publicAccountBean(){}}STATIC_FIELD值是否会在所有AccountBean实例中共享,就像在基本类中一样?EDIT按照下面的建议将字段标记为final。 最佳答案 是的,它会被共享,但当然只能在单个JVM中共享。它的大写表明它是一个常量,因此应该

java - 通过反射更改最终变量,为什么静态和非静态最终变量之间存在差异

请引用以下代码。当我运行代码时,我能够更改最终非静态变量的值。但是,如果我尝试更改最终静态变量的值,则会抛出java.lang.IllegalAccessException。我的问题是为什么它在非静态最终变量的情况下也不会抛出异常,反之亦然。为什么不同?importjava.lang.reflect.Field;importjava.util.Random;publicclassFinalReflection{finalstaticintstmark=computeRandom();finalintinmark=computeRandom();publicstaticvoidmain(