在Java中,我能否在静态成员函数中声明静态变量?

9
private static int Fibonoci(int n) {
static int first=0;
static int second=1;
static int sum;
if(n>0)

我遇到了一个“非法修饰符”错误,如果我删除 static 关键字就没有错误了。但是我需要这些变量是静态的。

将它们封装在一个类中。 - BigMike
5
把这些变量设为静态变量,声明在你的类中作为静态字段。 - Pshemo
为什么你需要它们是静态的? - Joeri Hendrickx
我在答案中分享了一些链接,可以访问这些链接获取斐波那契数列,并在实际需要时才使用静态变量。 - Ashish Aggarwal
9个回答

17

你不能在方法内将变量声明为静态的。
在方法内部,所有的变量都是局部变量,在该方法外部没有存在的意义,因此它们不能是静态的。

static int first=0;
static int second=1;
static int sum;
private static int Fibonoci(int n) {
   //do somthing
}
你正在尝试编写斐波那契数列代码,但你不需要静态变量来实现,以下是一些链接,介绍了如何解决这个问题。

http://crunchify.com/write-java-program-to-print-fibonacci-series-upto-n-number/

http://electrofriends.com/source-codes/software-programs/java/basic-programs/java-program-find-fibonacci-series-number/


1
只有类变量(字段)和方法才能是静态的。 - vikingsteve

3
在Java中,函数作用域内的静态变量是不允许的。

3
根本原因:静态变量在类加载时分配内存,因为它们是类的一部分而不是对象的一部分。
现在,如果静态变量位于方法内部,那么该变量将属于该方法的范围,JVM将无法为其分配内存。

1
但这正是像C或C++这样的语言中使用静态局部变量的目的:使用静态内存而不是堆栈,但将其作用域限制在函数内部。类范围内的静态变量是一种不同的东西,因为它对所有其他方法可见。 - SasQ

1

局部变量不能被声明为静态的。换句话说,静态不适用于局部变量

我没有看到在那里 声明它们为 静态有任何用处。

请参阅关于静态字段的JLs

静态字段,有时称为类变量,在类初始化(§12.4)时被实例化。


1
您无法在方法内声明静态变量,`static` 表示它是类的变量/方法,它属于整个类而不是其中某个特定对象。
这意味着 `static` 关键字只能在 '类作用域' 中使用,即在方法内没有任何意义。
我不知道您想要实现什么,但如果您真的希望这些变量是静态的,那么可以在您的类中将它们声明为静态字段。

0

这些变量被称为局部变量,它们位于方法作用域或构造函数中,不能是实例或类变量。

private static int COUNT;// Class Variable
private static int Fibonoci(int n) {
 int a =3 ; // local variable
}

我需要那些变量是静态的,好的,为什么你需要这个?因为静态变量用于特殊目的,不过,你可以像上面的代码一样创建静态字段。


0
你需要在函数外声明静态变量。
static int first=0;
static int second=1;
static int sum;
private static int Fibonoci(int n) {
    if(n>0)

0
你必须将静态变量定义为类成员。在方法内定义的变量是局部变量,它们的生命周期在方法结束时结束。局部变量是调用特定的,成员变量是对象特定的,而静态变量是类特定的变量。

0

在方法内部无法将变量声明为静态。换句话说,我们可以说, 局部变量不能被声明为静态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接