国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 異常詳解

Java 異常詳解

2020-08-04 14:43雨點的名字 Java教程

本文主要介紹了異常與錯誤的區別,異常的體現分類,異常的處理機制,如何自定義異常等,具有很好的參考價值,下面跟著小編一起來看下吧

一.異常與錯誤的區別

  再講異常之前我們就應該要知道異常和錯誤的區別

  Error類和Exception類的父類都是throwable類,他們的區別是:

  Error類一般是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對于這類錯誤的導致的應用程序中斷,

僅靠程序本身無法恢復和和預防,遇到這樣的錯誤,建議讓程序終止。

  Exception類表示程序可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該盡可能處理異常,使程序恢復運行,而不應該隨意終止異常。

二.異常的體現分類:

  1.checked 異常檢查期異常 java.lang.Excetion 在編譯期需要人工處理否則編譯失敗:Exception的子類除了運行期異常都是檢查期異常

  2.非Checked異常運行時異常 java.lang.RuntimeException 不需要處理的直接能編譯通過:所有的RuntimeException以及其子類都是運行異常

Java 異常詳解

舉例:運行期異常

Java 異常詳解

結果:運行期異常,當你敲好代碼時不會報錯,而當你運行時才會報除數不能為0的錯誤

舉例:檢查期異常:

Java 異常詳解

結果:檢查期異常,當你編譯的時候就會報錯,一定要拋出異常編譯才能通過

三.異常的處理機制

Java語言主要依賴于 try  catch  finally  和throws  throw  五個關鍵字來描述異常

 1) 在發生異常的地方直接處理

  使用try catch finally  直接處理異常

  a)  try-catch-finally結構中try塊是必須有的,catch和finally塊為可選,但兩者至少必須出現其中之一。

  b) catch  可以同時出現多個,但一個異常最多捕獲一個catch,而且catch的順序是從上往下

  c) finally  無論是否捕獲異常都會執行的一行代碼

演示1:try異常

?
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
public class TestException {
 public static void main(String[] args) {
  int c = 0;
  try
  {
   int a = 3;
   int b = 0;
   // 這塊代碼出現了異常
   c = a / b;
   // 那么異常之后的代碼都不會被執行
   System.out.println("Hello World");
  }
  catch (ArithmeticException e)
  {
   System.out.println("除數不能為零");
  }
  finally
  {
   //不管有沒有發生異常,finally語句塊都會被執行
   System.out.println("Welcome");
  }
  System.out.println(c);
  // 當b為0時,有異常,輸出為c的初始值0
 }
 }
 //輸出結果:除數不能為零 Welcome 0
 
try異常

演示2:帶有return的異常

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class DemoException {
 public static void main(String[] args) {
 int a=test3();
 System.out.println(a);
 }
 @SuppressWarnings("finally")
 public static int test3(){
 try {
  System.out.println(9 / 0);
  return 1;
 } catch (Exception e) {
  System.out.println("捕獲到了異常....");
  return 2;
 }finally{
  System.out.println("無論如何都會執行的代碼...");
  return 3;
 }
 }
}
//輸出結果 "呵呵""哈哈" 3
 
帶有return異常

得出結論:作用范圍   return  終止整個方法體,但在finally出現之前  return是老大  finally 作用范圍> return

2)將異常拋給調用者讓調用者處理

?
1
2
3
4
5
//throws在方法體頭部通過聲明 拋出異常...
public void dealFile() throws FileNotFoundException{
 FileInputStream fis =new FileInputStream("C:/name.txt");
}
//那么那么上面調用這個方法可以選擇是繼續拋出,還是捕獲異常

案例一:通過throws拋出異常,調用者直接捕獲拋出的異常

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestException {
 public static void main(String[] args) {
   try {
   Test3(); //這里選擇直接捕獲異常,而不是在拋出異常
   } catch (NumberFormatException e) {
   System.err.println("非數據類型不能轉換。");
  } //System.err.println();這種輸出方式可以輸出錯誤的消息,在控制臺呈現紅色。
  }
  public static void Test3() throws NumberFormatException{
   String s = "abc";
  System.out.println(Double.parseDouble(s));
  }
 }
 
throws異常

運行結果:

非數據類型不能轉換。

注意:使用Throws是的限制

兩小原則

 使用throws 聲明拋出異常一個限制

 子類繼承父類重寫父類的方法

 子類拋出的異常必須比父類少

 子類拋出的異常必須比父類小

 兩小原則是針對檢查期異常的,運行期異常不遵循這個規則(RuntimeException 以及子類)

案例二:通過throw拋出異常

?
1
2
3
4
5
6
7
8
9
10
11
12
public class TestException {
 public static void main(String[] args) {
  String s = "abc";
  if(s.equals("abc")) {
   throw new NumberFormatException("不能相等");
   } else {
   System.out.println(s);
  }
  }
 }
 
throw異常

運行結果如下:

Java 異常詳解

面試題:Throw 和Throws有什么區別?

 Throw語句是用在方法體內表示拋出的異常由方法體內的語句處理

 Throws  語句是在方法聲明之后拋出異常表示在拋出的異常交給調用者處理

 Throws 要么使用try –catch –finally 處理要么繼續拋出

四.自定義異常

所謂自定義異常,通常就是定義一個類,去繼承Exception類或者它的子類。因為異常必須直接或者間接地繼承自Exception類。

通常情況下,會直接繼承自Exception類,一般不會繼承某個運行時的異常類。

自定義異常可以用于處理用戶登錄錯誤,用戶輸入錯誤提示等。

自定義異常需要遵循以下步驟

  • 繼承RuntimeExcetion  或者Exception
  • 寫一個無參的構造函數
  • 寫一個String類型的構造函數

舉例:自定義異常:

?
1
2
3
4
5
6
7
8
9
10
11
public class MyException extends Exception
{
 public MyException()
 {
 super();
 }
 public MyException(String message)
 {
 super(message);
 }
}

一種處理異常方式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ExceptionTest4
{
 public void method(String str) throws MyException
 {
 if(null == str)
 {
  throw new MyException("傳入的字符串參數不能為null!");
 }
 else
 {
  System.out.println(str);
 }
 }
 public static void main(String[] args) throws MyException //異常處理方式1,不斷向外拋出
 {
 ExceptionTest4 test = new ExceptionTest4();
 test.method(null);
 }
}

另一種異常處理方式:

?
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
public class ExceptionTest4
{
 public void method(String str) throws MyException
 {
 if (null == str)
 {
  throw new MyException("傳入的字符串參數不能為null!");
 }
 else
 {
  System.out.println(str);
 }
 }
 public static void main(String[] args)
 {
 //異常處理方式2,采用try...catch語句
 try
 {
  ExceptionTest4 test = new ExceptionTest4();
  test.method(null);
 }
 catch (MyException e)
 {
  e.printStackTrace();
 }
 finally
 {
  System.out.println("程序處理完畢");
 }
 }
}

最后說一句,try-catch-finally雖好用,但是如果是濫用,這樣只是會讓程序的可讀性變的很糟糕,當程序報錯,就無法快速準確的定位了。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!

原文鏈接:http://www.cnblogs.com/qdhxhz/p/6372037.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 一区二区三区在线 | 精品少妇一区二区三区日产乱码 | 久久福利 | 久久久亚洲精品视频 | 国产老头老太作爱视频 | 日韩中文字幕一区二区三区 | 日本手机在线视频 | 久久精品国产清自在天天线 | 国产成人一区二区三区在线观看 | 欧美一区二区大片 | 亚洲精品成人天堂一二三 | 国产欧美日韩一区二区三区 | 久久国产精品一区二区 | 日韩看片 | 国产一级片 | 亚洲精品日韩在线 | 欧美日韩在线播放 | 免费黄色在线观看 | 欧美成人a| 国产精品久久国产精品 | 一级电影网 | 日本中文字幕免费 | 欧美日韩专区 | 一级在线免费视频 | 亚洲一区二区三区在线播放 | 视频一区二区三区在线观看 | 午夜高清视频 | 久久亚洲精品综合 | 欧美日韩在线精品 | 成人毛片久久 | 亚洲天堂久久 | 欧美一区二区三区四区五区 | 99久久精品免费 | 99re6在线视频精品免费 | a视频在线免费观看 | 久久久久久综合 | 欧美极品一区二区 | 国产精品久久久 | 欧美久久免费 | 色花av| 91精品国产综合久久久蜜臀粉嫩 |