在不中断方法

时间:2015-07-18 19:44:59

标签: java exception exception-handling

我知道并认识到(或者我认为是)由try{}catch阻止异常并通过类或方法抛出异常的差异,但我想知道,如果有办法,可以使用throws通过方法kayword,并在抛出异常后继续执行此代码/方法?

我的意思是,如下例所示:

public class Main {
    int[] array = {0,1,2};

    public static void main(String[] args){
        Main object = new Main();
        System.out.println("Dealing inside try{}catch block");
        object.dealInside();
        System.out.println("Dealing by throws keyword");
        try{
            object.throwOutside();
        }catch (ArrayIndexOutOfBoundsException ex){
        }
    }

    public void dealInside(){
         for(int i = 0; i < 6; i++){
             try{
                 System.out.println(i);
                 int r = array[i];
             }catch (ArrayIndexOutOfBoundsException ex){
             }
         }
    }

    public void throwOutside() throws ArrayIndexOutOfBoundsException{
        for(int i = 0; i < 6; i++){
            System.out.println(i);
            int r = array[i];
        }
    }
}

如果循环内有try{}catch块,即使发生异常,方法也可以继续,并且即使数组的长度为3,它也会打印int,即使方法为{{1异常,一旦被中断的方法停止。

  1. 有没有办法继续使用方法throws 异常?
  2. 同时处理多种方法是否可行 哪个throws相似/相同的异常,没有中断 他们的执行?

1 个答案:

答案 0 :(得分:2)

finally

这是finally块的确切目的。无论是否在它之前捕获到异常,都要在其中执行代码。它将始终执行。 写一些逻辑,通过在finally块中更改i的值来实现您真正想要的。

try {
    //risky code
} catch(Exception ex) {
    //handle caught exception
} finally {
    //this part always executes
}

现在,棘手的一点。如果你真的希望for循环继续前进,即使在后续语句中捕获了异常,这就是你要做的。

for(int i = 0; i < 6; i++) {

    Thread t = new Thread(new Runnable() {
        void run() {
            try{
                 System.out.println(i);
                 int r = array[i];
             }catch (ArrayIndexOutOfBoundsException ex){
             }
        });
    t.start();
}

for loop正在主thread上运行,而风险代码位于单独的线程中。因此,即使遇到异常,主线程也会继续运行,因为它不知道抛出的异常。这是一个巧妙的伎俩。但我不知道在实践中使用它是否是个好主意。