2017-02-09 217 views
-2

下面的代码有什么问题?初始化后可以初始化静态变量吗?

class test { 
    static int a; 
    a=10; 
} 

如果我像这样写(如上),我得到一个编译时错误。

class test { 
    static int a=10; 
    a=4; 
} 

对于第二个,我没有得到任何错误。

+2

您不能在变量的声明中包含单独变量的变量,超出任何方法或块。 – SomeJavaGuy

+4

你的两个例子都不能编译 – Idos

+2

“对于第二个,我没有收到任何错误。”你应该得到一个错误。 –

回答

7

你的两个例子都不应该编译。

a=10; 

是一个声明,它不是直接在class declaration内有效。只能把直接类内部以下:

  • 成员声明(构件/静态变量声明(如static int a;),方法,嵌套类和接口);
  • 静态和实例初始值设定项;
  • 构造函数。

你需要把一个语句块中,例如静态初始化:

static int a; 

static { 
    a = 10; 
} 

这相当于:

static int a = 10; 
3

您需要使用声明的静态块在另一条线上进行分配(方法外)

class test { 
    static int a; 
    static { a=10; } 
} 
1

a = 4;必须在有效的范围

任何方法或构造函数来完成...

这条线是有效的,而不是

static int a=10; 

因为Java允许youto声明,并在一个语句中初始化!

0

如果要在将其定义为空整型之后初始化a,则只能在函数中执行该操作,因为它是静态的。

+3

'int'不能为空。如果您未分配它,它的值将为零。你不需要在一个函数中完成它,你也可以在初始化块中完成它。 –

+0

要添加到Andy的注释中,事实上Java中没有任何基本类型都是可以为空的,它们将使用默认值进行初始化。 – px06

0

必须在静态块或init块或构造函数中初始化。
你只能初始化函数或块内声明后,您的成员变量,因为它是静态的,你应该使用静态块

0

什么目前你正在做的是在声明一个类decleration,这是无效的变量。看看这个例子都不会给你任何好的结果。

类声明中,你可以不过初始化变量:如果你想用它来工作

static int a; 

然后,你必须首先创建一个方法(如果你没有意识到这一点,我会强烈建议观看一些YouTube的教程或阅读关于这个主题的书):

public void foo(int a){ 
a = 6; //Here you can play with your variables and change them 
} 

在类declararions您可以:声明方法,初始化和建设者。 (你可以做更多的事情,但是在潜入太深之前我会看看这些点)。

而且似乎你不知道什么是静态变量或静态方法呢,我认为下面的帖子会帮你:

difference between 'static int' and 'int' in java

What are static method and variables?

我希望我可以帮助和玩乐学习Java

+0

用于在类加载时声明的静态变量内存,通过class.static变量或静态变量来调用我们调用的变量。对于创建的@ object创建的实例变量内存,这意味着在创建对象时,我们通过声明的变量进行调用。 – Attri

0

因为在分类加载时分配静态内存 所以我们需要这样做 class test {static int a = 10; public static void main(String args []){a = 12 output(test.a(or)a);}}