[英]What's the equivalent of C's "static" keyword in Java?
我想知道什么可能是 java 中的等效关键字,它可以执行与“C 中的静态关键字”相同的功能..我想在 Java 中进行递归,执行与 C 中的静态关键字相同的功能......
请帮忙..
C 有两种完全不同的static
关键字用法,C++ 增加了第三种用法:
// Use 1: declare a variable or function to be local to a given module
// At global scope:
static int global_var;
static void func();
在这种情况下,全局变量global_var
和函数void func()
只能在声明它们的文件内访问; 它们不能被任何其他文件访问。
// Use 2: declare a variable inside a function with global scope
void func(void)
{
static int x;
}
在这种情况下,变量x
实际上是一个全局变量,因为它只有一个实例——对func()
多次调用(包括递归调用)将始终访问同一个变量。
// Use 3 (C++ only): declare a global variable with class scope
class Widget
{
public:
static int var;
};
在这种情况下,这将变量Widget::var
声明为全局变量,但其作用域不同。 在类成员函数之外,它必须命名为Widget::var
; 在类成员函数中,它可以仅命名为var
。 也可以将其设为protected
或private
以进一步限制其范围。
现在,Java 中这 3 种用法的类似物是什么?
情况 1 没有直接模拟; 最接近的是声明具有包范围的对象,这是通过省略public
、 protected
或private
:
class Widget // Declare a class with package scope
{
int x; // Declare a member variable with package scope
void func() {} // Declare a member function with package scope
}
在这种情况下,声明的对象只能被同一包内的类访问; 其他软件包无法访问它们。
情况 2 在 Java 中也没有类似物。 最接近的方法是声明一个全局变量(即静态类变量,因为 Java 在最严格的意义上没有真正的全局变量):
class Widget
{
private static int func_x;
public static void func()
{
// use func_x here in place of 'static int x' in the C example
}
}
案例 3 是唯一一个在 Java 中直接类似的案例。 在这种情况下, static
关键字的作用完全相同。
C 中的"static"
关键字实际上有两个功能,具体取决于它的使用位置。 这些功能是可见性和持续时间(这些是我基于大量教学的术语,标准,如果你对那个级别的细节感兴趣,使用不同的术语,我经常发现这些术语会让新学生感到困惑,因此我对使用它们保持沉默)。
我收集到你所追求的是第一种类型,基本上是一个全局变量,因为我不能立即看到递归中其他变体的很多用途..
这是不可能的,因为在 Java 中,一切都必须属于一个类。 解决方法是创建一个包含“全局变量”的类,并且:
Java 没有全局变量,所以没有直接的等价物。 但是,Java 中有一个static
关键字与类的所有实例共享字段的状态,这与您所描述的内容非常接近。
我想在java中进行递归,执行与C中的静态关键字相同的功能......
但是,如果您要进行递归,您确定静态变量是您所需要的吗? 递归函数调用所需的任何特殊状态几乎总是传递回自身,而不是单独维护。
静态的Java中的概念不与C.静态的概念,坚持然而,在Java中的static关键字也是如此。 但它更像是 C++ 中的静态,然后是 C,有一些差异。
你可以在java中模拟一个静态类,如下所示:
/**
* Utility class: this class contains only static methods and behaves as a static class.
*/
public abstract class Utilities
{
// prevent inheritance
private Utilities()
{
}
// ... all your static methods here
public static Person convert(string) {...}
}
这个类不能被继承(像 final 因为虽然抽象它有一个私有构造器),不能被实例化(像静态因为抽象)所以只能调用其中的静态方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.