什么是Java中的掩码编程错误?

时间:2012-12-03 16:31:05

标签: java

在语言规范中它说:

  

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

Java中究竟有什么掩盖编程错误?

解释这一点的一个例子很不错。

由于

2 个答案:

答案 0 :(得分:6)

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

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

C / C ++

int do_something(int value) {
    int i;
    if (value > 10) {
        i = value;
    }

    return i;
}

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

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; 
}

答案 1 :(得分:-1)

“屏蔽编程错误”不是一种特殊的错误。这意味着它不希望在编程中“掩盖”(隐藏,混淆,难以检测)错误。例如,以下代码有错误。我从不将String变量设置为任何东西。

String theString;
System.out.println(theString);

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

编译器正试图在这里提供帮助,因为局部变量可能是很多问题的根源。 Java可以做些什么来揭露这些问题(与掩盖它们相反)是有帮助的。