本篇內(nèi)容主要講解“JAVA異常分類及處理的方法”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“JAVA異常分類及處理的方法”吧!
在澄江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),澄江網(wǎng)站建設(shè)費(fèi)用合理。一.JAVA 異常分類及處理
1. 概念
如果某個(gè)方法不能按照正常的途徑完成任務(wù),就可以通過(guò)另一種路徑退出方法。在這種情況下會(huì)拋出一個(gè)封裝了錯(cuò)誤信息的對(duì)象。此時(shí),這個(gè)方法會(huì)立刻退出同時(shí)不返回任何值。另外,調(diào)用這個(gè)方法的其他代碼也無(wú)法繼續(xù)執(zhí)行,異常處理機(jī)制會(huì)將代碼執(zhí)行交給異常處理器。
2. 異常分類
Throwable 是 Java 語(yǔ)言中所有錯(cuò)誤或異常的超類。下一層分為 Error 和 Exception
Error
1. Error 類是指 java 運(yùn)行時(shí)系統(tǒng)的內(nèi)部錯(cuò)誤和資源耗盡錯(cuò)誤。應(yīng)用程序不會(huì)拋出該類對(duì)象。如果出現(xiàn)了這樣的錯(cuò)誤,除了告知用戶,剩下的就是盡力使程序安全的終止。
Exception(RuntimeException、CheckedException)
2. Exception 又有兩個(gè)分支,一個(gè)是運(yùn)行時(shí)異常 RuntimeException ,一個(gè)是CheckedException。RuntimeException 如 : NullPointerException 、 ClassCastException ;一個(gè)是檢查異常CheckedException,如 I/O 錯(cuò)誤導(dǎo)致的 IOException、SQLException。 RuntimeException 是那些可能在 Java 虛擬機(jī)正常運(yùn)行期間拋出的異常的超類。 如果出現(xiàn) RuntimeException,那么一定是程序員的錯(cuò)誤.
檢查異常 CheckedException:一般是外部錯(cuò)誤,這種異常都發(fā)生在編譯階段,Java 編譯器會(huì)強(qiáng)制程序去捕獲此類異常,即會(huì)出現(xiàn)要求你把這段可能出現(xiàn)異常的程序進(jìn)行 try catch,該類異常一般包括幾個(gè)方面:
1. 試圖在文件尾部讀取數(shù)據(jù)
2. 試圖打開一個(gè)錯(cuò)誤格式的 URL
3. 試圖根據(jù)給定的字符串查找 class 對(duì)象,而這個(gè)字符串表示的類并不存在
3. 異常的處理方式
遇到問題不進(jìn)行具體處理,而是繼續(xù)拋給調(diào)用者 (throw,throws)
拋出異常有三種形式,一是 throw,一個(gè) throws,還有一種系統(tǒng)自動(dòng)拋異常。
try catch 捕獲異常針對(duì)性處理方式
4. Throw 和 throws 的區(qū)別:
位置不同
1. throws 用在函數(shù)上,后面跟的是異常類,可以跟多個(gè);而 throw 用在函數(shù)內(nèi),后面跟的是異常對(duì)象。
功能不同:
2. throws 用來(lái)聲明異常,讓調(diào)用者只知道該功能可能出現(xiàn)的問題,可以給出預(yù)先的處理方式;throw 拋出具體的問題對(duì)象,執(zhí)行到 throw,功能就已經(jīng)結(jié)束了,跳轉(zhuǎn)到調(diào)用者,并將具體的問題對(duì)象拋給調(diào)用者。也就是說(shuō) throw 語(yǔ)句獨(dú)立存在時(shí),下面不要定義其他語(yǔ)句,因?yàn)閳?zhí)行不到。
3. throws 表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常;throw 則是拋出了異常,執(zhí)行 throw 則一定拋出了某種異常對(duì)象。
4. 兩者都是消極處理異常的方式,只是拋出或者可能拋出異常,但是不會(huì)由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理。
二. JAVA 反射
1. 動(dòng)態(tài)語(yǔ)言
動(dòng)態(tài)語(yǔ)言,是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)可以引進(jìn),已有的函數(shù)可以被刪除等結(jié)構(gòu)上的變化。比如常見的 JavaScript 就是動(dòng)態(tài)語(yǔ)言,除此之外 Ruby,Python 等也屬于動(dòng)態(tài)語(yǔ)言,而 C、C++則不屬于動(dòng)態(tài)語(yǔ)言。從反射角度說(shuō) JAVA 屬于半動(dòng)態(tài)語(yǔ)言。
2. 反射機(jī)制概念 (運(yùn)行狀態(tài)中知道類所有的屬性和方法)
在 Java 中的反射機(jī)制是指在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類都能夠知道這個(gè)類所有的屬性和方法;并且對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能成為 Java 語(yǔ)言的反射機(jī)制。
3. 反射的應(yīng)用場(chǎng)合
編譯時(shí)類型和運(yùn)行時(shí)類型
在 Java 程序中許多對(duì)象在運(yùn)行是都會(huì)出現(xiàn)兩種類型:編譯時(shí)類型和運(yùn)行時(shí)類型。 編譯時(shí)的類型由聲明對(duì)象時(shí)實(shí)用的類型來(lái)決定,運(yùn)行時(shí)的類型由實(shí)際賦值給對(duì)象的類型決定 。如:
Person p=new Student();其中編譯時(shí)類型為 Person,運(yùn)行時(shí)類型為 Student。
的編譯時(shí)類型無(wú)法獲取具體方法
程序在運(yùn)行時(shí)還可能接收到外部傳入的對(duì)象,該對(duì)象的編譯時(shí)類型為 Object,但是程序有需要調(diào)用該對(duì)象的運(yùn)行時(shí)類型的方法。為了解決這些問題,程序需要在運(yùn)行時(shí)發(fā)現(xiàn)對(duì)象和類的真實(shí)信息。然而,如果編譯時(shí)根本無(wú)法預(yù)知該對(duì)象和類屬于哪些類,程序只能依靠運(yùn)行時(shí)信息來(lái)發(fā)現(xiàn)該對(duì)象和類的真實(shí)信息,此時(shí)就必須使用到反射了。
4. Java 反射 API
反射 API 用來(lái)生成 JVM 中的類、接口或則對(duì)象的信息。
1. Class 類:反射的核心類,可以獲取類的屬性,方法等信息。
2. Field 類:Java.lang.reflec 包中的類,表示類的成員變量,可以用來(lái)獲取和設(shè)置類之中的屬性值。
3. Method 類: Java.lang.reflec 包中的類,表示類的方法,它可以用來(lái)獲取類中的方法信息或者執(zhí)行方法。
4. Constructor 類: Java.lang.reflec 包中的類,表示類的構(gòu)造方法。
5. 反射使用步驟(獲取 Class 對(duì)象、調(diào)用對(duì)象方法)
1. 獲取想要操作的類的 Class 對(duì)象,他是反射的核心,通過(guò) Class 對(duì)象我們可以任意調(diào)用類的方法。
2. 調(diào)用 Class 類中的方法,既就是反射的使用階段。
3. 使用反射 API 來(lái)操作這些信息。
6. 獲取 Class 對(duì)象的 3 種方法
調(diào)用某個(gè)對(duì)象的 getClass()方法
Person p=new Person();
Class clazz=p.getClass();
調(diào)用某個(gè)類的 class 屬性來(lái)獲取該類對(duì)應(yīng)的 Class 對(duì)象
Class clazz=Person.class;
使用 Class 類中的 forName()靜態(tài)方法(最安全/性能最好)
Class clazz=Class.forName("類的全路徑"); (最常用)
當(dāng)我們獲得了想要操作的類的 Class 對(duì)象后,可以通過(guò) Class 類中的方法獲取并查看該類中的方法和屬性。
7. 創(chuàng)建對(duì)象的兩種方法
Class 對(duì)象的 newInstance()
1. 使用 Class 對(duì)象的 newInstance()方法來(lái)創(chuàng)建該 Class 對(duì)象對(duì)應(yīng)類的實(shí)例,但是這種方法要求該 Class 對(duì)象對(duì)應(yīng)的類有默認(rèn)的空構(gòu)造器。
調(diào)用 Constructor 對(duì)象的 newInstance()
2. 先使用 Class 對(duì)象獲取指定的 Constructor 對(duì)象,再調(diào)用 Constructor 對(duì)象的 newInstance()方法來(lái)創(chuàng)建 Class 對(duì)象對(duì)應(yīng)類的實(shí)例,通過(guò)這種方法可以選定構(gòu)造方法創(chuàng)建實(shí)例。
一.JAVA 異常分類及處理
1. 概念
如果某個(gè)方法不能按照正常的途徑完成任務(wù),就可以通過(guò)另一種路徑退出方法。在這種情況下會(huì)拋出一個(gè)封裝了錯(cuò)誤信息的對(duì)象。此時(shí),這個(gè)方法會(huì)立刻退出同時(shí)不返回任何值。另外,調(diào)用這個(gè)方法的其他代碼也無(wú)法繼續(xù)執(zhí)行,異常處理機(jī)制會(huì)將代碼執(zhí)行交給異常處理器。
2. 異常分類
Throwable 是 Java 語(yǔ)言中所有錯(cuò)誤或異常的超類。下一層分為 Error 和 Exception
Error
1. Error 類是指 java 運(yùn)行時(shí)系統(tǒng)的內(nèi)部錯(cuò)誤和資源耗盡錯(cuò)誤。應(yīng)用程序不會(huì)拋出該類對(duì)象。如果出現(xiàn)了這樣的錯(cuò)誤,除了告知用戶,剩下的就是盡力使程序安全的終止。
Exception(RuntimeException、CheckedException)
2. Exception 又有兩個(gè)分支,一個(gè)是運(yùn)行時(shí)異常 RuntimeException ,一個(gè)是CheckedException。RuntimeException 如 : NullPointerException 、 ClassCastException ;一個(gè)是檢查異常CheckedException,如 I/O 錯(cuò)誤導(dǎo)致的 IOException、SQLException。 RuntimeException 是那些可能在 Java 虛擬機(jī)正常運(yùn)行期間拋出的異常的超類。 如果出現(xiàn) RuntimeException,那么一定是程序員的錯(cuò)誤.
檢查異常 CheckedException:一般是外部錯(cuò)誤,這種異常都發(fā)生在編譯階段,Java 編譯器會(huì)強(qiáng)制程序去捕獲此類異常,即會(huì)出現(xiàn)要求你把這段可能出現(xiàn)異常的程序進(jìn)行 try catch,該類異常一般包括幾個(gè)方面:
1. 試圖在文件尾部讀取數(shù)據(jù)
2. 試圖打開一個(gè)錯(cuò)誤格式的 URL
3. 試圖根據(jù)給定的字符串查找 class 對(duì)象,而這個(gè)字符串表示的類并不存在
3. 異常的處理方式
遇到問題不進(jìn)行具體處理,而是繼續(xù)拋給調(diào)用者 (throw,throws)
拋出異常有三種形式,一是 throw,一個(gè) throws,還有一種系統(tǒng)自動(dòng)拋異常。
try catch 捕獲異常針對(duì)性處理方式
4. Throw 和 throws 的區(qū)別:
位置不同
1. throws 用在函數(shù)上,后面跟的是異常類,可以跟多個(gè);而 throw 用在函數(shù)內(nèi),后面跟的是異常對(duì)象。
功能不同:
2. throws 用來(lái)聲明異常,讓調(diào)用者只知道該功能可能出現(xiàn)的問題,可以給出預(yù)先的處理方式;throw 拋出具體的問題對(duì)象,執(zhí)行到 throw,功能就已經(jīng)結(jié)束了,跳轉(zhuǎn)到調(diào)用者,并將具體的問題對(duì)象拋給調(diào)用者。也就是說(shuō) throw 語(yǔ)句獨(dú)立存在時(shí),下面不要定義其他語(yǔ)句,因?yàn)閳?zhí)行不到。
3. throws 表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常;throw 則是拋出了異常,執(zhí)行 throw 則一定拋出了某種異常對(duì)象。
4. 兩者都是消極處理異常的方式,只是拋出或者可能拋出異常,但是不會(huì)由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理。
二. JAVA 反射
1. 動(dòng)態(tài)語(yǔ)言
動(dòng)態(tài)語(yǔ)言,是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)可以引進(jìn),已有的函數(shù)可以被刪除等結(jié)構(gòu)上的變化。比如常見的 JavaScript 就是動(dòng)態(tài)語(yǔ)言,除此之外 Ruby,Python 等也屬于動(dòng)態(tài)語(yǔ)言,而 C、C++則不屬于動(dòng)態(tài)語(yǔ)言。從反射角度說(shuō) JAVA 屬于半動(dòng)態(tài)語(yǔ)言。
2. 反射機(jī)制概念 (運(yùn)行狀態(tài)中知道類所有的屬性和方法)
在 Java 中的反射機(jī)制是指在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類都能夠知道這個(gè)類所有的屬性和方法;并且對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能成為 Java 語(yǔ)言的反射機(jī)制。
3. 反射的應(yīng)用場(chǎng)合
編譯時(shí)類型和運(yùn)行時(shí)類型
在 Java 程序中許多對(duì)象在運(yùn)行是都會(huì)出現(xiàn)兩種類型:編譯時(shí)類型和運(yùn)行時(shí)類型。 編譯時(shí)的類型由聲明對(duì)象時(shí)實(shí)用的類型來(lái)決定,運(yùn)行時(shí)的類型由實(shí)際賦值給對(duì)象的類型決定 。如:
Person p=new Student();其中編譯時(shí)類型為 Person,運(yùn)行時(shí)類型為 Student。
的編譯時(shí)類型無(wú)法獲取具體方法
程序在運(yùn)行時(shí)還可能接收到外部傳入的對(duì)象,該對(duì)象的編譯時(shí)類型為 Object,但是程序有需要調(diào)用該對(duì)象的運(yùn)行時(shí)類型的方法。為了解決這些問題,程序需要在運(yùn)行時(shí)發(fā)現(xiàn)對(duì)象和類的真實(shí)信息。然而,如果編譯時(shí)根本無(wú)法預(yù)知該對(duì)象和類屬于哪些類,程序只能依靠運(yùn)行時(shí)信息來(lái)發(fā)現(xiàn)該對(duì)象和類的真實(shí)信息,此時(shí)就必須使用到反射了。
4. Java 反射 API
反射 API 用來(lái)生成 JVM 中的類、接口或則對(duì)象的信息。
1. Class 類:反射的核心類,可以獲取類的屬性,方法等信息。
2. Field 類:Java.lang.reflec 包中的類,表示類的成員變量,可以用來(lái)獲取和設(shè)置類之中的屬性值。
3. Method 類: Java.lang.reflec 包中的類,表示類的方法,它可以用來(lái)獲取類中的方法信息或者執(zhí)行方法。
4. Constructor 類: Java.lang.reflec 包中的類,表示類的構(gòu)造方法。
5. 反射使用步驟(獲取 Class 對(duì)象、調(diào)用對(duì)象方法)
1. 獲取想要操作的類的 Class 對(duì)象,他是反射的核心,通過(guò) Class 對(duì)象我們可以任意調(diào)用類的方法。
2. 調(diào)用 Class 類中的方法,既就是反射的使用階段。
3. 使用反射 API 來(lái)操作這些信息。
6. 獲取 Class 對(duì)象的 3 種方法
調(diào)用某個(gè)對(duì)象的 getClass()方法
Person p=new Person();
Class clazz=p.getClass();
調(diào)用某個(gè)類的 class 屬性來(lái)獲取該類對(duì)應(yīng)的 Class 對(duì)象
Class clazz=Person.class;
使用 Class 類中的 forName()靜態(tài)方法(最安全/性能最好)
Class clazz=Class.forName("類的全路徑"); (最常用)
當(dāng)我們獲得了想要操作的類的 Class 對(duì)象后,可以通過(guò) Class 類中的方法獲取并查看該類中的方法和屬性。
7. 創(chuàng)建對(duì)象的兩種方法
Class 對(duì)象的 newInstance()
1. 使用 Class 對(duì)象的 newInstance()方法來(lái)創(chuàng)建該 Class 對(duì)象對(duì)應(yīng)類的實(shí)例,但是這種方法要求該 Class 對(duì)象對(duì)應(yīng)的類有默認(rèn)的空構(gòu)造器。
調(diào)用 Constructor 對(duì)象的 newInstance()
2. 先使用 Class 對(duì)象獲取指定的 Constructor 對(duì)象,再調(diào)用 Constructor 對(duì)象的 newInstance()方法來(lái)創(chuàng)建 Class 對(duì)象對(duì)應(yīng)類的實(shí)例,通過(guò)這種方法可以選定構(gòu)造方法創(chuàng)建實(shí)例。
到此,相信大家對(duì)“JAVA異常分類及處理的方法”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。