偶然的你
声明不是将“值”声明为变量,而是声明类型变量。赋值只是将一个值存储到一个变量。初始化是将值赋值给变量。在申报时.这些定义也适用于字段。int i; // simple declarationi = 42 // simple assignmentint[] arr = { 1, 2, 3 };// declaration with initialization, allows special shorthand syntax for arraysarr = { 4, 5, 6 }; // doesn't compile, special initializer syntax invalid herearr = new int[] { 4, 5, 6 }; // simple assignment, compiles fine但是,应该指出,“初始化”对于“变量的第一次赋值”也有一个更为宽松的定义,无论它发生在何处。int i; // local variable declarationif (something) i = 42;System.out.println(i); // compile time error: The local variable i may not have been initialized然而,这汇编了:int i; // the following also compiles if i were declared finalif (something) i = 42;else i = 666;System.out.println(i);这里i可以通过简单的赋值从两个可能的位置“初始化”。因为这个,如果i是一个数组,您不能对此构造使用特殊的数组初始化器简写语法。因此,基本上“初始化”有两个可能的定义,取决于上下文:在最狭窄的形式下,这是一个任务与声明相结合的时候。它允许,除其他外,特殊的数组速记初始化器语法。更普遍的情况是,当第一次给变量赋值时。它允许,除其他外,分配给final变量在多个地方。编译器将尽最大努力确保这些分配中的一项能够发生,从而“初始化”final变量还有JVM上下文类和实例初始化,OOP上下文对象初始化等。