java为什么我们不能在声明局部变量之前初始化它呢?
为什么i
不能在代码1中声明之前初始化,但可以在代码2中声明:
class Code1 {
void methodOfCode1() {
// System.out.println(i); can't use a local field before it is defined
// i = 10; can't initialize a local field before it is defined
int i;
}
}
class Code2{
static
{
i = 10; //A field can be initialized before it is defined.
}
static int i;
}
# 1 楼答案
初始化变量时,会根据数据类型分配一定量的内存
除非分配内存,否则无法初始化值
# 2 楼答案
这是变量的范围&;使用前缺少类型:您尚未定义
i
。必须先定义变量才能使用:Here's提供详细信息的Java语言规范
# 3 楼答案
因为编译器必须知道这个变量存储在哪里,以及它必须使用多少字节。如果我在初始化之前告诉计算机var=97,它就不知道这个“var”变量存储在哪里。此外,如果“var”是char,计算机需要一个字节来存储在RAM中。但是,它也可以是4字节的整数(取决于不同的系统)。因此,该系统将出现一种模棱两可的情况。合理地说,编译器不允许这样做
# 4 楼答案
答案是执行顺序
代码按顺序执行,在使用它之前必须定义它是什么。因此,在方法中,必须在使用变量之前声明它
在Java中,编译器initializes在多个过程中运行
class
。它首先运行并声明所有静态成员,然后为所有静态成员设置默认值。这一切都发生在任何方法(静态或非静态)被执行之前# 5 楼答案
Java是强类型的,你不能使用你不知道它是什么的东西。例如,如果一个方法接收到一个
String
或一个int
则它是不同的,因此编译器必须能够知道哪个是要调用的正确方法例如,这是有效的:
在知道变量的类型之前,编译器不能给变量赋值
# 6 楼答案
在Java中,必须先声明变量的类型,然后才能使用它
例如:
编辑:
首先在
class Code1
在使用变量之前,您并没有声明它,这违反了Java标准API,所以编译器显然会抱怨
在
class Code2
案中您同时声明了
instance
和block
的“static”因此,它不需要任何实例来加载它。 (深入复习静态概念会让你找到正确的方向)