有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在测试一个CPU使用率检查的程序,我得到了一个空指针异常,所以我添加了空检查。当我添加空检查时,我开始出现一系列错误。代码如下:

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

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

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

请帮助解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    只有一条语句时,可以使用大括号:

    if (condition) 
        statement;
    

    与相同

    if (condition) { 
        statement;
    }
    

    这是由JLS Chapter 14: Blocks and Statements中的语法定义的。相关生产条款如下:

    IfThenStatement:
        if ( Expression ) Statement
    ...
    
    Statement:
        StatementWithoutTrailingSubstatement 
    ...
    
    StatementWithoutTrailingSubstatement:
        Block 
        EmptyStatement 
        ExpressionStatement 
    ...
    

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

    JLS 14.2: Blocks

    A block is a sequence of statements, local class declarations, and local variable declaration statements within braces.

    JLS 14.4: Local Variable Declaration Statements

    Every local variable declaration statement is immediately contained by a block.

    由于您正在声明double usuage = ...,因此在本例中需要大括号:

    if(idelTimeStr != null) {
        double usuage=temp - Double.parseDouble(idelTimeStr);
    }
    

    与不同

    if(idelTimeStr != null)
        double usuage=temp - Double.parseDouble(idelTimeStr);           
    

    使用卷曲括号,你的程序是语法> EME>细,但是你需要考虑的是,{{CD3}}变量只在块内可见,所以你需要在卷曲括号内添加更多的代码(或者用{{CD5>}块之外的默认值声明和初始化^ {CD3>})。

    在任何情况下,我suggest to always use braces even if there is only one statement