我创建了一个名为" file_name"的变量。在try-catch块的两条腿中 - 因此,无论是否抛出错误都应该可用。
但是,当我尝试使用" file_name"在我的下一个try-catch块中的变量,我得到"找不到符号"。
package timelogger;
import java.io.IOException;
public class TimeLogger {
public static void main(String[] args) throws IOException {
try {
String file_name = args[0];
}
catch (IndexOutOfBoundsException e){
String file_name = "KL_Entries.txt";
}
try {
ReadFile file = new ReadFile(file_name);
String[] aryLines = file.OpenFile();
int i;
for ( i=1; i < aryLines.length - 2; i++ ) { //-2 because last two lines not entries
//System.out.println( aryLines[ i ] ) ;
}
System.out.println(aryLines[1].charAt(24));
System.out.println(aryLines[1].charAt(48));
}
catch (IOException e){
System.out.println(e.getMessage());
}
}
}
我试过&#34; public String file_name = ...&#34;相反,但这给了错误&#34;非法开始表达&#34;什么的。
如何编译此代码?我觉得我错过了一些愚蠢的事情。
编辑:找到this,表明变量是try-catch块的本地变量。因此,通过在try-catch外声明变量然后在try-catch块中赋予它来修复问题。
答案 0 :(得分:1)
try-catch块中声明的变量是这些块的本地变量。因此,在try-catch之外声明变量,然后在try-catch中赋值。
Problem with "scopes" of variables in try catch blocks in Java
答案 1 :(得分:0)
您已尝试在try块和catch块中定义变量file_name
。但这意味着此变量仅在该块中可用。
你要做的是在外面定义它。当您在catch块中提供回退时,可以将其定义为default并使用参数覆盖它。因此,您不再需要尝试捕获:
String file_name = "KL_Entries.txt";
if (args.length > 0) {
file_name = args[0];
}