Java 试着抓住出错的机会

Java 试着抓住出错的机会,java,try-catch,Java,Try Catch,我正在创建另一个方法来调用另一个类的方法。在尝试捕获之后,netbeans一直告诉我“找不到符号:变量tLoad”,我做错了什么 public Track trackLoader(String fileName) { try { Track tLoad = TrackReader.read(fileName); } catch (IOException | FormatException ex) { Logger.getLogger(Rail

我正在创建另一个方法来调用另一个类的方法。在尝试捕获之后,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;
    }

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

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;
    }

您的变量
tLoad
仅存在于
try
块中,甚至不在catch中,而且绝对不在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;
    }

jls很好地解释了这一点:

块(§14.4)中局部变量声明的范围是声明出现的块的其余部分,从其自身的初始值设定项开始,并包括局部变量声明语句右侧的任何其他声明符

try-catch块定义为:

幽会: 试试拦网 最后试着用方块捕捉 尝试使用资源陈述

所以在你的代码中

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;
}
Track tLoad = null;

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

    return tLoad;
}