日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[19/03/21-星期四] 异常(Exception) (一)

發(fā)布時(shí)間:2023/12/2 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [19/03/21-星期四] 异常(Exception) (一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、引言

? ? ? ? ?在實(shí)際工作中,我們遇到的情況不可能是非常完美的。比如:你寫的某個(gè)模塊,用戶輸入不一定符合你的要求;你的程序要打開某個(gè)文件,

這個(gè)文件可能不存在或者文件格式不對(duì) ,你要讀取數(shù)據(jù)庫(kù)的數(shù)據(jù),數(shù)據(jù)可能是空的;我們的程序在運(yùn)行,但是內(nèi)存或硬盤可能滿了等等。

軟件程序在運(yùn)行過(guò)程中,非常可能遇到剛剛提到的這些問(wèn)題,我們稱之為異常,英文是:Exception,意思是例外。遇到這些例外情況,或者叫異常,

我們?cè)趺醋寣懙某绦蜃龀龊侠淼奶幚?#xff0c;安全的退出,而不至于程序崩潰呢?

? ? ? 異常指程序運(yùn)行過(guò)程中出現(xiàn)的非正?,F(xiàn)象,例如用戶輸入錯(cuò)誤、除數(shù)為零、需要處理的文件不存在、數(shù)組下標(biāo)越界等。

? ? ??在Java的異常處理機(jī)制中,引進(jìn)了很多用來(lái)描述和處理異常的類,稱為異常類。異常類定義中包含了該類異常的信息和對(duì)異常進(jìn)行處理的方法。

? ? ??所謂異常處理,就是指程序在出現(xiàn)問(wèn)題時(shí)依然可以正確的執(zhí)行完。

? ? ? Java是采用面向?qū)ο蟮姆绞絹?lái)處理異常的。處理過(guò)程:

? ? ? 1.?拋出異常:在執(zhí)行一個(gè)方法時(shí),如果發(fā)生異常,則這個(gè)方法生成代表該異常的一個(gè)對(duì)象,停止當(dāng)前執(zhí)行路徑,并把異常對(duì)象提交給JRE。

? ? ??2. 捕獲異常:JRE得到該異常后,尋找相應(yīng)的代碼來(lái)處理該異常。JRE在方法的調(diào)用棧中查找,從生成異常的方法開始回溯,直到找到相應(yīng)的異常處理代碼為止。

【示例】 除數(shù)不能為0,會(huì)拋出算術(shù)異常,把程序停掉

二、分類(Error :不需要自己管,發(fā)動(dòng)機(jī)異常;Exception:小問(wèn)題分運(yùn)行異常和檢查異常)

?

【區(qū)別】

? ? ? Error是程序無(wú)法處理的錯(cuò)誤,表示運(yùn)行應(yīng)用程序中較嚴(yán)重問(wèn)題。大多數(shù)錯(cuò)誤與代碼編寫者執(zhí)行的操作無(wú)關(guān),而表示代碼運(yùn)行時(shí) JVM(Java 虛擬機(jī))出現(xiàn)的問(wèn)題。例如,Java虛擬機(jī)

運(yùn)行錯(cuò)誤(Virtual MachineError),當(dāng) JVM 不再有繼續(xù)執(zhí)行操作所需的內(nèi)存資源時(shí),將出現(xiàn) OutOfMemoryError。這些異常發(fā)生時(shí),Java虛擬機(jī)(JVM)一般會(huì)選擇線程終止。Error表明

系統(tǒng)JVM已經(jīng)處于不可恢復(fù)的崩潰狀態(tài)中。我們不需要管它。

Error與Exception的區(qū)別

? ? ? 1.? 我開著車走在路上,一頭豬沖在路中間,我剎車。這叫一個(gè)異常。

? ? ? 2. ?我開著車在路上,發(fā)動(dòng)機(jī)壞了,我停車,這叫錯(cuò)誤。系統(tǒng)處于不可恢復(fù)的崩潰狀態(tài)。發(fā)動(dòng)機(jī)什么時(shí)候壞?我們普通司機(jī)能管嗎?不能。發(fā)動(dòng)機(jī)什么時(shí)候壞是汽車廠發(fā)動(dòng)機(jī)制造商的事。

三、Exception(重點(diǎn)關(guān)注)

? ? ? Exception是程序本身能夠處理的異常,如:空指針異常(NullPointerException)、數(shù)組下標(biāo)越界異常(ArrayIndexOutOfBoundsException)、類型轉(zhuǎn)換異常(ClassCastException)、

算術(shù)異常(ArithmeticException)等。?Exception類是所有異常類的父類,其子類對(duì)應(yīng)了各種各樣可能出現(xiàn)的異常事件。 通常Java的異??煞譃?#xff1a;

? ? ? 1. CheckedException 已檢查異常

? ? ? ? ? ?所有不是RuntimeException的異常,統(tǒng)稱為Checked Exception,又被稱為“已檢查異?!?#xff0c;如IOException、SQLException等以及用戶自定義的Exception異常。 這類異常在編

譯時(shí)就必須做出處理,否則無(wú)法通過(guò)編譯。

??

? ? ? ?2、 RuntimeException 運(yùn)行時(shí)異常??

? ? ? ? ? ? ?這類異常通常是由編程錯(cuò)誤導(dǎo)致的,所以在編寫程序時(shí),并不要求必須使用異常處理機(jī)制來(lái)處理這類異常,經(jīng)常需要通過(guò)增加“邏輯處理來(lái)避免這些異?!薄?/p>

? ? ? ? ?(1)??ArithmeticException 算術(shù)異常? ?如:試圖除以0?

? ? ? ? ?(2)??NullPointerException 空指針異常? ? ?如:當(dāng)程序訪問(wèn)一個(gè)空對(duì)象的成員變量或方法,或者訪問(wèn)一個(gè)空數(shù)組的成員時(shí)會(huì)發(fā)生空指針異常? ?解決方法:通常是增加非空判斷

? ? ? ? ?(3)??ClassCastException? 類型轉(zhuǎn)換異常

? ? ? ? ?(4)? ArrayIndexOutOfBoundsException? 數(shù)組下標(biāo)越界異常? 如:當(dāng)程序訪問(wèn)一個(gè)數(shù)組的某個(gè)元素時(shí),如果這個(gè)元素的索引超出了0~數(shù)組長(zhǎng)度-1這個(gè)范圍

? ? ? ? ?(5)?NumberFormatException 數(shù)字格式異常??如:在使用包裝類將字符串轉(zhuǎn)換成基本數(shù)據(jù)類型時(shí),如果字符串的格式不正確,則會(huì)出現(xiàn)數(shù)字格式異常? 方法:引入正則表達(dá)式

?鏈接:http://www.sxt.cn/Java_jQuery_in_action/six-runtimeexception.html

【代碼示例】

1 /*測(cè)試異常類 2 * 3 * 4 */ 5 package cn.sxt.exception; 6 7 import java.util.regex.Matcher; 8 import java.util.regex.Pattern; 9 10 public class Test_0321_ExceptionClass { 11 public static void main(String[] args) { 12 int a=0,b=1; 13 if(a!=0){ //加個(gè)判斷,避免算術(shù)異常(ArithmeticException) 14 System.out.println(b/a); 15 } 16 17 String str=null; 18 if (str!=null) {//加個(gè)判斷,避免空指針異常(NullPointerException) 19 System.out.println(str.length()); 20 } 21 22 23 Animal d=new Dog();//類型轉(zhuǎn)換異常(ClassCastException)。 24 if (d instanceof Cat) {//instance:例子 instanceof 判斷其左邊對(duì)象是否為其右邊類的實(shí)例,返回判斷值Boolean 25 Cat c=(Cat)d; //如果不加外邊的判斷會(huì)拋出異常,因?yàn)閐是dog類不能強(qiáng)制轉(zhuǎn)換成Cat類。含義如果d是貓類則轉(zhuǎn)換,否則不轉(zhuǎn) 26 } 27 28 29 int[] arr = new int[5];//數(shù)組下標(biāo)越界異常(ArrayIndexOutOfBoundsException) 30 //System.out.println(arr[5]); 越界arr下標(biāo)最多為4 31 int a1 = 5; 32 if (a1 < arr.length) {//解決方案 33 System.out.println(arr[a1]); 34 } 35 36 String str3 = "1234abcf";//數(shù)字格式異常(NumberFormatException)。 在使用包裝類將字符串轉(zhuǎn)換成基本數(shù)據(jù)類型時(shí),如果字符串的格式不正確 37 // System.out.println(Integer.parseInt(str3)); 會(huì)報(bào)異常 38 39 Pattern p = Pattern.compile("^\\d+$");//解決方案:正則匹配 40 Matcher m = p.matcher(str3); 41 if (m.matches()) { // 如果str匹配代表數(shù)字的正則表達(dá)式,才會(huì)轉(zhuǎn)換 42 System.out.println(Integer.parseInt(str3)); 43 } 44 45 46 } 47 48 } 49 class Animal{ 50 51 } 52 class Dog extends Animal{ 53 54 } 55 class Cat extends Animal{ 56 57 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/ID-qingxin/p/10579223.html

總結(jié)

以上是生活随笔為你收集整理的[19/03/21-星期四] 异常(Exception) (一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。