public class Foo {
public static void main(String[] args) {
float f;
System.out.println(f);
}
}
print语句会导致以下编译时错误,
局部变量f可能尚未初始化
如果Java中的原语已经有一个默认值(float=0.0f),为什么我需要定义一个呢?
所以,这是有效的
public class Foo {
float f;
public static void main(String[] args) {
System.out.println(new Foo().f);
}
}
谢谢大家!
类字段(非最终字段)初始化为默认值。局部变量不是。
声明字段时并不总是需要赋值。已声明但未初始化的字段将由编译器设置为合理的默认值。
所以在
class C {
float f;
}
将被初始化为0f
但是本地变量f
在
void myMethod() {
float f;
}
不会的。
语言对局部变量的处理不同于字段。局部变量的生存期范围很广,所以初始化前的任何使用都可能是错误的。字段没有,所以默认初始化通常很方便。
事实上,编译器不会为您的浮点f
指定默认值,因为在本例中,它是一个局部变量,而不是一个字段:
局部变量略有不同;编译器从不为未初始化的局部变量指定默认值。如果无法在声明局部变量的位置初始化它,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。
因为它是一个局部变量。这就是为什么没有给它分配任何东西:
局部变量略有不同;编译器从不为未初始化的局部变量指定默认值。如果无法在声明局部变量的位置初始化它,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。
编辑:为什么Java会出现这个编译错误?如果我们看一下标识表达式。java
类文件,我们将找到以下块:
...
if (field.isLocal()) {
LocalMember local = (LocalMember)field;
if (local.scopeNumber < ctx.frameNumber && !local.isFinal()) {
env.error(where, "invalid.uplevel", id);
}
if (!vset.testVar(local.number)) {
env.error(where, "var.not.initialized", id);
vset.addVar(local.number);
}
local.readcount++;
}
...
如上所述(if(!vset.testVar(local.number)){
),JDK(使用testVar
)检查变量是否被分配(vset
)的源代码,我们可以在那里找到testVar
代码)。如果没有,它会从属性文件中引发错误var.not.initialized
:
...
javac.err.var.not.initialized=\
Variable {0} may not have been initialized.
...
来源
问题内容: print语句导致以下编译时错误, 局部变量f可能尚未初始化 如果Java中的原语已经具有默认值(float = 0.0f) ,为什么需要定义一个? 所以这有效 感谢大家! 问题答案: 因为它是一个局部变量。这就是为什么什么都没有分配的原因: 局部变量略有不同。编译器永远不会为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化本地变量,请确保在尝试使用它之前为其分配一个值。访
如果我在我的类中创建一个bool,就像一样,它默认为false。 当我在我的方法中创建相同的bool时,我得到一个错误“使用未分配的局部变量检查”。为什么?
下面的示例类无法编译: 此代码的编译错误消息是: 但是,对于包含以下方法的类,Java不会生成任何错误消息: 关于初始化及其要求,为什么Java对最终实例变量和最终局部变量的处理不同?谢谢
问题内容: Java的设计者是否有任何理由认为不应为局部变量提供默认值?认真地讲,如果实例变量可以被赋予默认值,那为什么我们不能对局部变量做同样的事情呢? 问题答案: 声明局部变量主要是为了进行一些计算。因此,程序员决定设置变量的值,并且不应采用默认值。如果程序员错误地没有初始化局部变量并且使用默认值,则输出可能是一些意外值。因此,在使用局部变量的情况下,编译器将要求程序员在访问变量之前使用一些值
我对python相当陌生,我想知道局部变量是如何工作的。让我们从一个简单方法的示例开始: 让我们假设local_dict像一种常量变量一样使用。这里有一个问题:它是在每次调用do_sth()时创建的,还是创建一次并保存在do_sth()内部的某个地方?
问题内容: 当我只是尝试使用 Java 编写一些程序时,我尝试使用变量,我知道变量必须在声明时进行初始化,但是在main方法内部它接受了没有初始化的变量。我不知道是什么原因。任何人都可以告诉我原因。 谢谢 码: 问题答案: 对于 实例变量水平 最终变量只能初始化一次。 必须 在构造函数结束之前 初始化类级别的最终变量。 对于 本地(方法)级别 方法级别的最终变量只能初始化一次。 使用前* 必须先初