【问题标题】: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);
}

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

【问题讨论】:

    标签: java variables variable-assignment


    【解决方案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中,定义一个类时,可以定义具有默认值的变量并添加方法。任何可执行代码(例如赋值)都必须包含在方法中。

            【讨论】:

              猜你喜欢
              • 2015-03-05
              • 2020-08-10
              • 2017-03-26
              • 1970-01-01
              • 2014-05-12
              • 2022-01-24
              相关资源
              最近更新 更多