Java异常捕获初学者
我正在学习java的try-and-catch异常,我遇到了一些问题。事实上,我已经设置了算术异常catch&try,但在某些情况下,异常不是catch My Recursion.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) {
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”在做什么。。。你能解释一下这条线在干什么吗?