Java是否支持函数内部的静态变量来保持调用之间的值?

Wus*_*uhn 1 java

/sf/answers/40078531/

我想在Java中使用这个功能,因为我设计的函数很少被调用(但是当它被调用时,它会启动一个递归链),因此,我不想让变量成为一个实例字段来浪费内存每次实例化类.

我也不想创建一个额外的参数,因为我不想通过实现细节来加重对函数的外部调用.

我尝试了static关键字,但Java说这是一个非法的修饰符.有直接替代方案吗?如果没有,建议采用哪种解决方法?

我希望它具有功能范围,而不是类范围.

Ste*_*n C 10

我希望它具有功能范围,而不是类范围.

那你运气不好 Java提供static(类范围),实例和局部变量.没有Java等效于C的函数范围static变量.


如果变量确实需要是静态的,那么你唯一的选择是使它成为类作用域.这就是你所拥有的一切.

另一方面,如果这是在某些递归方法调用中使用的工作变量,那么将其设置为静态将意味着您的算法不可重入.例如,如果您尝试在多个线程上运行它,它将崩溃,因为线程将全部尝试使用相同的静态...并相互干扰.在我看来,正确的解决方案是使用方法参数传递此状态.(你也可以使用一个所谓的"线程本地"变量,但它们有一些重要的下行...如果你担心的是大约200字节的存储空间!)


Boh*_*ian 5

如何在没有"浪费记忆"的情况下保持呼叫之间的价值?消耗的内存可以忽略不计.

如果您需要存储状态,存储状态:只需使用静态字段.


在多线程应用程序中使用静态变量时,建议小心:确保同步对静态字段的访问,以满足从不同线程同时调用的方法.最简单的方法是将synchronized关键字添加到static方法中,并将该方法作为使用该字段的唯一代码.鉴于该方法很少被称为,这种方法是完全可以接受的.