我的漫漫程序之旅

          專注于JavaWeb開發(fā)
          隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
          數(shù)據(jù)加載中……

          throws和throw的區(qū)別

          這兩者雖然看起來只有一個(gè)s的區(qū)別,但是作用完全不一樣。
                                                                                             
          /////java處理異常方式///////////////////////////////

               在java代碼中如果發(fā)生異常的話,jvm會(huì)拋出異常對(duì)象,導(dǎo)致程序代碼中斷,這個(gè)時(shí)候jvm在做的操作就是:創(chuàng)建異常對(duì)象,然后拋出,比如:

           

          int i= 1; 
          int j = 0
          ; 
          int res = 0
          ; 
          res 
          = i/j;//除0錯(cuò)誤 

          System.out.println(res); 

           

          這5句代碼運(yùn)行到第四句會(huì)中斷,因?yàn)閖vm拋出了異常
           
          ////throw的作用/////////////////////////////////////////
          手動(dòng)拋出異常

          但是有時(shí)候有些錯(cuò)誤在jvm看來不是錯(cuò)誤,比如說

          int age = 0
          age 
          = -100

          System.out.println(age); 

           

              很正常的整形變量賦值,但是在我們眼中看來就不正常,誰的年齡會(huì)是負(fù)的呢。 所以我們需要自己手動(dòng)引發(fā)異常,這就是throw的作用。

          int age = 0
          age 
          = -100

          if(age<0


             Exception e 
          = new Exception("throw exception");//創(chuàng)建異常對(duì)象 

             throw e;//拋出異常 
          }
           
          System.out.println(age); 

           

          ////throws的作用///////////////////////////////////
          聲明方法可能回避的異常

             有異常被拋出了,就要做處理,所以java中有try-catch。可是有時(shí)候一個(gè)方法中產(chǎn)生了異常,但是不知道該怎么處理它,那么就放著不管,當(dāng)有異常拋出時(shí)會(huì)中斷該方法,而異常被拋到這個(gè)方法的調(diào)用者那里。這個(gè)有點(diǎn)像下屬處理不了的問題就交到上司手里一樣,這種情況稱為回避異常。

             但是這使得調(diào)用這個(gè)方法就有了危險(xiǎn),因?yàn)檎l也不知道這個(gè)方法什么時(shí)候會(huì)丟一個(gè)什么樣的異常給調(diào)用者,所以在定義方法時(shí),就需要在方法頭部分使用throws來聲明這個(gè)方法可能回避的異常。

          void fun()throws IOException,SQLException 

           
          }
           

           

          這表示 fun方法可能會(huì)丟兩個(gè)異常出來,那么在調(diào)用fun的時(shí)候就會(huì)做好準(zhǔn)備,比如可以這樣

          try
             fun(); 
          }
          catch(IOException e) { }

          catch(SQLException e) { } 

           

           



          posted on 2008-01-19 18:47 々上善若水々 閱讀(2483) 評(píng)論(5)  編輯  收藏 所屬分類: J2SE

          評(píng)論

          # re: throws和throw的區(qū)別  回復(fù)  更多評(píng)論   

          恩``` 我覺得寫的挺好的
          嘿嘿 謝謝你哦 高手

          # re: throws和throw的區(qū)別[未登錄]  回復(fù)  更多評(píng)論   

          寫得太好了哈,簡(jiǎn)潔易懂,不像其他的答案
          2008-05-22 18:06 | 哈哈

          # re: throws和throw的區(qū)別  回復(fù)  更多評(píng)論   

          但是異常做的事就是一直往外拋。。實(shí)際上沒起多大作用。。
          2008-05-23 16:06 | 菜菜

          # re: throws和throw的區(qū)別  回復(fù)  更多評(píng)論   

          樓上此言差矣!
          對(duì)一些源碼的深層理解絕對(duì)不能含糊!
          2008-05-23 16:27 | 々上善若水々

          # re: throws和throw的區(qū)別  回復(fù)  更多評(píng)論   

          寫得太好了哈,簡(jiǎn)潔易懂.理解深。
          2009-06-03 17:45 | cht
          主站蜘蛛池模板: 黄浦区| 清新县| 景德镇市| 清水河县| 鄂托克旗| 普兰店市| 孝昌县| 静安区| 精河县| 高州市| 陈巴尔虎旗| 天峻县| 古交市| 莱阳市| 烟台市| 常德市| 鹤壁市| 桂林市| 云浮市| 宁海县| 景德镇市| 台州市| 本溪| 新晃| 南靖县| 马鞍山市| 阳高县| 合江县| 北辰区| 北川| 吴堡县| 库伦旗| 高台县| 德化县| 桂阳县| 榆林市| 阿鲁科尔沁旗| 洛隆县| 行唐县| 安达市| 滁州市|