public static void main(String[] args) {
f2();
}
//自己捕捉异常
public static void f2() {
f1();
try {
InputStream is = new FileInputStream("e:\\2\\abc.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("f2...");
}
//自己捕捉异常
public static void f1() {
System.out.println("test throws");
try {
InputStream is = new FileInputStream("e:\\2\\abc.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("f1...");
}
我把System.out.println("f1...")和System.out.println("f2...")放在catch这行后面,程序在异常出现后会往下执行,这是意料之中的,但是把System.out.println("f1...")和System.out.println("f2...")放在try里面InputStream的下一行,就不会执行,这是JVM把InputStream和System.out.println当作共同体异常处了吗?所以JVM认为异常处往后没有代码了,直接结束程序?这样理解对吗?如果是对的,那为什么还有那么多人喜欢把代码都放在try里面呢?
可以当做共同体,但是不是说JVM认为异常处往后没代码了,try里边的相当于是一个整体,无论运行到哪里,只要出现异常,则try里边异常下的代码将不会执行直接执行catch,所以在try-catch下边的可以执行,但是try中异常下的不执行了。
开发中之所以使用try-catch是为了程序的稳健,避免因为一点错误导致整个服务器挂掉。还有你说的都喜欢把代码放在try里边,其实也并不是都喜欢把代码都放在try里边,而是一些需要用到try-catch的逻辑代码才会放进去。
你这是出异常把后面的语句跳过了
异常执行是这样的,在try里面遇到异常,停止执行try里面异常以后的代码,开始执行catch里面的代码块