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