亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1557 | 回復(fù): 1
打印 上一主題 下一主題

Java編程中異常問題處理方式的區(qū)別和分析 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-03-19 17:21 |只看該作者 |倒序?yàn)g覽
Java編程中異常問題處理方式的區(qū)別和分析








Java代碼
  1. 1.  一、內(nèi)層方法拋出異常,外層方法捕捉并處理異常:   
  2. 2.  
  3. 3.  public void methodA (){   
  4. 4.  
  5. 5.  try{   
  6. 6.  
  7. 7.  // 調(diào)用methodB   
  8. 8.  
  9. 9.  methodB();   
  10. 10.  
  11. 11.  }   
  12. 12.  
  13. 13.  catch(ExceptionType et){   
  14. 14.  
  15. 15.  // 相應(yīng)處理措施   
  16. 16.  
  17. 17.  }   
  18. 18.  
  19. 19.  }   
  20. 20.  
  21. 21.  public void methodB throws ExceptionType{   
  22. 22.  
  23. 23.  if (condition is true)   
  24. 24.  
  25. 25.  {   
  26. 26.  
  27. 27.  // 相應(yīng)處理措施   
  28. 28.  
  29. 29.  }   
  30. 30.  
  31. 31.  else  
  32. 32.  
  33. 33.  {   
  34. 34.  
  35. 35.  throw new ExceptionType(argument);   
  36. 36.  
  37. 37.  }   
  38. 38.  
  39. 39.  }   
  40. 40.  
  41. 41.  在這個(gè)例子中,方法B的頭部中聲明了該方法會(huì)拋出一個(gè)類型為ExceptionType的異常,在方法體中使用throw子句拋出了一個(gè)異常,那么該異常被誰捕捉到呢,答案是方法A。因?yàn)楫惓伋龊,JVM會(huì)順著該方法的調(diào)用棧一層一層的往上找。因?yàn)榉椒ˋ中有一個(gè)catch(ExceptionType et),所以被拋出的異常會(huì)被捕捉到并處理。   
  42. 42.  
  43. 43.  二、方法中自己捕捉,處理異常:   
  44. 44.  
  45. 45.  public methodA() {   
  46. 46.  
  47. 47.  try  
  48. 48.  
  49. 49.  {   
  50. 50.  
  51. 51.  // 可能產(chǎn)生異常的語句   
  52. 52.  
  53. 53.  }   
  54. 54.  
  55. 55.  catch (ExceptionType et)   
  56. 56.  
  57. 57.  {   
  58. 58.  
  59. 59.  // 相應(yīng)的處理   
  60. 60.  
  61. 61.  }   
  62. 62.  
  63. 63.  }   
  64. 64.  
  65. 65.  在這個(gè)例子中,方法A使用了try-catch語句塊,那么意味著在方法中所產(chǎn)生的ExceptionType類型的異常都會(huì)被捕捉到并在方法內(nèi)處理。   
  66. 66.  
  67. 67.  三、內(nèi)層方法拋出一個(gè)異常,但本身又有try-catch  
  68. 68.  
  69. 69.  public methodB() throws ExceptionType{   
  70. 70.  
  71. 71.  try  
  72. 72.  
  73. 73.  {   
  74. 74.  
  75. 75.  // 可能產(chǎn)生異常的語句   
  76. 76.  
  77. 77.  }   
  78. 78.  
  79. 79.  catch (AnotherExceptionType aet)   
  80. 80.  
  81. 81.  {   
  82. 82.  
  83. 83.  // 相應(yīng)處理措施   
  84. 84.  
  85. 85.  }   
  86. 86.  
  87. 87.  }   
  88. 88.  
  89. 89.  在這個(gè)例子中有兩種異常處理情況,拋出異常和捕捉異常,如果在try語句塊中產(chǎn)生ExceptionType類型的異常的話,會(huì)被拋出。如果產(chǎn)生AnotherExceptionType類型的話,則不會(huì)被拋出,因?yàn)樵诜椒˙的頭部中并沒有聲明會(huì)拋出該異常。   
  90. 90.  
  91. 91.  四、內(nèi)層方法拋出一個(gè)異常,但本身有try-finally  
  92. 92.  
  93. 93.  public methodB() throws ExceptionType{   
  94. 94.  
  95. 95.  try  
  96. 96.  
  97. 97.  {   
  98. 98.  
  99. 99.  // 可能產(chǎn)生異常的語句   
  100. 100.  
  101. 101.  }   
  102. 102.  
  103. 103.  finally  
  104. 104.  
  105. 105.  {   
  106. 106.  
  107. 107.  // 一定要執(zhí)行的語句   
  108. 108.  
  109. 109.  }   
  110. 110.  
  111. 111.  }   
  112. 112.  
  113. 113.  這個(gè)例子與上一個(gè)例子很像,不同的是沒有catch,但增加了finally。它的意思如果方法B中try語句塊中如果產(chǎn)生了異常,則拋出由外層方法處理。然后方法B繼續(xù)執(zhí)行finally中的語句   
  114. 114.  
  115. 115.  下面列舉三種錯(cuò)誤的異常處理方法:   
  116. 116.  
  117. 117.  一、內(nèi)層方法拋出一個(gè)異常,但本身有捕捉這個(gè)異常   
  118. 118.  
  119. 119.  public methodB() throws ExceptionType{   
  120. 120.  
  121. 121.  try  
  122. 122.  
  123. 123.  {   
  124. 124.  
  125. 125.  // 可能產(chǎn)生異常的語句   
  126. 126.  
  127. 127.  }   
  128. 128.  
  129. 129.  catch (ExceptionType et)   
  130. 130.  
  131. 131.  {   
  132. 132.  
  133. 133.  // 相應(yīng)處理措施   
  134. 134.  
  135. 135.  }   
  136. 136.  
  137. 137.  }   
  138. 138.  
  139. 139.  在這個(gè)例子中,方法B在頭部聲明了會(huì)拋出一個(gè)類型為ExceptionType的異常,但在緊接下來的方法體又用了catch(ExceptionType et),如果產(chǎn)生了異常的話,會(huì)有什么結(jié)果呢?方法B拋出的異常馬上被自身的catch捕捉到,所以方法頭部的throws實(shí)際是沒有作用的。外層方法是接收不到方法B拋出的異常對(duì)象的。   
  140. 140.  
  141. 141.  二、在try中使用了return,在fianlly中又使用了return  
  142. 142.  
  143. 143.  public methodB() {   
  144. 144.  
  145. 145.  try  
  146. 146.  
  147. 147.  {   
  148. 148.  
  149. 149.  // 可能產(chǎn)生異常的語句   
  150. 150.  
  151. 151.  return SOMEVALUE;   
  152. 152.  
  153. 153.  }   
  154. 154.  
  155. 155.  catch ()   
  156. 156.  
  157. 157.  {   
  158. 158.  
  159. 159.  }   
  160. 160.  
  161. 161.  finally  
  162. 162.  
  163. 163.  {   
  164. 164.  
  165. 165.  return SOMEVALUE_2;   
  166. 166.  
  167. 167.  }   
  168. 168.  
  169. 169.  }   
  170. 170.  
  171. 171.  在這個(gè)例證中,我們可以看到在try中返回了SOMEVALUE,那么程序執(zhí)行到這里是否就結(jié)束了呢,其實(shí)不是的,因?yàn)閒inally中的語句是肯定會(huì)被執(zhí)行到的,所以最后返回的是SOMEVALUE_2;那么意味者即使程序沒有拋出異常,最后也得不到正確的結(jié)果。   
  172. 172.  
  173. 173.  三、把catch(Exception e)放在所有catch塊的最前面   
  174. 174.  
  175. 175.  public methodB(){   
  176. 176.  
  177. 177.  try  
  178. 178.  
  179. 179.  {   
  180. 180.  
  181. 181.  }   
  182. 182.  
  183. 183.  catch (Exception e)   
  184. 184.  
  185. 185.  {   
  186. 186.  
  187. 187.  ...   
  188. 188.  
  189. 189.  }   
  190. 190.  
  191. 191.  catch (SubException se)   
  192. 192.  
  193. 193.  {   
  194. 194.  
  195. 195.  ...   
  196. 196.  
  197. 197.  }   
  198. 198.  
  199. 199.  }   
  200. 200.  
  201. 201.  在這個(gè)例子中,catch(Exception e)被放在所有catch語句塊的最前面,因?yàn)镋xception所有Exception類型的父類,所以意味著所有在try中產(chǎn)生的異常都會(huì)被捕捉到。后面其他的catch都是沒有用的,所以一定要把catch(Exception e)放在最后面,如果前面所有的異常類型都不符合,至少保證還有一個(gè)可以處理它。   
  202. 202.  
  203. 203.  總結(jié):   
  204. 204.  
  205. 205.  A.如果能夠找到一個(gè)有意義的方法來捕獲異常,就立即引入這個(gè)方法   
  206. 206.  
  207. 207.  B.否則就應(yīng)該考慮做某些處理后傳遞或者再次拋出異常,也可以把異常轉(zhuǎn)換為另一種形式,然后拋出一個(gè)新的異常   
  208. 208.  
  209. 209.  C.另一個(gè)方法是,可以完全忽略這個(gè)異常,而把它加到方法的頭部的throws語句中,由調(diào)用這個(gè)方法的方法來處理它   
  210. 210.  
  211. 211.  D.通過捕獲一個(gè)公共的異常超類,可以在一個(gè)塊里面捕獲多個(gè)異常,但不能夠用一個(gè)空的catch語句 塊來完全制止一個(gè)異常。  
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-03-19 17:21 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP