2010-07-31 45 views
7

我们可以在Main方法中声明Static变量吗?因为我收到错误消息:如何在Main方法中声明一个静态变量?

Illegal Start of Expression 
+1

请粘贴相关代码。 – 2010-07-31 15:41:01

+2

如果像某些评论者所说的那样,你的问题受到你可以在C中做这个事实的启发,那么你应该在你的问题中指出这个答案,以便通过指出Java和C之间的差异来帮助你。 – MatrixFrog 2010-07-31 15:48:19

+0

也许我们可以更好地回答,如果我们知道为什么你需要在方法中使用静态变量?在方法中声明的所有变量仅限于该方法的范围。让我们知道您正在尝试解决什么问题,我相信我们可以为您提供一些很好的答案。 – CoolBeans 2010-07-31 18:43:57

回答

26

显然,不,我们不能。

在Java中,static表示它是一个类的变量/方法,它属于整个类,但不属于它的某个特定对象。

这意味着static关键字只能在'类作用域'中使用,即它在方法内部没有任何意义。

+2

它可能有它在C函数中的含义...“ 来自维基百科:”静态局部变量:在函数内声明为静态的变量是静态分配的,而与自动局部变量具有相同的范围。当再次调用函数时,在一次调用期间它仍然存在于静态局部变量中。“ – 2010-07-31 15:44:14

+1

@功能:我的建议是基于问题附近的标签'java'。 – Roman 2010-07-31 15:45:01

+3

好的,明白了。我只是说它也可以是内部方法。这就是全部 – 2010-07-31 15:45:49

1

你不能,你为什么要这么做?您可以随时在其所属的课程级别声明它。

+1

C和C++中的方法内部的静态变量是合法的,也许这是他的背景。 – 2010-07-31 15:43:19

+0

我知道,但Java不是C++ :) C/C++中的静态变量具有在函数结束后不会被删除的优点,因此您可以将它们传递到任何位置。使用Java的垃圾收集器,你可以传递变量而不用担心,这就是为什么我问他是什么意思。谢谢你的评论。 – 2010-07-31 15:52:21

6

您可以使用main方法内部静态变量(或任何其他方法),但你必须声明它们的类:

这是完全正常:

public Class YourClass { 
    static int someNumber = 5; 

    public static void main(String[] args) { 
    System.out.println(someNumber); 
    } 
} 

这也没关系,但在这种情况下,someNumber是一个局部变量,而不是一个静态变量。

public Class YourClass { 

    public static void main(String[] args) { 
    int someNumber = 5; 
    System.out.println(someNumber); 
    } 
} 
4

由于静态变量的类加载时间分配的内存,并且如果你有一个方法内的静态变量分配内存只once.Now,那么这个变量来下的方法的范围,而不是类的范围和JVM无法为其分配内存,因为方法是通过类的对象的帮助来调用的,并且这是在运行时而不是在类加载时调用的。

3

由于静态变量可用于整个类,所以在概念上它只能在范围为全局的类之后声明,因为静态块或方法都有自己的作用域。

1

在C中,您可以静态分配本地的作用域变量。不幸的是,这在Java中不直接支持。但是你可以通过使用嵌套类来达到同样的效果。

例如,允许使用以下设置,但工程设计不好,因为x的范围比需要的大得多。另外两个成员(x和getNextValue)之间存在非明显的依赖关系。

static int x = 42; 
public static int getNextValue() { 
    return ++x; 
} 

一个真正想做到以下几点,但它是不合法的:

public static int getNextValue() { 
    static int x = 42;    // not legal :-(
    return ++x; 
} 

但是你能做到这一点,而不是,

public static class getNext { 
    static int x = 42; 
    public static int value() { 
     return ++x; 
    } 
} 

这是更好的工程为代价有些丑陋的。

相关问题