我使用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;
}
答案 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;
}