试着抓错了

时间:2016-05-21 09:57:18

标签: java try-catch

我正在创建另一个调用另一个类的方法的方法。在尝试捕获后,netbeans一直告诉我“找不到符号:变量tLoad”我做错了什么?

public Track trackLoader(String fileName) {

    try {
        Track tLoad = TrackReader.read(fileName);


    } catch (IOException | FormatException ex) {
        Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex);
    } 

        return tLoad;
    }

3 个答案:

答案 0 :(得分:2)

您必须在tLoad - 块之外声明try才能在其之外使用它。

public Track trackLoader(String fileName) {
    Track tLoad = null;
    try {
        tLoad = TrackReader.read(fileName);


    } catch (IOException | FormatException ex) {
        Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex);
    } 

        return tLoad;
    }

答案 1 :(得分:0)

您的变量tLoad仅存在于try块中,甚至不在catch中,并且绝对不会在它们之后。修正:

   public Track trackLoader(String fileName) {
       Track tLoad = null;
        try {
            tLoad = TrackReader.read(fileName);
    } catch (IOException | FormatException ex) {
        Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex);
    } 

        return tLoad;
    }

答案 2 :(得分:0)

jls很好地解释了这一点:

  

块中的局部变量声明的范围(第14.4节)是声明出现的块的其余部分,从其自己的初始化器开始,并包括局部变量声明语句中右侧的任何其他声明符。 jls 6.3

try-catch-block定义为:

  

TryStatement:       尝试Block Catches       尝试阻止Catchesopt最后       TryWithResourcesStatement

来自jls 14.20

所以在你的代码中

try {
    Track tLoad = TrackReader.read(fileName); //<-- this variable

    //is only visible until here
} catch (IOException | FormatException ex) {
    Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex);
} 

    return tLoad;
}

由于tload仅在try-block结束时可见,因此return语句没有任何意义。相反,你可以尝试这样的事情:

Track tLoad = null;

try {
    tLoad = TrackReader.read(fileName);
} catch (IOException | FormatException ex) {
    Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex);
} 

    return tLoad;
}