我想知道什么是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以进一步限制其范围。
现在,这3种用法在Java中有什么类似物?
情况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关键字的用途完全相同。
等等,我以为Java中也存在用法#2,因为将变量声明为static将允许其值在调用函数之间保持不变。 自从Ive使用Java以来已经有很长时间了,但是我可能是错的。
一堆不必要的信息转储。 OP甚至没有提到C ++,并且他们很清楚他们需要C中static的哪个变体。 所需要做的就是该答案的情况2。 保持重点。
实际上,C语言中的"static"关键字根据其使用位置提供两种功能。这些功能是可见性和持续时间(这些是我基于相当多的教学所学的术语,如果您对详细程度感兴趣,那么该标准会使用不同的术语,我经常会感到困惑,因此我对使用它们会保持沉默)。
当在文件级别使用时,它将一个项目(变量或函数)标记为未导出,以便链接程序无法看到它。由于可见性是静态的,持续时间与程序相同(即直到程序退出)。这对于将项目封装在单个编译单元(最简单定义的源文件)中很有用。该项目可用于整个编译单元(假设在使用前已声明)。
在功能内使用时,它控制持续时间(可见性仅限于功能内)。在这种情况下,该项目也将创建一次,并一直保留到程序退出。函数内的非静态变量是在函数进入和退出时创建和销毁的。
我收集的是第一种类型,基本上是全局变量,因为我无法立即看到递归中另一个变体的用途。
之所以无法做到这一点,是因为在Java中,所有内容都必须属于一个类。解决方法是创建一个包含"全局变量"的类,并且可以:
传递该对象,以便您可以引用其成员;要么
构造一个单例项目,以便您可以访问其成员。
Java没有全局变量,因此没有直接等效的变量。但是,Java中有一个static关键字与一个类的所有实例共享字段的状态,这与您所描述的内容非常相似。
I want to do recursion in java, performing same function that a static keyword in C does...
但是,如果您要进行递归,您确定需要静态变量吗?递归函数调用所需的任何特殊状态几乎总是传递回自身,而不是单独维护。
John所说的似乎是绝对正确的,我怀疑在递归函数中使用静态变量。 如果您还可以编写递归函数,那将是干净的……
没问题。 如果您还有其他关于递归函数的问题,请继续问一遍。
Java中的static概念与C语言中的static概念不一致。但是,Java中也有static关键字。但是它更像是C ++中的static然后是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那样,因为尽管abstract虽然它具有私有构造函数),但是不能实例化(像static那样由于abstract而是静态的),因此只能调用其中的静态方法。