22

如果我尝试将值分配给类中的变量,但在方法之外,则会出现错误。

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

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

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

在方法内部,它在两种情况下都有效。

4

7 回答 7

28

你需要做

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

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

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

顺便说一句:您可以有一个静态初始化程序块,static { }在初始化类时调用它。

例如

class one{
 static final Integer b;

 static {
    b=Integer.valueOf(2);
 }
}
于 2012-08-21T20:27:44.330 回答
17

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

在这些之外,只允许声明。

这个 :

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

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

于 2012-08-21T20:27:37.493 回答
1

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

于 2012-08-21T20:26:15.010 回答
1

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

于 2012-08-21T20:26:21.017 回答
1

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

于 2012-08-21T20:58:49.427 回答
0

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

于 2014-06-24T18:31:31.257 回答
0

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

对象是用来保存状态的,而方法是用来操作那个状态的。

于 2014-06-25T03:03:01.770 回答