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

Java 在返回方法中尝试并捕获块,java,exception,exception-handling,Java,Exception,Exception Handling,我对使用try-and-catch语句相当陌生,而且我在使用return语句时遇到了一些问题。编译代码时,我在: fileFtp=client.listNames()所以我尝试用try包装这个语句,然后为异常编写了一个catch,但是文件名数组不再可见,所以我用try{}包装了整个方法,并在末尾使用了catch,并将返回文件名的return语句放在catch{}的末尾,但这也不起作用,因为文件名不再像在try{}中那样可见,所以如何在初始化文件名和文件FTP数组的同时满足异常报告要求 priv

我对使用try-and-catch语句相当陌生,而且我在使用return语句时遇到了一些问题。编译代码时,我在:
fileFtp=client.listNames()
所以我尝试用try包装这个语句,然后为异常编写了一个catch,但是文件名数组不再可见,所以我用
try{}
包装了整个方法,并在末尾使用了catch,并将返回文件名的return语句放在
catch{}
的末尾,但这也不起作用,因为文件名不再像在
try{}
中那样可见,所以如何在初始化文件名和文件FTP数组的同时满足异常报告要求

 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;
 }
private String[]检查目录(){
字符串[]fileFtp;
字符串[]文件名;
试试{
fileFtp=client.listNames();
}
捕获(IOEX异常){
System.out.println(“CheckDirectory()中的IOException”);
例如printStackTrace();
}
fileName=新字符串[fileFtp.length];

对于(int i=0;i我不确定你问了什么,但你可能应该试试这个:

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;
}
private String[]检查目录()
{
字符串[]fileFtp=null;
字符串[]文件名=null;
尝试
{
fileFtp=client.listNames();
fileName=新字符串[fileFtp.length];

对于(int i=0;i我不确定你问了什么,但你可能应该试试这个:

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;
}
private String[]检查目录()
{
字符串[]fileFtp=null;
字符串[]文件名=null;
尝试
{
fileFtp=client.listNames();
fileName=新字符串[fileFtp.length];

对于(int i=0;i您不应该在这里捕获异常,当您捕获异常时,您不会给调用代码任何操作失败的指示。让异常被抛出,以便调用方能够意识到出错并处理它:

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;
}
private String[]checkDirectories()引发IOException{
字符串[]fileFtp=client.listNames();
字符串[]文件名=新字符串[fileFtp.length];

对于(int i=0;i您不应该在这里捕获异常,当您捕获异常时,您不会给调用代码任何操作失败的指示。让异常被抛出,以便调用方能够意识到出错并处理它:

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;
}
private String[]checkDirectories()引发IOException{
字符串[]fileFtp=client.listNames();
字符串[]文件名=新字符串[fileFtp.length];

对于(int i=0;i你说的“不可见”是什么意思?你为什么不将catch块后的语句放在try块中?正如我所说的,我尝试在try块中包装该代码,但它无法返回文件名,因为文件名在try{}中。你说的“不可见”是什么意思?您不将catch块后的语句放在try块中有什么原因吗?正如我所说,我尝试将代码包装到try块中,但它无法返回文件名,因为文件名在try{}。我会把try and catch放在调用抛出的方法的代码上吗?@joe:不一定。这取决于该代码是否能够有效地处理异常。对于许多异常,最好的办法是让它们消失,直到中央处理程序能够记录它们。这是一个判断调用,取决于您的应用程序所做的好的,我有另一个方法调用checkDirectories并将其返回的数组存储在另一个数组中:String[]directories=checkDirectories();这在编译时得到一个未报告的异常错误,所以我需要包装这是try{}catch{}?Nvm-明白了。刚刚将directories变量设为null,并将try block置于调用Itan之上,我会将try和catch置于调用抛出的方法的代码之上吗?@joe:不一定。这取决于该代码是否能有效地处理异常。对于许多异常,最好的办法是让它们一直运行到出现中央异常为止处理程序可以记录它们。这是一个判断调用,取决于您的应用程序需要什么。好的,我有另一个方法调用checkDirectories并将其返回的数组存储在另一个数组中:String[]directories=checkDirectories()Nvm-明白了。只是将目录变量设为null,并将try block置于调用它之上