为什么我不能在方法之外做任务?

时间:2012-08-21 20:23:28

标签: java variables variable-assignment

如果我尝试为类中的变量赋值,但在方法之外我会收到错误。

class one{
 Integer b;
 b=Integer.valueOf(2);
}

但是,如果我在创建过程中对其进行初始化,则可以正常工作。

class one{
 Integer b=Integer.valueOf(2);
}

在方法中,它适用于两种情况。

7 个答案:

答案 0 :(得分:24)

你需要做

class one{
 Integer b;
 {
    b=Integer.valueOf(2);
 }
}

因为语句必须出现在代码块中。

在这种情况下,块是一个initailiser块,它被添加到每个构造函数(在这种情况下是默认构造函数)它是在对super()的任何调用之后和任何构造函数中的主代码块之前运行的。

BTW:您可以使用static { }创建一个静态初始化块,该类在初始化时调用。

e.g。

class one{
 static final Integer b;

 static {
    b=Integer.valueOf(2);
 }
}

答案 1 :(得分:11)

因为赋值语句语句只允许 代码块(方法,构造函数,静态初始化器等。)

除了这些之外,只允许声明。

这:

  class one{
        Integer b=Integer.valueOf(2);
  }

是带有初始化程序的声明。这就是为什么被接受

答案 2 :(得分:1)

在Java中,定义类时,可以使用默认值定义变量并添加方法。任何可执行代码(例如赋值)都必须包含在方法中。

答案 3 :(得分:1)

这是java工作的方式,你不能在类里面添加非声明代码(对不起我不知道正确的术语),那个代码应该在inside里面。

答案 4 :(得分:1)

更一般的答案是,类主体是关于声明,而不是声明。对于在类体中发生的语句有特殊规定,但必须将它们明确标记为类初始化程序实例初始化程序

答案 5 :(得分:0)

我认为术语方面,其他几个答案略有偏差。声明也是声明。实际上,它们被称为“声明声明”,它是三种声明之一。赋值语句是“表达式语句”的一种形式,只能在方法,构造函数和初始化程序等构造中使用。查看此Oracle's tutorial link中的语句部分。

答案 6 :(得分:0)

方法有责任对成员变量执行突变。如果需要初始化成员变量,java提供了一种在构造,类定义(后一种情况)期间执行此操作的方法。但是在定义期间不能进行突变(前一种情况)。它通常在方法级别完成。

对象意味着保持状态,而方法意味着在该状态下运行。