添加Null检查会引发一系列编译错误

Pra*_*hik 5 java

我正在测试一个CPU使用率检查程序,我得到一个空指针异常,所以我添加了null check.当我添加null检查时,我开始收到一系列错误.这是代码:

double ideltime=Double.parseDouble(cpuIdle.trim());
**String idelTimeStr=formatter.format(ideltime);
if(idelTimeStr!=null)** 
double usuage=temp - Double.parseDouble(idelTimeStr);           
cpuUsage = formatter.format(usuage);
Run Code Online (Sandbox Code Playgroud)

突出显示的行显示添加了空检查.此null检查后的编译错误如下:

CPUUsage.java:29: error: '.class' expected
                        double usuage=temp - Double.parseDouble(idelTimeStr);
                               ^
CPUUsage.java:29: error: not a statement
                        double usuage=temp - Double.parseDouble(idelTimeStr);
                        ^
CPUUsage.java:29: error: illegal start of expression
                        double usuage=temp - Double.parseDouble(idelTimeStr);
                                     ^
CPUUsage.java:29: error: ';' expected
                        double usuage=temp - Double.parseDouble(idelTimeStr);
Run Code Online (Sandbox Code Playgroud)

请帮忙解决这个问题.

And*_*ter 6

当只有一个语句时,你可以省略花括号:

if (condition) 
    statement;
Run Code Online (Sandbox Code Playgroud)

是完全相同的

if (condition) { 
    statement;
}
Run Code Online (Sandbox Code Playgroud)

这由JLS第14章:块和语句中的语法定义.相关的生产条款是:

IfThenStatement:
    if ( Expression ) Statement
...

Statement:
    StatementWithoutTrailingSubstatement 
...

StatementWithoutTrailingSubstatement:
    Block 
    EmptyStatement 
    ExpressionStatement 
...
Run Code Online (Sandbox Code Playgroud)

最后,a ExpressionStatement类似于赋值或方法调用,但不是变量声明.变量声明需要一个.

JLS 14.2:块:

块是大括号内的语句,本地类声明和局部变量声明语句的序列.

JLS 14.4:本地变量声明声明:

每个局部变量声明语句都立即由一个块包含.

由于您double usuage = ...在这种情况下声明需要花括号:

if(idelTimeStr != null) {
    double usuage=temp - Double.parseDouble(idelTimeStr);
}
Run Code Online (Sandbox Code Playgroud)

与... 完全相同

if(idelTimeStr != null)
    double usuage=temp - Double.parseDouble(idelTimeStr);           
Run Code Online (Sandbox Code Playgroud)

使用花括号,您的程序在语法上很好,但是您需要考虑该usuage变量仅在块中可见,因此您需要在花括号内添加更多代码(或usuage使用默认值声明和初始化)在if街区之外).

在任何情况下,我建议即使只有一个声明,也总是使用大括号.