尝试并在返回方法中捕获块

时间:2014-06-09 14:07:29

标签: java exception exception-handling

我使用try和catch语句相当新,而且我对return语句有点麻烦。在编译我的代码后,我得到了一个unreported IOException
fileFtp = client.listNames();所以我尝试在try中包装这个语句,然后为异常写了一个catch但是fileName数组不再可见了,所以我将整个方法包装在try{}中并使用了catch结束并放置在catch{}结束后返回fileName的return语句,但由于fileName不再可见,因为它在try{}中,因此无法工作,那怎样才能我仍然在初始化fileName和fileFtp数组的情况下满足异常报告要求吗?

 private String[] checkDirectories(){

    String[] fileFtp;
    String[] fileName;

    try{        
        fileFtp = client.listNames();
    }
    catch(IOException ex){
        System.out.println("IOException in checkDirectories()");
        ex.printStackTrace();     
    }

    fileName = new String[fileFtp.length];
        for (int i=0; i<fileFtp.length; i++){
            fileName[i] =   fileFtp[i];
        }            
        return fileName;
 }

2 个答案:

答案 0 :(得分:3)

你不应该在这里捕捉异常,当你这样做时,你不会给调用代码任何关于操作失败的指示。抛出异常,以便调用者能够意识到出错了并处理它:

private String[] checkDirectories() throws IOException {

    String[] fileFtp = client.listNames();
    String[] fileName = new String[fileFtp.length];
    for (int i=0; i<fileFtp.length; i++) {
        fileName[i] =   fileFtp[i];
    }
    return fileName;
}

抛出异常会让代码退出当前的执行路径,这样它就无法对无效数据进行操作,并向调用代码发出错误信号。如果你捕获异常并在这里返回null,那么调用代码必须检查null并决定是否继续。

答案 1 :(得分:1)

我不确定你问的是什么,但你应该试试这个:

private String[] checkDirectories()
{

    String[] fileFtp = null;
    String[] fileName = null;
    try
    {
    fileFtp = client.listNames();
     fileName = new String[fileFtp.length];
        for (int i=0; i<fileFtp.length; i++)
        {
            fileName[i] =   fileFtp[i];
        }
    }
        catch(IOException ex)
{
    System.out.println("IOException in checkDirectories()");
    ex.printStackTrace();

}



        return fileName;
}