Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';我不能在方法之外做作业吗?_Java_Variables_Variable Assignment - Fatal编程技术网

Java 为什么可以';我不能在方法之外做作业吗?

Java 为什么可以';我不能在方法之外做作业吗?,java,variables,variable-assignment,Java,Variables,Variable Assignment,如果我试图给类中的变量赋值,但在方法之外,我会得到一个错误 class one{ Integer b; b=Integer.valueOf(2); } 但是,如果我在创建过程中初始化它,它就会工作 class one{ Integer b=Integer.valueOf(2); } 在方法内部,它在两种情况下都能工作。在Java中,定义类时,可以使用默认值定义变量并添加方法。任何可执行代码(如赋值)都必须包含在方法中。这是java的工作方式,您不能在类中添加非声明代码(抱歉,我不知道正

如果我试图给类中的变量赋值,但在方法之外,我会得到一个错误

class one{
 Integer b;
 b=Integer.valueOf(2);
}
但是,如果我在创建过程中初始化它,它就会工作

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

在方法内部,它在两种情况下都能工作。

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

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

因为赋值语句语句只允许在代码块内部(方法、构造函数、静态初始值设定项等)

除此之外,只允许声明

这:

  class one{
        Integer b=Integer.valueOf(2);
  }
是带有初始值设定项的声明。这就是你需要做的被接受的原因

class one{
 Integer b;
 {
    b=Integer.valueOf(2);
 }
}
as语句必须出现在代码块中

在本例中,该块是一个initailiser块,它被添加到每个构造函数(或本例中的默认构造函数)中,它在调用
super()
之后和任何构造函数中的主代码块之前运行

顺便说一句:您可以有一个带有
static{}
的静态初始化器块,它在初始化类时被调用

e、 g


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

我认为从术语角度看,其他两个答案有点不一致。声明也是声明。事实上,它们被称为“声明声明”,是三种声明之一。赋值语句是“表达式语句”的一种形式,只能在方法、构造函数和初始值设定项等构造中使用。查看本节中的语句部分。

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


对象意味着保持状态,而方法意味着对该状态进行操作

为什么只允许在代码块内部使用语句?上面的断言是“只允许声明”,但是示例代码包括声明、实例化和初始化。如果那句话后面有逗号而不是句号,我会让它过去…你有没有测试问题中的代码,你有没有读过问题。。。
class one{
 static final Integer b;

 static {
    b=Integer.valueOf(2);
 }
}