有 Java 编程相关的问题?

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

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中相同的错误呢


共 (2) 个答案

  1. # 1 楼答案

    在语句2中,rdr2本质上是一个方法的形式参数。它在调用方法时初始化。有关语句2的详细信息,请参阅Lambda Quick StartLambda Expressions教程

  2. # 2 楼答案

    局部变量(在方法体中声明的变量)rdr1应该在使用前初始化。但是这条规则 不适用于类变量(实例变量)。它们得到默认的类型值

    rdr2而言,它是在调用方法时初始化的。有关Lambda Exphere的更多信息

      public static void main(String args[]) throws IOException
            {
                Reader rdr1; // local variable should be initialized before use
    
                int read = rdr1.read();    //Statement 1
    
                MyIOAction myIO = (rdr2) -> // initialized when method is called.Lambda Exp.
                {
                    int ch = rdr2.read();    //Statement 2
                };
            }