相信作為程序員的我們?cè)趯?duì)程序進(jìn)行編譯過程中經(jīng)常會(huì)遇到錯(cuò)誤,或者在運(yùn)行過程中出現(xiàn)錯(cuò)誤,在這里主要跟大家談?wù)劷?jīng)常遇到的一些異常與錯(cuò)誤,以及解決辦法。
萊蕪網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),萊蕪網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為萊蕪超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的萊蕪做網(wǎng)站的公司定做!
異常是指程序在編譯或運(yùn)行過程出現(xiàn)的錯(cuò)誤。
在java.lang包中Throwable包含了所有的異常。
Error (錯(cuò)誤) 和Exception(異常)
(1)Error(錯(cuò)誤)
一旦發(fā)生無(wú)法修復(fù),但可以避免發(fā)生。
常見錯(cuò)誤類:
IOError:I/O錯(cuò)誤,當(dāng)發(fā)生嚴(yán)重的I/O錯(cuò)誤時(shí),拋出此錯(cuò)誤。
VirtualMachineError?:虛擬機(jī)錯(cuò)誤,當(dāng) Java 虛擬機(jī)崩潰或用盡了它繼續(xù)操作所需的資源時(shí),拋出該錯(cuò)誤。
StackOverflowError:棧內(nèi)存滿了,當(dāng)應(yīng)用程序遞歸太深而發(fā)生堆棧溢出時(shí),拋出該錯(cuò)誤。
OutofMemoryError:堆內(nèi)存滿了,因?yàn)閮?nèi)存溢出或沒有可用的內(nèi)存提供給垃圾回收器時(shí),Java 虛擬機(jī)無(wú)法分配一個(gè)對(duì)象,這時(shí)拋出該異常。
以上是一些常見的錯(cuò)誤,在Error類中還有一些別的錯(cuò)誤(參照文件Java.lang.Throwable.Error).
(2)Exception(異常)
一旦發(fā)生,可以捕獲并處理,不會(huì)導(dǎo)致程序終止,有時(shí)可以避免有時(shí)無(wú)法避免。
異常的分類:
1.編譯時(shí)異常(需要強(qiáng)制處理)?????? 2.運(yùn)行時(shí)異常(不需要強(qiáng)制處理)
常見的異常有:
IOException:輸入輸出流異常
FileNotFoundException:文件找不到的異常
ClassNotFoundException:類找不到的異常
DataFormatException:數(shù)據(jù)格式化異常
NoSuchFieldException:沒有匹配的屬性異常
NoSuchMethodException:沒有匹配的方法異常
SQLException:數(shù)據(jù)庫(kù)操作異常
TimeoutException:執(zhí)行超時(shí)異常
常見的運(yùn)行時(shí)異常:
RuntimeException:運(yùn)行時(shí)異常
NullPointerException:空指針異常
ArrayIndexOutofBoundsException:數(shù)組越界異
ClassCastException:類型轉(zhuǎn)換異常
IllegalArgumentException:非法的參數(shù)異常
InputMismatchException:輸入不匹配
以上是常見的一些異常,另外還有別的異常,參見文件:Java.lang.Throwable.Exception
既然我們常常會(huì)遇到一些異常,那我們?nèi)绾蝸硖幚磉@些異常就是一個(gè)急需解決的事情。
(1) 如何處理編譯時(shí)異常?
方法一:將需要處理的代碼塊放在一個(gè)try...catch...中
try{
//需要處理異常的代碼
}catch(XXXException ef){
ef.printStackTrace();
}
我們方法一就是要將我們不確定的代碼放入try......catch中,先進(jìn)行try一下,如果沒有異常,則不會(huì)觸發(fā)catch,沒有輸出,一旦出現(xiàn)異常,那么catch就會(huì)工作,在catch中捕獲異常信息,根據(jù)異常信息進(jìn)行補(bǔ)救措施。
如以下代碼:
方法二:在出現(xiàn)異常的方法上直接向上拋出異常,throws
void ff() throws XXXException{
}
將出現(xiàn)的異常的代碼中,放入如上的方法中,就會(huì)將異常拋給該方法的上一級(jí),在主函數(shù)上繼續(xù)向上拋,最終拋給JVM java虛擬機(jī),讓JVM來解決該問題。
如代碼:
注意:在catch和throws的時(shí)候如果不確定是什么異常,就直接寫一個(gè)Exception.
(2) 如何處理運(yùn)行時(shí)異常?
1.一般情況下,運(yùn)行時(shí)異常是不用處理的?
2.在某些情況下,如果對(duì)發(fā)生異常的結(jié)果進(jìn)行處理,也可以對(duì)運(yùn)行時(shí)異常進(jìn)行try...catch...
以上就是一些我們處理編譯時(shí)異常和運(yùn)行時(shí)異常的方法。
在程序出現(xiàn)異常時(shí),有時(shí)候我們可以自定義異常,以便我們能夠發(fā)現(xiàn)是什么異常。
那么如何自定義異常??
1.當(dāng)運(yùn)行時(shí),程序出現(xiàn)意外,可以拋出異常對(duì)象來結(jié)束程序
如:
//拋出運(yùn)行時(shí)異常對(duì)象
RuntimeException ef = new RuntimeException("下標(biāo)越界!index:"+index+" ,size:"+size());
throw ef;
2.對(duì)于編譯時(shí)異常,同樣可以拋出異常對(duì)象
但在方法定義時(shí)候必須加上throws
如:
public void test(int t) throws Exception{
if (t 0 || t 100) {
Exception ef = new Exception("數(shù)據(jù)錯(cuò)誤");
throw ef;
}
}
例如:
運(yùn)行結(jié)果:
從結(jié)果可以看出,我們?cè)谳斎霐?shù)據(jù)的時(shí)候出現(xiàn)錯(cuò)誤,這樣通過自定義異常能夠讓我們更直接快速的找到運(yùn)行或編譯時(shí)的異常。
在上述中我們分別提到了三種throw,分別是Throwable,Throws以及throw,那么到底三者有什么區(qū)別?
Throwable:是指在在Java.lang包中的一個(gè)類,其包含了所有的異常和錯(cuò)誤,其中類Error和Exception 是它
的子類。
Thows:是指在解決編譯時(shí)異常,將方法中異常拋給上一級(jí),在方法后面要加Throw Exception來進(jìn)行拋。
throw:是指在自定義異常時(shí),如果方法出現(xiàn)異常,那么將作為引用方法的對(duì)象拋出。即拋出異常。
Java 中最常見的 5 個(gè)錯(cuò)誤:
1、Null 的過度使用
避免過度使用 null 值是一個(gè)最佳實(shí)踐。例如,更好的做法是讓方法返回空的 array 或者 collection 而不是 null 值,因?yàn)檫@樣可以防止程序拋出 NullPointerException。
2、忽視異常
我們經(jīng)常對(duì)異常置之不理。然而,針對(duì)初學(xué)者和有經(jīng)驗(yàn)的 Java?程序員,最佳實(shí)踐仍是處理它們。異常拋出通常是帶有目的性的,因此在大多數(shù)情況下需要記錄引起異常的事件。別小看這件事,如果必要的話,你可以重新拋出它,在一個(gè)對(duì)話框中將錯(cuò)誤信息展示給用戶或者將錯(cuò)誤信息記錄在日志中。至少,為了讓其它開發(fā)者知曉前因后果,你應(yīng)該解釋為什么沒有處理這個(gè)異常。
3、并發(fā)修改異常
這種異常發(fā)生在集合對(duì)象被修改,同時(shí)又沒有使用 iterator 對(duì)象提供的方法去更新集合中的內(nèi)容。
4、違約
有時(shí)候,為了更好地協(xié)作,由標(biāo)準(zhǔn)庫(kù)或者第三方提供的代碼必須遵守共同的依賴準(zhǔn)則。例如,必須遵守?hashCode和equals的共同約定,從而保證 Java 集合框架中的一系列集合類和其它使用hashCode和equals方法的類能夠正常工作。不遵守約定并不會(huì)產(chǎn)生 exception 或者破壞代碼編譯之類的錯(cuò)誤;它很陰險(xiǎn),因?yàn)樗S時(shí)可能在毫無(wú)危險(xiǎn)提示的情況下更改應(yīng)用程序行為。
5、使用原始類型而不是參數(shù)化的
根據(jù) Java 文檔描述:原始類型要么是非參數(shù)化的,要么是類 R 的(同時(shí)也是非繼承 R 父類或者父接口的)非靜態(tài)成員。在 Java 泛型被引入之前,并沒有原始類型的替代類型。Java 從1.5版本開始支持泛型編程,毫無(wú)疑問這是一個(gè)重要的功能提升。然而,由于向后兼容的原因,這里存在一個(gè)陷阱可能會(huì)破壞整個(gè)類型系統(tǒng)。
HTTP
1xx - 信息提示
這些狀態(tài)代碼表示臨時(shí)的響應(yīng)??蛻舳嗽谑盏匠R?guī)響應(yīng)之前,應(yīng)準(zhǔn)備接收一個(gè)或多個(gè) 1xx 響應(yīng)。 ? 100 - 繼續(xù)。
? 101 - 切換協(xié)議。
2xx - 成功
這類狀態(tài)代碼表明服務(wù)器成功地接受了客戶端請(qǐng)求。
? 200 - 確定??蛻舳苏?qǐng)求已成功。
? 201 - 已創(chuàng)建。
? 202 - 已接受。
? 203 - 非權(quán)威性信息。
? 204 - 無(wú)內(nèi)容。
? 205 - 重置內(nèi)容。
? 206 - 部分內(nèi)容。
3xx - 重定向
客戶端瀏覽器必須采取更多操作來實(shí)現(xiàn)請(qǐng)求。例如,瀏覽器可能不得不請(qǐng)求服務(wù)器上的不同的頁(yè)面,或通過代理服務(wù)器重復(fù)該請(qǐng)求。 ? 302 - 對(duì)象已移動(dòng)。
? 304 - 未修改。
? 307 - 臨時(shí)重定向。
4xx - 客戶端錯(cuò)誤
發(fā)生錯(cuò)誤,客戶端似乎有問題。例如,客戶端請(qǐng)求不存在的頁(yè)面,客戶端未提供有效的身份驗(yàn)證信息。 ? 400 - 錯(cuò)誤的請(qǐng)求。
? 401 - 訪問被拒絕。IIS 定義了許多不同的 401 錯(cuò)誤,它們指明更為具體的錯(cuò)誤原因。這些具體的錯(cuò)誤代碼在瀏覽器中顯示,但不在 IIS 日志中顯示: ? 401.1 - 登錄失敗。
? 401.2 - 服務(wù)器配置導(dǎo)致登錄失敗。
? 401.3 - 由于 ACL 對(duì)資源的限制而未獲得授權(quán)。
? 401.4 - 篩選器授權(quán)失敗。
? 401.5 - ISAPI/CGI 應(yīng)用程序授權(quán)失敗。
? 401.7 – 訪問被 Web 服務(wù)器上的 URL 授權(quán)策略拒絕。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。
? 403 - 禁止訪問:IIS 定義了許多不同的 403 錯(cuò)誤,它們指明更為具體的錯(cuò)誤原因: ? 403.1 - 執(zhí)行訪問被禁止。
? 403.2 - 讀訪問被禁止。
? 403.3 - 寫訪問被禁止。
? 403.4 - 要求 SSL。
? 403.5 - 要求 SSL 128。
? 403.6 - IP 地址被拒絕。
? 403.7 - 要求客戶端證書。
? 403.8 - 站點(diǎn)訪問被拒絕。
? 403.9 - 用戶數(shù)過多。
? 403.10 - 配置無(wú)效。
? 403.11 - 密碼更改。
? 403.12 - 拒絕訪問映射表。
? 403.13 - 客戶端證書被吊銷。
? 403.14 - 拒絕目錄列表。
? 403.15 - 超出客戶端訪問許可。
? 403.16 - 客戶端證書不受信任或無(wú)效。
? 403.17 - 客戶端證書已過期或尚未生效。
? 403.18 - 在當(dāng)前的應(yīng)用程序池中不能執(zhí)行所請(qǐng)求的 URL。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。
? 403.19 - 不能為這個(gè)應(yīng)用程序池中的客戶端執(zhí)行 CGI。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。
? 403.20 - Passport 登錄失敗。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。
? 404 - 未找到。 ? 404.0 -(無(wú)) – 沒有找到文件或目錄。
? 404.1 - 無(wú)法在所請(qǐng)求的端口上訪問 Web 站點(diǎn)。
? 404.2 - Web 服務(wù)擴(kuò)展鎖定策略阻止本請(qǐng)求。
? 404.3 - MIME 映射策略阻止本請(qǐng)求。
? 405 - 用來訪問本頁(yè)面的 HTTP 謂詞不被允許(方法不被允許)
? 406 - 客戶端瀏覽器不接受所請(qǐng)求頁(yè)面的 MIME 類型。
? 407 - 要求進(jìn)行代理身份驗(yàn)證。
? 412 - 前提條件失敗。
? 413 – 請(qǐng)求實(shí)體太大。
? 414 - 請(qǐng)求 URI 太長(zhǎng)。
? 415 – 不支持的媒體類型。
? 416 – 所請(qǐng)求的范圍無(wú)法滿足。
? 417 – 執(zhí)行失敗。
? 423 – 鎖定的錯(cuò)誤。
5xx - 服務(wù)器錯(cuò)誤
服務(wù)器由于遇到錯(cuò)誤而不能完成該請(qǐng)求。 ? 500 - 內(nèi)部服務(wù)器錯(cuò)誤。 ? 500.12 - 應(yīng)用程序正忙于在 Web 服務(wù)器上重新啟動(dòng)。
? 500.13 - Web 服務(wù)器太忙。
? 500.15 - 不允許直接請(qǐng)求 Global.asa。
? 500.16 – UNC 授權(quán)憑據(jù)不正確。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。
? 500.18 – URL 授權(quán)存儲(chǔ)不能打開。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。
? 500.100 - 內(nèi)部 ASP 錯(cuò)誤。
? 501 - 頁(yè)眉值指定了未實(shí)現(xiàn)的配置。
? 502 - Web 服務(wù)器用作網(wǎng)關(guān)或代理服務(wù)器時(shí)收到了無(wú)效響應(yīng)。 ? 502.1 - CGI 應(yīng)用程序超時(shí)。
? 502.2 - CGI 應(yīng)用程序出錯(cuò)。application.
? 503 - 服務(wù)不可用。這個(gè)錯(cuò)誤代碼為 IIS 6.0 所專用。
? 504 - 網(wǎng)關(guān)超時(shí)。
? 505 - HTTP 版本不受支持。
當(dāng)前名稱:java常見錯(cuò)誤代碼,JAVA常見錯(cuò)誤
文章網(wǎng)址:http://aaarwkj.com/article36/dsigpsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、App設(shè)計(jì)、搜索引擎優(yōu)化、、微信小程序、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)