try catch 對於循環體,應放在外面仍是裏面?

當咱們寫程序時遇到可能出現異常的地方咱們習慣用try catch增長程序的健壯性,可是try  catch的位置呢,有時候咱們也是隨便放一個地方,只要程序不報錯就行,但是若是碰到循環的狀況呢?好比這個:java

public class Demo {
    
        public static void func0(){
            for(int i=0;i<1000;i++){
                try {
                    System.out.println(1/0);
                } catch (Exception e) {
                    System.out.println("i am exception");
                }
            }
        }
 
}
給個人直觀感受是我必須把try catch移到外面:
public class Demo {
    
        public static void func0(){
            try {
                for(int i=0;i<1000;i++){
                        System.out.println(1/0);
                }
            } catch (Exception e) {
                System.out.println("i am exception");
            }
        }
 
}
由於我感受try  catch放裏面貌似聲明瞭1000遍,性能差異可想而知,事實果然如此嗎?下面咱們就藉助java提供的反彙編工具
javap -c Xxx.class xxx.txt從指令級別來一探究竟!工具

1.javac Demo.java性能

2.javap -c Demo.class > xxx.txtspa

3.打開xxx.txtio

若是try catch放外面的話生成的指令信息爲:class

放裏面生成的指令信息爲:exception

能夠看到try catch放循環裏面的話,指令級別上並非多了1000多個try  catch相關的指令,惟一的區別就是i<1000和syso(1/0)之間隔了try catch的指令,須要用goto跳轉一下而已,而這些區別能夠忽略不計,因此當不發生異常的時候try  catch放循環內部和循環外部無所謂了,只有當發生異常時看你則麼處理異常了,這就和本文討論的無關了
 循環

結論:程序

當循環內的代碼出現異常,須要結束循環時,將try代碼塊放在循環外;異常

當循環內的代碼出現異常,須要繼續執行循環時,將try代碼塊放在循環內。

相關文章
相關標籤/搜索