如果我尝试为类中的变量赋值,但在方法之外我会收到错误 .
class one{ Integer b; b=Integer.valueOf(2); }
但是,如果我在创建过程中初始化它,它就可以了 .
class one{ Integer b=Integer.valueOf(2); }
在方法内部,它适用于两种情况 .
因为 assignments 是 statements 和 statements 是允许 only inside 代码块(方法,构造函数,静态初始化器等)
除了这些之外,只允许声明 .
这个 :
是一个带初始化器的声明 . 这就是为什么被接受的原因
你需要做的
class one{ Integer b; { b=Integer.valueOf(2); } }
因为语句必须出现在代码块中 .
在这种情况下,块是一个initailiser块,它被添加到每个构造函数(或者在这种情况下是默认构造函数) . 它在对 super() 的任何调用之后以及任何构造函数中的主代码块之前运行 .
super()
顺便说一句:您可以使用 static { } 创建一个静态初始化块,该类在初始化时调用 .
static { }
例如
class one{ static final Integer b; static { b=Integer.valueOf(2); } }
更一般的答案是,类体是 declarations ,而不是 statements . 对于在类体中发生的语句有特殊规定,但必须将它们明确标记为 class initializers 或 instance initializers .
在Java中,定义类时,可以使用默认值定义变量并添加方法 . 任何可执行代码(例如赋值)都必须包含在方法中 .
这是java的工作方式,你不能在类里面添加非声明代码(对不起我不知道正确的术语),那个代码应该在inside里面 .
方法有责任对成员变量执行突变 . 如果需要初始化成员变量,java提供了一种在构造,类定义(后一种情况)中执行此操作的方法 . 但是在定义期间不能进行突变(前一种情况) . 它通常在方法级别完成 .
对象意味着保持状态,而方法意味着在该状态下运行 .
我认为术语方面,其他几个答案都略有偏差 . 声明也是声明 . 实际上,它们被称为"declaration statements",它们是三种语句中的一种 . 赋值语句是"expression statement"的一种形式,只能在方法,构造函数和初始化程序等构造中使用 . 查看Oracle's tutorial link中的语句部分 .
7 回答
因为 assignments 是 statements 和 statements 是允许 only inside 代码块(方法,构造函数,静态初始化器等)
除了这些之外,只允许声明 .
这个 :
是一个带初始化器的声明 . 这就是为什么被接受的原因
你需要做的
因为语句必须出现在代码块中 .
在这种情况下,块是一个initailiser块,它被添加到每个构造函数(或者在这种情况下是默认构造函数) . 它在对
super()
的任何调用之后以及任何构造函数中的主代码块之前运行 .顺便说一句:您可以使用
static { }
创建一个静态初始化块,该类在初始化时调用 .例如
更一般的答案是,类体是 declarations ,而不是 statements . 对于在类体中发生的语句有特殊规定,但必须将它们明确标记为 class initializers 或 instance initializers .
在Java中,定义类时,可以使用默认值定义变量并添加方法 . 任何可执行代码(例如赋值)都必须包含在方法中 .
这是java的工作方式,你不能在类里面添加非声明代码(对不起我不知道正确的术语),那个代码应该在inside里面 .
方法有责任对成员变量执行突变 . 如果需要初始化成员变量,java提供了一种在构造,类定义(后一种情况)中执行此操作的方法 . 但是在定义期间不能进行突变(前一种情况) . 它通常在方法级别完成 .
对象意味着保持状态,而方法意味着在该状态下运行 .
我认为术语方面,其他几个答案都略有偏差 . 声明也是声明 . 实际上,它们被称为"declaration statements",它们是三种语句中的一种 . 赋值语句是"expression statement"的一种形式,只能在方法,构造函数和初始化程序等构造中使用 . 查看Oracle's tutorial link中的语句部分 .