首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是在Java中掩盖编程错误?

什么是在Java中掩盖编程错误?
EN

Stack Overflow用户
提问于 2012-12-03 16:31:04
回答 2查看 754关注 0票数 2

在语言规范中,它说:

局部变量在使用前一定要设置。虽然所有其他变量都会自动初始化为默认值,但Java编程语言不会自动初始化局部变量以避免掩蔽编程错误。

在Java中,什么是掩蔽编程错误?

举个例子解释一下,那就太好了。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-03 16:34:16

要理解这一点,您需要与C/C++进行比较。在C/C++中,局部变量在声明时包含垃圾值。因此,如果您忘记分配一个值,编译器就不会抱怨,对这样一个局部变量的所有引用都将与垃圾值一起工作,从而导致意外的行为。

在Java中,这种未初始化的局部变量会导致编译时错误,使得开发人员在使用它之前显式地将其初始化为有意义的默认值。

C/C++

代码语言:javascript
复制
int do_something(int value) {
    int i;
    if (value > 10) {
        i = value;
    }

    return i;
}

上面的片段在C++中是有效的,但是在java中无效。

代码语言:javascript
复制
int doSomething(int value) {
    int i;
    if (value > 10) {
        i = value;
    }

    //
    // This line will throw a compile-time error that 
    // `i` may not have been initialized.
    //
    return i; 
}
票数 6
EN

Stack Overflow用户

发布于 2012-12-03 16:35:36

“掩蔽编程错误”不是一种特殊的错误。这意味着它不希望在编程中“掩盖”(隐藏、混淆、使其难以检测)错误。例如,下面的代码有一个错误。我从不将字符串变量设置为任何内容。

代码语言:javascript
复制
String theString;
System.out.println(theString);

此代码将编译,但不会运行。您将得到一个空引用异常或类似的。原因是变量theString从未被设置为值。另一方面,如果Java将变量theString设置为值(例如,空字符串""),则程序将运行,但不会打印任何内容。您可能会花费很长时间试图解决这个问题,因为Java会通过设置默认值来“掩盖”错误。

编译器在这里试图提供帮助,因为局部变量可能是许多问题的根源。Java可以做的任何事情都能暴露这些问题(与掩盖它们相反)是有帮助的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13687583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档