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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java中使用什么来做错误处理_JAVA基础--如何通过异常处理错误

發(fā)布時(shí)間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中使用什么来做错误处理_JAVA基础--如何通过异常处理错误 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

《Thinking in Java》上對(duì)這章的講解不少,可見重要性,學(xué)習(xí)和總結(jié)一些主要的記錄下來。

一、創(chuàng)建自定義異常

package Exception;

class SimpleException extends Exception{}

public class InheritingException{

public void f() throws SimpleException {

System.out.println("Throw SimpleException from f()");

throw new SimpleException();

}

public static void main(String[] args) {

InheritingException sed = new InheritingException();

try {

sed.f();

} catch (SimpleException e) {

e.printStackTrace();

}

}

}

輸出:

Throw SimpleException from f()

Exception.SimpleException

at Exception.InheritingException.f(InheritingException.java:10)

at Exception.InheritingException.main(InheritingException.java:19)

throw與throws的區(qū)別與詳情

編譯器創(chuàng)建了默認(rèn)構(gòu)造器,它將自動(dòng)調(diào)用基類的默認(rèn)構(gòu)造器。

對(duì)異常來說,最重要的部分就是類名,其它也沒用,可以增加一個(gè)帶參的構(gòu)造方法。

比如NullPointerException:

public class NullPointerException extends RuntimeException {

private static final long serialVersionUID = 5162710183389028792L;

/**

* Constructs a {@code NullPointerException} with no detail message.

*/

public NullPointerException() {

super();

}

/**

* Constructs a {@code NullPointerException} with the specified

* detail message.

*

* @param s the detail message.

*/

public NullPointerException(String s) {

super(s);

}

}

二、捕獲異常

1)try塊

如果在方法內(nèi)部拋出了異常(或者在方法內(nèi)部調(diào)用的其他方法拋出了異常),這個(gè)方法將在拋出異常的過程中結(jié)束。

要是不希望方法就此結(jié)束,可以在方法內(nèi)設(shè)置一個(gè)特殊的塊來捕獲異常。

try{

//exceptions

}

2)異常處理程序

異常處理程序緊跟在try塊之后,以關(guān)鍵字catch表示:

try{

//exceptions

} catch(Type1 id1) {

//Type1

} catch(Type2 id2) {

//Type2

}

當(dāng)異常被拋出時(shí),異常處理機(jī)制將負(fù)責(zé)搜尋參數(shù)與異常類型相匹配的第一個(gè)處理程序。然后進(jìn)入catch子句執(zhí)行,此時(shí)認(rèn)為異常得到了處理。

注意,只有匹配的catch子句才能得到執(zhí)行,這與switch語句不同。

3)棧軌跡

printStackTrace()方法所提供的信息可以通過getStackTrace()方法來直接訪問,這個(gè)方法將返回一個(gè)由棧軌跡中的元素所構(gòu)成的數(shù)組,其中每一個(gè)元素都表示

棧中的一幀。元素0是棧頂元素,并且是調(diào)用序列中的最后一個(gè)方法調(diào)用。數(shù)組中最后一個(gè)元素和棧底是調(diào)用序列中的第一個(gè)方法調(diào)用。

public class WhoCalled {

static void f() {

try {

throw new Exception();

} catch (Exception e) {

for(StackTraceElement ste : e.getStackTrace()) {

System.out.println("line: " + ste.getLineNumber() + " method: " + ste.getMethodName());

}

}

}

static void g() {f();}

static void h() {g();}

public static void main(String[] args) {f();g();h();}

}

程序輸出:

line: 5 method: f

line: 14 method: main

line: 5 method: f

line: 12 method: g

line: 14 method: main

line: 5 method: f

line: 12 method: g

line: 13 method: h

line: 14 method: main

三、Java標(biāo)準(zhǔn)異常

Throwable這個(gè)Java類被用來表示任何可以作為異常被拋出的類。

Throwable對(duì)象可分為兩種類型:

1? Error用來表示編譯時(shí)和系統(tǒng)錯(cuò)誤。

2? Exception是可以被拋出的基本類型,程序員關(guān)心的基類型通常是Exception。

四、RuntimeException

if(t == null) {

throw new NullPointerException();

}

如果對(duì)Null引用進(jìn)行調(diào)用,Java會(huì)自動(dòng)拋出NullPointerException異常,所以上述代碼是多余的,它屬于Java的標(biāo)準(zhǔn)運(yùn)行時(shí)檢測(cè)的一部分:

public class NeverCaught {

static void f() {

throw new RuntimeException();

}

static void g() {f();}

public static void main(String[] args) {

g();

}

}

輸出:

Exception in thread "main" java.lang.RuntimeException

at Exception.NeverCaught.f(NeverCaught.java:6)

at Exception.NeverCaught.g(NeverCaught.java:10)

at Exception.NeverCaught.main(NeverCaught.java:14)

從輸出可以發(fā)現(xiàn),RuntimeException是一個(gè)特例,對(duì)于這種異常類型,編譯器不需要異常說明,其輸出被報(bào)告給了System.err。

如果RuntimeException沒有被捕獲而直達(dá)main(),那么在程序退出前將調(diào)用異常的printStackTrace()方法。

*注意:

只能在代碼中忽略RuntimeException(及其子類)類型的異常,其它異常類型的處理都是由編譯器強(qiáng)制實(shí)施的。

1)常見的五種RuntimeException

NullPointerException - 空指針引用異常

ClassCastException - 類型強(qiáng)制轉(zhuǎn)換異常

IllegalArgumentException - 傳遞非法參數(shù)異常

ArithmeticException - 算術(shù)運(yùn)算異常

ArrayStoreException - 向數(shù)組中存放與聲明類型不兼容對(duì)象異常

IndexOutOfBoundsException - 下標(biāo)越界異常

NegativeArraySizeException - 創(chuàng)建一個(gè)大小為負(fù)數(shù)的數(shù)組錯(cuò)誤異常

NumberFormatException - 數(shù)字格式異常

SecurityException - 安全異常

UnsupportedOperationException - 不支持的操作異常

五、使用finally進(jìn)行清理

class ThreeException extends Exception {}

public class FinallyWorks {

static int count = 0;

public static void main(String[] args) {

while(true) {

try {

if(count++ == 0) {

throw new ThreeException();

}

System.out.println("No exception");

} catch (ThreeException e) {

System.out.println("ThreeException");

} finally {

System.out.println("In finally clause");

if(count == 2)

break;

}

}

}

}

這個(gè)程序給了我們一些思路(確實(shí)。。),如果把try塊放在循環(huán)里,就建立了一個(gè)“程序繼續(xù)執(zhí)行之前必須要到達(dá)”的條件。

還可以加入一個(gè)static類型的計(jì)數(shù)器或者別的裝置,使循環(huán)在放棄之前能夠嘗試一定的次數(shù)。這將使程序的健壯性更上一個(gè)臺(tái)階(好叼的樣子)。

1)finally用來做什么

當(dāng)要把除內(nèi)存之外的資源恢復(fù)到它們的初始狀態(tài)時(shí),就要用到finally子句。

2)在return中使用finally

因?yàn)閒inally子句總是會(huì)執(zhí)行的,所以在一個(gè)方法中,可以從多個(gè)點(diǎn)返回,并且可以保證重要的清理工作仍舊會(huì)執(zhí)行:

class ThreeException extends Exception {}

public class FinallyWorks {

static int count = 0;

public static void main(String[] args) {

while(true) {

try {

if(count++ == 0) {

throw new ThreeException();

}

System.out.println("No exception");

return;

} catch (ThreeException e) {

System.out.println("ThreeException");

} finally {

System.out.println("In finally clause");

if(count == 3)

break;

}

}

}

}

第一次循環(huán),首先執(zhí)行第7行,符合條件,拋出異常,執(zhí)行catch塊,最后執(zhí)行finally清理,不符合第16行判斷,繼續(xù)循環(huán)

第二次循環(huán),不符合第7行判斷,拋出異常,并return,但依舊執(zhí)行finally清理,不符合第16行判斷,但try塊中已經(jīng)執(zhí)行return,所以程序結(jié)束,輸出:

ThreeException

In finally clause

No exception

In finally clause

3)Java異常的缺憾:異常丟失

public class ExceptionSilencer {

public static void main(String[] args) {

try {

throw new RuntimeException();

} finally {

return;

}

}

}

以上就是JAVA基礎(chǔ)--如何通過異常處理錯(cuò)誤的詳細(xì)內(nèi)容,更多關(guān)于JAVA 通過異常處理錯(cuò)誤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

總結(jié)

以上是生活随笔為你收集整理的java中使用什么来做错误处理_JAVA基础--如何通过异常处理错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品人妻一区二区三区蜜桃 | 国产亚洲综合在线 | av激情久久 | 久久午夜夜伦鲁鲁一区二区 | 91中文字幕在线播放 | 亚洲射图 | jizzjizz中国精品麻豆 | 久久艹免费视频 | 爱的色放韩国电影 | 毛片免费全部无码播放 | www.日本在线视频 | 精品国产乱子伦一区二区 | 无码人妻aⅴ一区二区三区日本 | 国产福利久久久 | 伊人成人22 | 婷婷伊人综合 | 麻豆免费在线观看视频 | 老头老太做爰xxx视频 | 在线观看日批视频 | 女人高潮潮呻吟喷水 | 国产人与zoxxxx另类 | 大肉大捧一进一出好爽视频 | 亚洲天堂视频在线观看 | 少妇欧美激情一区二区三区 | 成人一区二区三区仙踪林 | 青娱乐最新官网 | 色多多导航 | 乱色精品无码一区二区国产盗 | 中文字幕在线视频一区二区三区 | 国产精品二区在线 | 国产chinese男男网站大全 | 这里只有久久精品 | 国产精品久久久久久久9999 | 精品一区二区三区在线免费观看 | 欧美精品国产一区二区 | 精品无码m3u8在线观看 | 肥老熟妇伦子伦456视频 | 日本护士体内she精2xxx | 国产精品香蕉在线 | 日韩精品无码一本二本三本色 | 欧美人妻精品一区二区 | 亚洲精品女人久久久 | 99在线小视频 | 嫩草视频在线看 | 亚洲精品乱码久久久久久不卡 | 免费小视频在线观看 | 韩国伦理在线 | 亚洲免费观看高清在线观看 | 国产av电影一区二区三区 | 日本在线视频免费 | 久久久不卡国产精品一区二区 | 人妻无码一区二区三区久久99 | 久久久久久国产精品三级玉女聊斋 | 特级a毛片 | b站大片免费直播 | 国产成人精品综合在线观看 | 五月婷婷激情小说 | 男女视频在线免费观看 | 伊人精品 | 在线观看视频国产 | 黄色免费网页 | 国产成人精品a视频一区 | 天天天天天天天天干 | 午夜精品久久久久久久久 | 国产精品不卡 | 午夜三级视频 | av丝袜天堂| 岛国精品资源网站 | 精品孕妇一区二区三区 | 99精品在线视频观看 | 亚州av| 都市激情亚洲一区 | 国产成人在线观看免费网站 | 桃色视屏 | 亚洲欧美一级 | 欧美一级视频在线观看 | 国产精品自偷自拍 | 中文字幕av在线免费观看 | 国产最新精品 | 国产亚洲一区二区三区不卡 | 人妻va精品va欧美va | 久久爱网 | 日本理论片 | 精品国产高清在线观看 | 91亚洲精品久久久蜜桃借种 | 欧美天堂一区 | 91精品国产麻豆国产自产在线 | 北条麻妃一区二区三区在线观看 | 黄色成年视频 | 日本在线一区二区三区 | 在线观看国产黄 | a一级视频 | 亚洲热在线 | 华人永久免费 | 特级大胆西西4444人体 | 精品久久久久国产 | 国产性生活毛片 | 特大黑人娇小亚洲女 | 久久αv|