我学习尝试并使用java捕获异常,我遇到了一些问题。的确,我已经设置了ArithmeticException 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
答案 0 :(得分:3)
您可以在控制台中看到异常。但它被throw e;
再次抛出。如果删除它,则不会将堆栈跟踪写入控制台。
答案 1 :(得分:1)
您不再使用main
方法捕捉它(与您捕获并重新抛出它的其他方法不同)。然后它将被抛出main方法并由该线程的默认异常处理程序处理,从而打印出异常的完整堆栈跟踪。
在主方法中添加try-catch
,不重新抛出异常,以避免打印堆栈跟踪。
答案 2 :(得分:1)
这一行
throw e;
在boucle方法之外将你的异常抛到main中。您需要在main方法中捕获此异常。
答案 3 :(得分:1)
从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 !");
}
}
}