Java异常捕获初学者

Java异常捕获初学者,java,try-catch,Java,Try Catch,我正在学习java的try-and-catch异常,我遇到了一些问题。事实上,我已经设置了算术异常catch&try,但在某些情况下,异常不是catch My Recursion.java: import java.lang.ArithmeticException; public class Recursion { private int u0; private int u1; public Recursion(int u0, int u1) {

我正在学习java的try-and-catch异常,我遇到了一些问题。事实上,我已经设置了算术异常catch&try,但在某些情况下,异常不是catch

My Recursion.java:

import java.lang.ArithmeticException;

public class Recursion {

    private int u0;
    private int u1;

    public Recursion(int u0, int u1) {

        this.u0 = u0;
        this.u1 = u1;

    }

    public int boucle (int n) throws ArithmeticException{

        switch (n) {
        case 0 :
            return this.u0;
        case 1 :
            return this.u1;
        }


        try{

            if ( (n%2) == 0 ) {
                return (boucle(n-1) / boucle(n-2)) - (boucle(n-2) / boucle (n-1));
            }

            else{
                return (boucle(n-2) / boucle(n-1)) - (boucle(n-1) / boucle (n-2));
            }
        } 
        catch (ArithmeticException e){
            System.out.println("Erreur division par 0 !");
            throw e;
        }


    }

}
My Main.java:

public class Main {

    public static void main(String[] args){

        Recursion monObjet1 = new Recursion (100,2);
        Recursion monObjet2 = new Recursion (100,1);

        System.out.println(monObjet2.boucle(10));


    }

}
我得到这个:

Erreur division par 0 !
Erreur division par 0 !
Erreur division par 0 !
Erreur division par 0 !
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Recursion.boucle(Recursion.java:32)
    at Recursion.boucle(Recursion.java:32)
    at Recursion.boucle(Recursion.java:32)
    at Recursion.boucle(Recursion.java:28)
    at Main.main(Main.java:11)
我不明白为什么这个例外没有被抓住

一些输出代码可能是法语,给您带来不便,我深表歉意

致以最良好的祝愿,
Astrus

您可以在控制台中看到异常被捕获。但是它被
throw e再次抛出。如果删除它,则不会将堆栈跟踪写入控制台

您不再在
main
方法中捕捉它(与其他捕捉并重新播放它的方法不同)。然后,它将被抛出main方法,并由该线程的默认异常处理程序处理,从而打印异常的完整堆栈跟踪

在主方法中添加一个
try catch
,并且不要重新显示异常以避免打印堆栈跟踪。

此行

throw e;

将boucle方法之外的异常抛出到main中。您需要在main方法中捕获此异常。

只需从boucle方法中删除try-catch并放入main方法

import java.lang.ArithmeticException;

class Recursion {

    private int u0;
    private int u1;

    public Recursion(int u0, int u1) {

        this.u0 = u0;
        this.u1 = u1;

    }

    public int boucle(int n) throws ArithmeticException {

        switch (n) {
        case 0:
            return this.u0;
        case 1:
            return this.u1;
        }

        if ((n % 2) == 0) {
            System.out.println("if " + (n - 1));

            return (boucle(n - 1) / boucle(n - 2))
                    - (boucle(n - 2) / boucle(n - 1));
        }

        else {
            System.out.println("else" + (n - 1));
            return (boucle(n - 2) / boucle(n - 1))
                    - (boucle(n - 1) / boucle(n - 2));
        }
    }

    public static void main(String[] args) {

        Recursion monObjet1 = new Recursion(100, 2);
        Recursion monObjet2 = new Recursion(100, 1);
        try {
            System.out.println(monObjet2.boucle(10));
        } catch (ArithmeticException e) {

            System.out.println("Erreur division par 0 !");

        }

    }

}

您捕获了异常,然后使用
throw e
再次抛出异常,谢谢您的回答!我想我真的不明白“扔e”在做什么。。。你能解释一下这条线在干什么吗?