Я средний по Java, в настоящее время изучаю исключения Java.Я слежу за книгой, научи себя java, и есть программа, где она ищет соответствующий блок catch для обработки исключения.
public class CatchSearchExcercise {
public static void main(String[] args) {
try{
System.out.println("Before a");
a();
System.out.println("After a");
}
catch(Exception e){
System.out.println("main: " + e);
}
finally{
System.out.println("main: finally");
}
}
public static void a(){
try{
System.out.println("Before b");
b();
System.out.println("After b");
}
catch(ArithmeticException e){
System.out.println("a: " + e);
}
finally{
System.out.println("a: finally");
}
}
public static void b(){
try{
System.out.println("Before c");
c();
System.out.println("After c");
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("b: " + e);
}
finally{
System.out.println("b: finally");
}
}
public static void c(){
try{
System.out.println("Before d");
d();
System.out.println("After d");
}
catch(NumberFormatException e){
System.out.println("c: " + e);
}
finally{
System.out.println("c: finally");
}
}
public static void d(){
try{
Object obj = new Float("85.56");
System.out.println("Before cast");
Double dobj = (Double)obj;
System.out.println("After cast");
}
catch(ClassCastException e){
System.out.println("d: " + e);
int i = 1;
int j = 0;
System.out.println("Before division");
int k = i/j;
System.out.println("After division");
System.out.println(k);
}
finally{
System.out.println("d: finally");
}
}
}
Когда я запускаю программу, она показывает:
Before a
Before b
Before c
Before d
Before cast
d: java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.Double
Before division
d: finally
c: finally
b: finally
a: java.lang.ArithmeticException: / by zero
a: finally
After a
main: finally
Мой вопрос: почему не выполняется System.out.println("After b");
?Как следует за потоком программы, она должна отображаться, но она сразу переходит к улову?Может кто-нибудь объяснить это, пожалуйста, и заранее спасибо.