public class Confusion {
Confusion(int i) {
int j = 5;
int[] a = new int[2];
try {
a[0] = 4;
if (i <= 0) {
int k = j / i;
} else {
System.out.println(j / i);
}
} catch (ArithmeticException sa) {
System.out.println("Wrong value" + sa);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("out of range massage in Class");
} finally {
System.out.println("Executing finally block in code");
}
}
void k() {
int[] a = new int[2];
{
try {
a[4] = 4;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("out of range");
}
}
}
}
public class Nested {
public static void main(String[] args) {
Confusion c = new Confusion(2);
Confusion c1 = new Confusion(0);
c1.k();
c.k();
}
}
输出:
-2
Executing finally block in code
Wrong valuejava.lang.ArithmeticException: / by zero
Executing finally block in code
out of range
out of range
每当我执行下面代码中写的finally{}
块时,它都会被执行两次。不知道为什么会这样。我想只运行一次finally块。
有没有办法在单个方法中抛出多个异常?
答案 0 :(得分:3)
因为你有两个Confusion
个对象。因此,构造函数将被执行两次。
confusion c=new confusion(2);
confusion c1=new confusion(0);
答案 1 :(得分:2)
confusion c=new confusion(2);
confusion c1=new confusion(0);
这就是为什么你从最后得到2个输出。
答案 2 :(得分:1)
这是因为您要创建两个对象c1
和c
答案 3 :(得分:1)
当try块退出时,finally块始终执行。
http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html
因此无论如何都会执行finally块。当你创建两个对象时,它会调用构造函数两次,最后也会执行两次。
答案 4 :(得分:1)
您正在尝试两次代码。
confusion c=new confusion(2);
confusion c1=new confusion(0);
这意味着每次调用try时最终都会发生,它会打印...
Executing finally block in code
如果你再次打电话,
confusion c1=new confusion(3);
最后第三次打印出内容。
答案 5 :(得分:1)
您正在使用以下代码创建两个对象。这就是为什么finally块被执行两次。
confusion c=new confusion(2);
confusion c1=new confusion(0);
请试试这个
public static void main(String[] args){
confusion c=new confusion(2);
confusion c1=new confusion(0);
confusion c1=new confusion(10);
confusion c1=new confusion(5);
}
现在终于阻止了4次。
Java中的构造函数是在创建对象时执行的代码块。
请阅读构造函数参考http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
答案 6 :(得分:0)
因为您正在创建两个Confusion对象。因此,finally块将被执行两次。
confusion c=new confusion(2);
confusion c1=new confusion(0);
如果你想最后只执行一次。试试这段代码
public class Confusion {
Confusion(int i) {
int j = 5;
int[] a = new int[2];
a[0] = 4;
if (i <= 0) {
int k = j / i;
} else {
System.out.println(j / i);
}
}
void k() {
int[] a = new int[2];
a[4] = 4;
}
}
public class Nested {
public static void main(String[] args) {
try{
Confusion c = new Confusion(2);
Confusion c1 = new Confusion(0);
c1.k();
c.k();
}catch (ArithmeticException sa) {
System.out.println("Wrong value" + sa);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("out of range massage in Class");
} finally {
System.out.println("Executing finally block in code");
}
}
}