java和c中static,Java中C的“ static”关键字等效吗?

我想知道什么是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而是静态的),因此只能调用其中的静态方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值