Java - .class文件未找到问题

4

I have following code,

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个回答

9
基本上,这是你问题的简化版本:
if (condition)
    int x = 10;

你不能在Java中这样做。你不能将一个变量声明作为if语句的单个语句... 可能是因为变量本身是无意义的; 唯一的目的就是用于赋值表达式的副作用。
如果你真的想要这个无意义的声明,请使用大括号:
if (condition) {
    int x = 10;
}

虽然现在还是没有用的,但至少它会编译...

编辑:回应评论,如果你需要在if块之外使用变量,你需要在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

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

long[] lls = ll == 100 ? a1.val(ll) : null;

那么,如何解决这个问题?我简化了我的代码。实际上,代码返回动态数组。而且我不知道它的大小。如果我使用大括号,我就不能在if之外的其他地方使用它。我想在外部使用它。 - Arpssss
@Arpssss:如果你想在if语句之外使用它,你需要在if语句之外(在它之前)声明它。但在尝试使用它之前,你需要确保已经为它分配了某个值。考虑一下如果if条件成立时应该发生什么。 - Jon Skeet
好的。所以,我必须在外部声明,在内部赋值。 - Arpssss

2
正如Jon Skeet所指出的那样,这是关于IT技术的内容(1):
if(ll == 100)
    long lls [] = a1.val(ll);

由于使用声明作为单个语句,所以代码无法编译。

这个(2):

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

这段代码可以编译通过,因为编译器对于花括号内部的内容并不关心——对于if语句而言,它只是一个代码块。但这样做没有意义,与以下代码等效:

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

然而,当我看到(1)时,通常意思是:
long lls [];
if(ll == 100)
    lls = a1.val(ll);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接