gpt4 book ai didi

java - 为什么这个局部变量没有在 Java 中初始化?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:12 24 4
gpt4 key购买 nike

我正在学习Java,我知道我在使用它时必须初始化一个局部变量。但是,我刚刚从书中找到了一段代码,代码是:我想知道为什么在这种情况下变量 volume 没有被初始化?

public static double cubeVolume(double sideLength)
{
double volume;
if (sideLength>=0)
{
volume=sideLength*sideLength*sideLength;
}
else
{
volume=0;
}
return volume;
}

最佳答案

规则是它必须在使用前被初始化,因为在 if 语句的两个分支上 volume 在它被返回(也被使用)之前已经被初始化编译器可以保证它在使用前已经被初始化。

如果您尝试在 if 语句之前使用 volume,您将再次收到该编译错误。同样,如果它没有在所有分支上初始化(在本例中是 if 语句的两边),您将得到错误。

例子

以下示例可能会提示何时可能会出现问题:

好的(但毫无意义):

double volume; //<--declared
volume=6; //<--initialised
double volumeUsed=2*volume;

确定:

boolean useUpper=true; //<-- useUpper declared and initialised
double volume;
if (useUpper){
volume=6; //<--initialised
}else{
volume=7; //<--initialised
}
double volumeUsed=2*volume;

不正常(使用时音量未知):

double volume;
double volumeUsed=2*volume;

不正常(使用时音量可能未知 - 如果 useUpper 为假):

boolean useUpper=true;
double volume;
if (useUpper){
volume=6; //<--initialised
}
//volume may not be initialised
double volumeUsed=2*volume;

不行:初始化前使用

double volume;
double volumeUsed=2*volume;
if (sideLength>=0)
{
volume=sideLength*sideLength*sideLength; //<--initialised (too late)
}
else
{
volume=0;
}
return volume;

关于java - 为什么这个局部变量没有在 Java 中初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com