Try-Catch中的变量不可用于其他Try-Catch块?

时间:2015-11-19 21:21:37

标签: java try-catch

我创建了一个名为" 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块中赋予它来修复问题。

2 个答案:

答案 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];
}