我正在学习Java,我知道在使用它时我必须初始化一个局部变量.但是,我刚刚从书中找到了一个代码,代码是:我想知道为什么在这种情况下变量量没有被初始化?
public static double cubeVolume(double sideLength)
{
double volume;
if (sideLength>=0)
{
volume=sideLength*sideLength*sideLength;
}
else
{
volume=0;
}
return volume;
}
Run Code Online (Sandbox Code Playgroud)
规则是它必须在使用之前初始化,因为if语句的两个分支volume在返回(也就是使用)之前已经初始化,编译器可以保证它在被使用之前已经初始化.
如果您尝试volume在if语句之前使用,则会再次收到该编译错误.同样道理,如果它不是在所有分支初始化(在这种情况下,如果声明的两侧),你会得到错误.
以下示例可能会在可能出现问题时给出一些煽动:
好的(但毫无意义):
double volume; //<--declared
volume=6; //<--initialised
double volumeUsed=2*volume;
Run Code Online (Sandbox Code Playgroud)
好:
boolean useUpper=true; //<-- useUpper declared and initialised
double volume;
if (useUpper){
volume=6; //<--initialised
}else{
volume=7; //<--initialised
}
double volumeUsed=2*volume;
Run Code Online (Sandbox Code Playgroud)
不行(使用时未知卷):
double volume;
double volumeUsed=2*volume;
Run Code Online (Sandbox Code Playgroud)
不行(使用时可能不知道音量- 如果useUpper为false):
boolean useUpper=true;
double volume;
if (useUpper){
volume=6; //<--initialised
}
//volume may not be initialised
double volumeUsed=2*volume;
Run Code Online (Sandbox Code Playgroud)
不行:在初始化之前使用
double volume;
double volumeUsed=2*volume;
if (sideLength>=0)
{
volume=sideLength*sideLength*sideLength; //<--initialised (too late)
}
else
{
volume=0;
}
return volume;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |