java变量(varname)可能尚未初始化`
import java.io.*;
interface MyIOAction
{
void ioAction(Reader rdr) throws IOException;
}
class MyClass
{
public static void main(String args[]) throws IOException
{
Reader rdr1;
int read = rdr1.read(); //Statement 1
MyIOAction myIO = (rdr2) ->
{
int ch = rdr2.read(); //Statement 2
};
}
}
在上面的代码中,Statement 1
产生以下错误
Variable
rdr1
might not have been initialized
而Statement 2
编译成功
那么,为什么在Statement 1
中不会产生与Statement 2
中相同的错误呢
# 1 楼答案
在语句2中,
rdr2
本质上是一个方法的形式参数。它在调用方法时初始化。有关语句2的详细信息,请参阅Lambda Quick Start或Lambda Expressions教程# 2 楼答案
局部变量(在方法体中声明的变量)
rdr1
应该在使用前初始化。但是这条规则 不适用于类变量(实例变量)。它们得到默认的类型值就
rdr2
而言,它是在调用方法时初始化的。有关Lambda Exphere的更多信息