为啥我不能在方法之外进行赋值?
Posted
技术标签:
【中文标题】为啥我不能在方法之外进行赋值?【英文标题】:Why can't I do assignment outside a method?为什么我不能在方法之外进行赋值? 【发布时间】:2012-08-17 05:57:41 【问题描述】:如果我尝试为类中的变量赋值,但在方法之外,我会收到错误。
class one
Integer b;
b=Integer.valueOf(2);
但是,如果我在创建过程中对其进行初始化,它就可以工作。
class one
Integer b=Integer.valueOf(2);
在方法内部,这两种情况都有效。
【问题讨论】:
【参考方案1】:方法有责任对成员变量执行突变。如果成员变量需要初始化,java提供了在构造时做的方式,类定义(后一种情况)。但是在定义期间不能执行突变。(前一种情况)。它通常在方法级别完成。
对象是用来保存状态的,而方法是用来操作那个状态的。
【讨论】:
【参考方案2】:我认为在术语方面,其他几个答案略有偏差。声明也是陈述。实际上,它们被称为“声明语句”,是三种语句中的一种。赋值语句是“表达式语句”的一种形式,只能用于方法、构造函数和初始化程序等构造中。查看Oracle's tutorial link 中的“声明”部分。
【讨论】:
【参考方案3】:更一般的答案是类主体是关于声明,而不是声明。对类主体中出现的语句有特殊规定,但它们必须明确标记为类初始化器或实例初始化器。
【讨论】:
【参考方案4】:你需要做的
class one
Integer b;
b=Integer.valueOf(2);
as 语句必须出现在代码块中。
在这种情况下,该块是一个初始化程序块,它被添加到每个构造函数(或在这种情况下为默认构造函数)它在任何对 super()
的调用之后和任何构造函数中的主代码块之前运行。
顺便说一句:你可以有一个带有static
的静态初始化块,它在类初始化时被调用。
例如
class one
static final Integer b;
static
b=Integer.valueOf(2);
【讨论】:
【参考方案5】:因为 assignments 是 statements 并且 statements 只允许在 代码块(方法、构造函数、静态初始化器等)
仅允许在这些声明之外。
这个:
class one
Integer b=Integer.valueOf(2);
是一个带有初始化器的声明。这就是为什么被接受
【讨论】:
为什么语句只允许在代码块内? 上面的断言是“只允许声明”,但是示例代码包括声明、实例化和初始化。如果那句话后面有逗号而不是句号,我会让它过去...【参考方案6】:这是 java 的工作方式,你不能在类中添加非声明代码(对不起,我不知道正确的术语),该代码应该在方法中。
【讨论】:
你测试问题中的代码了吗,你有没有阅读问题...【参考方案7】:在Java中,定义一个类时,可以定义具有默认值的变量并添加方法。任何可执行代码(例如赋值)都必须包含在方法中。
【讨论】:
以上是关于为啥我不能在方法之外进行赋值?的主要内容,如果未能解决你的问题,请参考以下文章
Java:为啥我不能在 main 之外调用这个方法? [关闭]