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

如果我尝试给一个类中的variables赋值,但是在一个方法外,我得到一个错误。

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

但是,如果我在创build过程中初始化它,它会起作用。

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

在一个方法中,它在两种情况下都起作用。

你需要做的

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

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

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

顺便说一句:你可以有一个静态的初始化块static { }这是在类初始化时调用。

例如

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

由于赋值 语句语句只允许代码块(方法,构造函数,静态初始值设定项等)

在这些之外只允许声明。

这个 :

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

是一个初始化的声明。 这就是为什么被接受

更一般的答案是,class级机构是关​​于声明 ,而不是声明 。 对于在正文中出现的语句有特殊的规定,但是必须将它们明确地标记为类初始化程序实例初始化程序

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

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

我认为术语明智,其他答案稍微closures。 声明也是声明。 实际上,它们被称为“声明陈述”,这是三种陈述之一。 赋值语句是“expression式语句”的一种forms,只能用于诸如方法,构造函数和初始化符之类的结构中。 查看这个Oracle教程链接中的Statements部分。

方法有责任在成员variables上执行突变。 如果成员variables需要被初始化,java提供了一个在构造,类定义(后一种情况)期间完成的方法。 但是定义过程中不能进行突变(前一种情况)。 通常在方法级完成。

对象是为了保持状态,而方法是为了在这个状态下运行。