为什么没有分配给变量的默认值,这些变量尚未在具有main函数的Class中初始化?
class Test {
public static void main(String[] args) {
int x;// x has no default value
String y;// y has no default value
System.out.println("x is " + );
System.out.println("y is " + );
}
}
Run Code Online (Sandbox Code Playgroud)
而如果变量在没有任何主函数的类中保持未初始化,则会分配默认值.
class Student {
String name; // name has default value null
int age; // age has default value 0
boolean isScienceMajor; // isScienceMajor has default value false
char gender; // c has default value '\u0000'
int x;
String y;
}
Run Code Online (Sandbox Code Playgroud)
请注意,问题中的代码代表不同的情况.在第一种情况下,变量是局部的并且存在于main()方法内部.在第二种情况下,您要声明实例属性,而不是局部变量.
在Java中,只使用默认值自动初始化属性.在所有方法中,即使在main()方法中,也必须为方法内部声明的变量显式提供初始化值.
每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10)
每个方法参数(第8.4.1节)初始化为方法调用者提供的相应参数值(第15.12节)
每个构造函数参数(第8.8.1节)初始化为类实例创建表达式(第15.9节)或显式构造函数调用(第8.8.7节)提供的相应参数值
异常参数(§14.20)初始化为表示异常的抛出对象(§11.3,§14.18)
局部变量(§14.4,§14.14)必须在使用之前通过初始化(第14.4节)或赋值(第15.26节)以可以使用明确赋值规则验证的方式显式赋予值(§14.4,§14.14) 16)
看到几个原因为什么局部变量不会被自动初始化,请看一看这个以前的问题.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |