为啥我不能在方法之外进行赋值?

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】:

因为 assignmentsstatements 并且 statements 只允许在 代码块(方法、构造函数、静态初始化器等)

仅允许在这些声明之外。

这个:

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

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

【讨论】:

为什么语句只允许在代码块内? 上面的断言是“只允许声明”,但是示例代码包括声明、实例化和初始化。如果那句话后面有逗号而不是句号,我会让它过去...【参考方案6】:

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

【讨论】:

你测试问题中的代码了吗,你有没有阅读问题...【参考方案7】:

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

【讨论】:

以上是关于为啥我不能在方法之外进行赋值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 .each 方法之外修改数组?

Java:为啥我不能在 main 之外调用这个方法? [关闭]

为啥我不能在主类中创建除主方法之外的另一个方法?

为啥我不能为变量 x 赋值

为啥不能在用 let 和 const 声明变量之前进行赋值? [复制]

为啥@ViewChild 不能在 AfterViewInit 之外运行? [复制]