Java - .class未找到问题

时间:2012-04-25 22:12:28

标签: java

我有以下代码,

class AA {

    public static void main(String[] args) {

        long ll = 100 ;

        AA1 a1 = new AA1() ;

        if(ll == 100) // Marked line
            long lls [] = a1.val(ll);

    }
}

class AA1 {

    public long [] val (long ll1) {
        long [] val = new long []{1 , 2, 3};
        return val ;
    }

}

在没有标记线的情况下正确执行。但是,会出现错误" .class expected"标有线。任何人都可以帮我解决问题以及如何解决这个问题?

2 个答案:

答案 0 :(得分:9)

基本上这是您问题的简化版本:

if (condition)
    int x = 10;

你不能用Java做到这一点。您不能将变量声明用作if正文中的单个语句...大概是因为变量本身没有意义;唯一的目的是用于赋值的表达式的副作用。

如果确实想要无意义的声明,请使用大括号:

if (condition) {
    int x = 10;
}

它仍然没用,但至少它会编译......

编辑:响应评论,如果您需要在if块之外使用变量 ,则需要在 {{1}之前声明它阻止,并确保在读取值之前初始化它。例如:

if

或者:

// Note preferred style of declaration, not "long lls []"
long[] lls = null; // Or some other "default" value
if (ll == 100) {
    // I always put the braces in even when they're not necessary.
    lls = a1.val(ll);
}
// Now you can use lls

或者可能使用条件表达式:

long[] lls;
if (ll == 100) {
    lls = a1.val(ll);
} else {
    // Take whatever action you need to here, so long as you initialize
    // lls
    lls = ...;
}
// Now you can use lls

答案 1 :(得分:2)

Jon Skeet指出,这(1):

if(ll == 100)
    long lls [] = a1.val(ll);

将无法编译,因为它使用声明作为单个语句。

这(2):

if(ll == 100){
    long lls [] = a1.val(ll);
}

将编译,因为编译器并不真正关心{}中的内容 - 就if而言,它是一个块。它也毫无意义,因为它等同于(3):

if(ll == 100)
    a1.val(ll);

然而,当我看到(1)时,它通常看起来实际上意味着:

long lls [];
if(ll == 100)
    lls = a1.val(ll);