你所说的一个try-catch只能捕获一个错误是对的,不论后面跟着多少个catch都一样, try-catch语句是这样执行的:首先逐个从上到下执行try块中的java语句,如果没有发生异常,则执行完try块后跳过catch块(不论有多少个catch都跳过)。 如果try块中某条语句存在异常,则跳到相对应的catch块中(发生什么异常,就跳到什么catch里,如果没有准确对应的,就跳到父类异常的catch中), 执行完该catch块中的语句,然后跳过其它的catch块,接着往下走,明白了么?总之,try-catch只能处理一个异常,这就是为什么后面通常跟finally, 要有一个统一的出口。 如果还不明白,你就在环境下用一段代码试试就好了,不要着急,随便找两个异常一试就OK! 比如: try{ int b=25/0; Thread.sleep(2000); } catch(ArithmeticException e){ System.out.println("除零错误!"); } catch(InterruptedException e){ System.out.println("延时错误!"); } 上面这个例子就会在屏幕上显示"除零错误!"四个字,因为众所周知,任何数字不能除0,所以25/0是错的,它抛出ArithmeticException(数学异常), 则直接跳进第一个catch块内,而没有进入第二个块,尽管Thread.sleep(2000);也有异常。基本同意楼上的观点,但try-catch捕获的是异常Exception而不是错误Error,Exception与Error的区别: Exceptions 1.可以是 可被控制(checked) 或 不可控制的(unchecked) 2.表示一个由程序员导致的错误 3.应该在应用程序级被处理 Errors 1.总是 不可控制的(unchecked) 2.经常用来用于表示系统错误或低层资源的错误 3.如何可能的话,应该在系统级被捕捉 需要补充的是: 有N个catch时,应当按从子类到基类的顺序捕捉, 无论是否有异常,finally块的代码都会执行。
JAVA学习——try&catch
最新推荐文章于 2023-06-05 10:13:42 发布