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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 编写异常_Java基础编程之异常处理

發布時間:2024/10/8 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 编写异常_Java基础编程之异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java異常類是對于程序中可能出現的錯誤或者異常的一種處理方式。在設計程序的過程中,對于可能出現的異常錯誤,比如說用戶輸入錯誤,設備錯誤,磁盤滿了或者代碼錯誤等等,通常采用異常處理的方式來進行處理可能的錯誤。 JAVA的異常處理機制:如果某個方法不能按照正常的途徑完成任務,就可以通過另一種路徑退出該方法,并處理可能出現的錯誤。在這種情況下會拋出一個封裝了錯誤信息的對象。 這個方法會立刻退出同時不返回任何值。另外,調用這個方法的其他代碼也無法繼續執行,異常處理機制會將代碼執行交給異常處理器。

(一)Java異常

異常:導致程序中斷運行的一種指令流。 在理想的情況下,程序完全按照我們設計的流程來執行,但是很多時候會出現這樣或者那樣的錯誤,如文件找不到,磁盤滿了或者代碼錯誤等,這些錯誤會影響程序的正常執行,對于這種情況,就有了異常處理情況,即使程序異常了,它也是按照某種邏輯在執行,只是沒有按照我們給它安排的邏輯執行。異常在Java中定義為Throwable類,其結構層次圖如下:

由上圖可以看出,Thowable有兩個重要的子類,一個是Error類,另一個是Expection類,每一個子類下面還有很多小的分類。

Error類指的是Java運行時系統的內部錯誤或者資源耗盡錯誤, 這是程序無法處理的錯誤,表示運行應用程序中較嚴重問題,對于這類問題,JVM告知用戶,并盡力終止程序。

Expection類指的是 程序本身可以處理的異常。主要分為兩類,RuntimeException類異常或者其他異常,由程序錯誤導致的異常稱之為RuntimeExpection,比如說:錯誤的類型轉化,數組訪問過界,訪問空指針等。而程序本身沒有錯誤,像I/O錯誤這類問題所導致的異常稱之為其他異常,比如說試圖打開一個不存在的文件或類。

Java 異常類的另一種分類方式是:可查的異常(checked exceptions)和不可查的異常(unchecked exceptions)。

可查的異常(checked exceptions):正確的程序在運行時,出現情理可容的異常,除了RuntimeException及其子類以外,其他的Exception類及其子類都屬于可查異常。對于此類異常,要么用try-catch語句捕獲它,要么用throws子句聲明拋出它,否則編譯不會通過。

可不查的異常(unchecked exceptions): 包括RuntimeException及其子類和Error。 編譯器不要求強制處理的異常。

(二) 異常處理

在 Java 應用程序中,異常處理機制為:拋出異常,捕捉異常。

拋出異常:在執行一個方法時,如果發生異常,則這個方法生成代表該異常的一個對象,并停止當前執行路徑,并將此異常提交給系統。首先像創建普通的java對象一樣,使用new在堆上創建一個異常對象;然后,當前的執行路徑被終止,并且從當前環境中彈出對異常對象的引用。此時,異常處理機制接管程序,并開始尋找一個恰當的地方繼續執行程序,這個恰當的地方就是異常處理程序或者異常處理器,它的任務是將程序從錯誤狀態中恢復,以使程序要么換一種方式運行,要么繼續運行下去。

捕捉異常:當系統捕捉到該異常后,尋求相應的代碼來看處理該異常,在方法的調用棧中查找合適·的異常處理器,從生成異常的方法開始回溯,直到找到相應的異常處理代碼,并在控制臺上打印異常信息,包括異常的信息的堆棧的內容。

Java異常處理涉及到五個關鍵字,分別是:try、catch、finally、throw、throws。

處理方法1 捕捉異常:try-catch-finally語句

try -catch-finally語句是常用的異常處理語句,其結構如下:

try {

code1;

// 可能會發生異常的程序代碼

} catch (Type1 id1) {

code2

// 捕獲并處理try拋出的異常類型Type1

} catch (Type2 id2) {

code3

// 捕獲并處理try拋出的異常類型Type2

} finally {

code4

// 無論是否發生異常,都將執行的語句塊

}1

2

3

4

5

6

7

8

9

10

11

12

13

其邏輯框圖如下:

try: 制定一段代碼,即一次性捕獲并處理的范圍,用于監聽。將要被監聽的代碼(可能拋出異常的代碼)放在try語句塊之內,當try語句塊內發生異常時,(1)程序將跳出try語句塊中的其余代碼,(2)轉而執行catch中的處理器代碼,異常就被拋出 。

注:當異常代碼執行完成以后,try語句塊中尚未執行的語句不會再執行。

一個try語句必須有至少一個catch或finally語句。

catch用于處理不同類型的異常。捕獲順序為:越是底層的類,越放在下面。常見的方法有:

toString():顯示異常的類名和產生的原因。

geyMessage( ) : 顯示異常的原因。

printstackTrack() :顯示異常發生時堆棧的內容。

finally:不管異常處理與否,必須要執行的代碼塊。比如說關閉外界的資源。

當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。在以下4種特殊情況下,finally塊不會被執行:

1)在finally語句塊中發生了異常。

2)在前面的代碼中用了System.exit()退出程序。

3)程序所在的線程死亡。

4)關閉CPU。

異常執行圖示:

代碼示例:

public class TestException

{

public static void main(String args[])

{ int i = 0;

String greetings[] = { " Hello world !", " Hello World !! ", " HELLO WORLD !!!" };

while (i < 4) {

try { // 特別注意循環控制變量i的設計,避免造成無限循環

System.out.println(greetings[i++]);

}

catch (ArrayIndexOutOfBoundsException e) {

System.out.println("數組下標越界異常");

} finally

{

System.out.println("--------------------------");

}

}

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

處理方法2 拋出異常 Throws、Throw 用法

如果遇到無法處理的情況,Java便會拋出一個異常,即告訴編譯器需要返回什么值,以及可能出現哪些錯誤。

public void test() throws FileNotFoundException {

method();

}

public void method() throws FileNotFoundException {

//一個會拋出異常的方法

method2();

}

//這里 方法后是throws

public void method2() throws FileNotFoundException {

//這里是throw

throw new FileNotFoundException();

}

Throw總是出現在函數體中, 表示手動拋出一個異常,拋出異常的時候,直接在 Throw 后面添加異常的實例即可。 用來拋出一個Throwable類型的異常。程序會在throw語句后立即終止,它后面的語句執行不到,然后在包含它的所有try塊中(可能在上層調用函數中)從里向外尋找含有與其匹配的catch子句的try塊。

public class Test {

public static void main(String[] args) {

try {

throw new TestException20180809("自定義異常:天王蓋地虎");

} catch (Exception e) {

e.printStackTrace();

}

}

}1

2

3

4

5

6

7

8

9

10

11

Throws 聲明過的方法表示此方法不處理異常,找到一個合適的異常類,創建這個類的對象,并將對象拋出。

import java.lang.Exception;

public class TestException {

static void pop() throws NegativeArraySizeException {

// 定義方法并拋出NegativeArraySizeException異常

int[] arr = new int[-3]; // 創建數組

}

public static void main(String[] args) { // 主方法

try { // try語句處理異常信息

pop(); // 調用pop()方法

} catch (NegativeArraySizeException e) {

System.out.println("pop()方法拋出的異常");// 輸出異常信息

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

自定義異常類:在程序中,如果標準異常類并不能夠充分的描述問題,則需要自己來定義一個異常類來解決問題,只需繼承 Exception 即可。可以通過以下步驟定義異常類(1)創建自定義異常類。(2)在方法中通過throw關鍵字拋出異常對象。(3)如果在當前拋出異常的方法中處理異常,可以使用try-catch語句捕獲并處理;否則在方法的聲明處通過throws關鍵字指明要拋出給方法調用者的異常,繼續進行下一步操作。(4)在出現異常方法的調用者中捕獲并處理異常。

import java.lang.Exception;

public class TestException {

static int quotient(int x, int y) throws MyException { // 定義方法拋出異常

if (y < 0) { // 判斷參數是否小于0

throw new MyException("除數不能是負數"); // 異常信息

}

return x/y; // 返回值

}

public static void main(String args[]) { // 主方法

int a =3;

int b =0;

try { // try語句包含可能發生異常的語句

int result = quotient(a, b); // 調用方法quotient()

} catch (MyException e) { // 處理自定義異常

System.out.println(e.getMessage()); // 輸出異常信息

} catch (ArithmeticException e) { // 處理ArithmeticException異常

System.out.println("除數不能為0"); // 輸出提示信息

} catch (Exception e) { // 處理其他異常

System.out.println("程序發生了其他的異常"); // 輸出提示信息

}

}

}

class MyException extends Exception { // **創建自定義異常類**

String message; // 定義String類型變量

public MyException(String ErrorMessagr) { // 父類方法

message = ErrorMessagr;

}

public String getMessage() { // 覆蓋getMessage()方法

return message;

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

(三)Java常見異常

五種常見的運行時異常:

ClassCastException(類轉換異常)

IndexOutOfBoundsException(數組越界)

NullPointerException(空指針)

ArrayStoreException(數據存儲異常,操作數組時類型不一致)

IO操作的BufferOverflowException異常

非運行時異常必須得捕獲,否則編譯不過去,java編譯器要求程序員必須對這種異常進行catch,Java認為Checked異常都是可以被處理(修復)的異常,所以Java程序必須顯式處理Checked異常。常見的非運行異常有io異常和sql異常。

IOException、FileNotFoundExcetion 和SQLException

(四)當異常遇到return

在一個方法中,無論 Try 塊中有沒有異常、Return,只要 Finally 塊中有 Return,那么函數的返回值都由 Finally 塊提供。

Java異常總結:(1)一個圖:異常類型圖。(2)五個關鍵字,try, catch finally throws throw

(3)繼承關系:先大后小,(4)異常和重寫:子類重寫異常范圍不能超出父類。

實例說明:

public class TestException {

public TestException() {

}

boolean testEx() throws Exception {

boolean ret = true;

try {

ret = testEx1();

} catch (Exception e) {

System.out.println("testEx, catch exception");

ret = false;

throw e;

} finally {

System.out.println("testEx, finally; return value=" + ret);

return ret;

}

}

boolean testEx1() throws Exception {

boolean ret = true;

try {

ret = testEx2();

if (!ret) {

return false;

}

System.out.println("testEx1, at the end of try");

return ret;

} catch (Exception e) {

System.out.println("testEx1, catch exception");

ret = false;

throw e;

} finally {

System.out.println("testEx1, finally; return value=" + ret);

return ret;

}

}

boolean testEx2() throws Exception {

boolean ret = true;

try {

int b = 12;

int c;

for (int i = 2; i >= -2; i--) {

c = b / i;

System.out.println("i=" + i);

}

return true;

} catch (Exception e) {

System.out.println("testEx2, catch exception");

ret = false;

throw e;

} finally {

System.out.println("testEx2, finally; return value=" + ret);

return ret;

}

}

public static void main(String[] args) {

TestException testException1 = new TestException();

try {

testException1.testEx();

} catch (Exception e) {

e.printStackTrace();

}

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

運行結果:

i=2

i=1

testEx2, catch exception

testEx2, finally; return value=false

testEx1, finally; return value=false

testEx, finally; return value=false

常見的異常·:

JAVA異常知識結構

總結

以上是生活随笔為你收集整理的java 编写异常_Java基础编程之异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本视频网站在线观看 | 日韩电影在线一区二区 | 国产精品一区二区电影 | 欧美爱爱网址 | 校园春色av| 潮喷失禁大喷水aⅴ无码 | 潘金莲一级淫片a.aaaaa播放 | 国产视频一区二区三区四区 | 91午夜在线观看 | 精品伦精品一区二区三区视频 | 国产精品毛片久久久久久 | 91亚洲精品久久久蜜桃网站 | 黄色av一区 | 欧美精品乱码99久久蜜桃 | 五月婷婷六月香 | 婷婷综合av| 欧美一区二区最爽乱淫视频免费看 | 久久精品一二三区 | 亚洲天堂av一区二区三区 | 午夜在线视频免费观看 | 欧美一区二区三区黄色 | 三度诱惑免费版电影在线观看 | 欧美日韩在线视频一区 | 欧美色图首页 | 国内成人在线 | 国产av不卡一区 | 插插插网站 | 亚洲一区二区精品在线 | 淫久久 | 波多野结衣绝顶大高潮 | 亚洲视频在线观看一区 | 日本高清有码视频 | 亚洲社区在线 | 护士的小嫩嫩好紧好爽 | 欧美三日本三级少妇三 | 人妻丰满熟妇av无码久久洗澡 | 日韩色区 | 麻豆蜜桃av| 日韩xxxxxxxxx| 日本一区二区三区精品 | 国产农村妇女精品一区二区 | 38在线视频| 怡红院男人天堂 | 末路1997全集免费观看完整版 | av特黄| 男女涩涩网站 | 亚洲国产传媒 | 日韩精品一区二区三区电影 | 台湾佬久久 | 日韩欧美福利视频 | 日日操网| 日本人的性生活视频 | 污视频网站免费 | 日韩欧美国产综合 | 波多野结衣av电影 | 免费在线看污片 | 精品夜夜澡人妻无码av | 少妇闺蜜换浪荡h肉辣文 | 中国老太婆性做爰 | 亚洲午夜一区二区三区 | 饥渴少妇色诱水电工 | xxxx少妇| 91看片成人| 四虎影库永久在线 | 久久99精品国产麻豆婷婷 | 天天爱天天操 | 国产区视频在线观看 | 国产一区二区三区在线视频 | 全黄性性激高免费视频 | 欧美一区亚洲二区 | 伊久久| 我们好看的2018视频在线观看 | 一级成人av| 制服诱惑一区二区三区 | 亚洲区视频在线观看 | 国产一级二级三级精品 | 国产精品jizz在线观看老狼 | 欧美少妇一区二区 | 污视频网址在线观看 | 就去干成人网 | 欧美激情精品久久久久 | 国产va亚洲va在线va | 国内精品亚洲 | 国产亚洲欧美在线视频 | 99999视频 | 人妻无码一区二区三区 | 日本不卡三区 | 999精品在线观看 | 色先锋av资源 | 人人爽人人干 | 欧美色图五月天 | av 日韩 人妻 黑人 综合 无码 | 中文文字幕一区二区三三 | 香港av在线 | 国产成人免费看一级大黄 | 中出视频在线观看 | 日本人做爰全过程 | 亚洲综合区 | 超碰人人国产 |