当前位置: 代码迷 >> java >> 抛出异常而不中断方法的执行
  详细解决方案

抛出异常而不中断方法的执行

热度:61   发布时间:2023-08-02 10:27:30.0

我知道并认识到(或我认为是这样),通过try{}catch块和通过类或方法抛出异常来区别beetwen异常,但是我想知道是否有办法通过方法使用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直到6。但是如果方法throws异常,则一旦被中断的方法停止。

  1. 有没有一种方法可以继续工作,从而throws异常?
  2. 是否可以同时处理throws相似/相同异常的多个方法,而又不中断其执行?

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上运行。 因此,即使遇到异常,主线程仍会继续运行,因为它对抛出的异常一无所知。 这是一个巧妙的把戏。 但是我不知道在实践中使用它是否是一个好主意。

  相关解决方案