最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你玩轉Java異常處理

 更新時間:2022年08月10日 09:00:05   作者:知識的搬運工旺仔  
這篇文章主要為大家介紹一下Java中的異常處理機制,文中通過示例為大家進行了詳細的介紹,對我們學習有一定的幫助,感興趣的可以了解一下

1.前言

1.異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并且錯誤有時候是可以避免的

2.比如說,你的代碼少了一個分號,那么運行出來結果是提示是錯誤 java.lang.Error;

3.如果你用System.out.println(11/0) ,那么你是因為你用0做了除數(shù),會拋出java.lang.ArithmeticException 的異常

4.異常發(fā)生的原因有很多,通常包含以下幾大類:

  • 用戶輸入了非法數(shù)據(jù)。
  • 要打開的文件不存在
  • 網(wǎng)絡通信時連接中斷,或者JVM內存溢出

5.這些異常有的是因為用戶錯誤引起,有的是程序錯誤引起的,還有其它一些是因為物理錯誤引起的

6.要理解Java異常處理是如何工作的,你需要掌握以下三種類型的異常:

  • 檢查性異常: 最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程序員無法預見的例如要打開一個不存在文件時,一個異常就發(fā)生了,這些異常在編譯時不能被簡單地忽略
  • 運行時異常: 運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異??梢栽诰幾g時被忽略
  • 錯誤: 錯誤不是異常,而是脫離程序員控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發(fā)生了,它們在編譯也檢查不到的。

2. Exception 類的層次

2.1 Exception 類的層次簡介

所有的異常類是從 java.lang.Exception 類繼承的子類

Exception 類是 Throwable 類的子類。除了Exception類外,Throwable還有一個子類Error

Java 程序通常不捕獲錯誤。錯誤一般發(fā)生在嚴重故障時,它們在Java程序處理的范疇之外

Error 用來指示運行時環(huán)境發(fā)生的錯誤,例如,JVM 內存溢出。一般地,程序不會從錯誤中恢復

異常類有兩個主要的子類:IOException 類和 RuntimeException 類

3. Java 內置異常類

3.1 Java 內置異常類簡介

Java 語言定義了一些異常類在 java.lang 標準包中

標準運行時異常類的子類是最常見的異常類

由于 java.lang 包是默認加載到所有的 Java 程序的,所以大部分從運行時異常類繼承而來的異常都可以直接使用

Java 根據(jù)各個類庫也定義了一些其他的異常

3.2 非檢查異常類舉例

3.3 檢查性異常類表

4. 異常方法

4.1 Throwable 類的主要方法

5. 捕獲異常

5.1 捕獲異常簡介

  1. 使用 try 和 catch 關鍵字可以捕獲異常。try/catch 代碼塊放在異??赡馨l(fā)生的地方
  2. Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發(fā)生一個異常時,try 后面的 catch 塊就會被檢查
  3. 如果發(fā)生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數(shù)到方法是一樣
  4. 一個 try 代碼塊后面跟隨多個 catch 代碼塊的情況就叫多重捕獲
  5. 可以在 try 語句后面添加 任意數(shù)量的 catch 塊
  6. 如果保護代碼中發(fā)生異常,異常被拋給第一個 catch 塊
  7. 如果拋出異常的數(shù)據(jù)類型與 ExceptionType1 匹配,它在這里就會被捕獲
  8. 如果不匹配,它會被傳遞給第二個 catch 塊
  9. 如此,直到異常被捕獲或者通過所有的 catch 塊

5.2 try/catch語法如下

try
{
   // 程序代碼
}catch(ExceptionName e1)
{
   //Catch 塊
}

5.3 多重捕獲塊語法說明

try{
   // 程序代碼
}catch(異常類型1 異常的變量名1){
  // 程序代碼
}catch(異常類型2 異常的變量名2){
  // 程序代碼
}catch(異常類型3 異常的變量名3){
  // 程序代碼
}

6. throws/throw 關鍵字

6.1 throws/throw 關鍵字簡介

如果一個方法沒有捕獲到一個檢查性異常,那么該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部

也可以使用 throw 關鍵字拋出一個異常,無論它是新實例化的還是剛捕獲到的

一個方法可以聲明拋出多個異常,多個 異常之間用逗號隔開

6.2 代碼實例

import java.io.*;
public class className
{
  public void deposit(double amount) throws RemoteException
  {
    // Method implementation
    throw new RemoteException();
  }
  //Remainder of class definition
}

7. finally關鍵字

7.1 finally關鍵字簡介

finally 關鍵字用來創(chuàng)建在 try代碼塊后面執(zhí)行的代碼塊

無論是否發(fā)生異常,finally 代碼塊中的代碼總會被執(zhí)行

在 finally 代碼塊中,可以運行清理類型等收尾善后性質的語句

finally 代碼塊出現(xiàn)在 catch 代碼塊最后

7.2 finall 語法格式

try{
  // 程序代碼
}catch(異常類型1 異常的變量名1){
  // 程序代碼
}catch(異常類型2 異常的變量名2){
  // 程序代碼
}finally{
  // 程序代碼
}

7.3 注意事項說明

catch 不能獨立于 try 存在。

在 try/catch 后面添加 finally 塊并非強制性要求的。

try 代碼后不能既沒 catch 塊也沒 finally 塊。

try, catch, finally 塊之間不能添加任何代碼。

7.4 自定義異常類格式

class MyException extends Exception{
}

7.5 代碼實例

以下實例是一個銀行賬戶的模擬,通過銀行卡的號碼完成識別,可以進行存錢和取錢的操作。

// 文件名InsufficientFundsException.java
import java.io.*;
 
//自定義異常類,繼承Exception類
public class InsufficientFundsException extends Exception
{
  //此處的amount用來儲存當出現(xiàn)異常(取出錢多于余額時)所缺乏的錢
  private double amount;
  public InsufficientFundsException(double amount)
  {
    this.amount = amount;
  } 
  public double getAmount()
  {
    return amount;
  }
}

在下面的 CheckingAccount 類中包含一個 withdraw() 方法拋出一個 InsufficientFundsException 異常。

// 文件名稱 CheckingAccount.java
import java.io.*;
 
//此類模擬銀行賬戶
public class CheckingAccount
{
  //balance為余額,number為卡號
   private double balance;
   private int number;
   public CheckingAccount(int number)
   {
      this.number = number;
   }
  //方法:存錢
   public void deposit(double amount)
   {
      balance += amount;
   }
  //方法:取錢
   public void withdraw(double amount) throws
                              InsufficientFundsException
   {
      if(amount <= balance)
      {
         balance -= amount;
      }
      else
      {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
  //方法:返回余額
   public double getBalance()
   {
      return balance;
   }
  //方法:返回卡號
   public int getNumber()
   {
      return number;
   }
}

下面的 BankDemo 程序示范了如何調用 CheckingAccount 類的 deposit() 和 withdraw() 方法

//文件名稱 BankDemo.java
public class BankDemo
{
   public static void main(String [] args)
   {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500...");
      c.deposit(500.00);
      try
      {
         System.out.println("\nWithdrawing $100...");
         c.withdraw(100.00);
         System.out.println("\nWithdrawing $600...");
         c.withdraw(600.00);
      }catch(InsufficientFundsException e)
      {
         System.out.println("Sorry, but you are short $"
                                  + e.getAmount());
         e.printStackTrace();
      }
    }
}

8. 通用異常

在Java中定義了兩種類型的異常和錯誤

JVM(Java虛擬機) 異常: 由 JVM 拋出的異?;蝈e誤。例如:NullPointerException 類,ArrayIndexOutOfBoundsException 類,ClassCastException 類

程序級異常: 由程序或者API程序拋出的異常。例如 IllegalArgumentException 類,IllegalStateException 類

以上就是一文帶你玩轉Java異常處理的詳細內容,更多關于Java異常處理的資料請關注腳本之家其它相關文章!

相關文章

  • 關于elasticsearch的match_phrase_prefix查詢詳解

    關于elasticsearch的match_phrase_prefix查詢詳解

    這篇文章主要介紹了關于elasticsearch的match_phrase_prefix查詢問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • IDEA將Maven項目中指定文件夾下的xml等文件編譯進classes的方法

    IDEA將Maven項目中指定文件夾下的xml等文件編譯進classes的方法

    這篇文章主要介紹了IDEA將Maven項目中指定文件夾下的xml等文件編譯進classes的方法,幫助大家更好的利用IDEA進行Java的開發(fā)學習,感興趣的朋友可以了解下
    2021-01-01
  • jdk中String類設計成final的原由

    jdk中String類設計成final的原由

    為什么jdk中把 String 類設計成final,主要是為了“ 效率 ”和“安全性”的緣故,若 String 允許被繼承, 由于它的高度被使用率, 可能會降低程序的性能,所以String被定義成final,需要了解的朋友可以參考下
    2013-01-01
  • Spring IOC與DI核心深入理解

    Spring IOC與DI核心深入理解

    IOC也是Spring的核心之一了,之前學的時候是采用xml配置文件的方式去實現(xiàn)的,后來其中也多少穿插了幾個注解,但是沒有說完全采用注解實現(xiàn)。那么這篇文章就和大家分享一下,全部采用注解來實現(xiàn)IOC+DI
    2023-02-02
  • SpringBoot 中大文件(分片上傳)斷點續(xù)傳與極速秒傳功能的實現(xiàn)

    SpringBoot 中大文件(分片上傳)斷點續(xù)傳與極速秒傳功能的實現(xiàn)

    這篇文章主要介紹了SpringBoot 中大文件(分片上傳)斷點續(xù)傳與極速秒傳功能的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 老生常談 MyBatis 復雜查詢

    老生常談 MyBatis 復雜查詢

    這篇文章主要介紹了 MyBatis 復雜查詢的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • mybatis 多表關聯(lián)mapper文件寫法操作

    mybatis 多表關聯(lián)mapper文件寫法操作

    這篇文章主要介紹了mybatis 多表關聯(lián)mapper文件寫法操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java語言Iterator轉換成 List的方法

    Java語言Iterator轉換成 List的方法

    在 Java 中,迭代器(Iterator)是一種用于遍歷集合中元素的對象,它提供了一種簡單而一致的方式來訪問集合中的元素,而不需要暴露集合內部的結構,這篇文章主要介紹了Java語言Iterator轉換成 List的方法,需要的朋友可以參考下
    2023-08-08
  • Java后端實現(xiàn)短鏈接生成功能

    Java后端實現(xiàn)短鏈接生成功能

    短鏈接生成主要在于把指定的接口和參數(shù)實現(xiàn)加密生成比較短的字符串,再進行拼接通過指定的域名或者ip實現(xiàn)鏈接的跳轉,下面我們來看看如何使用Java實現(xiàn)這一功能吧
    2025-03-03
  • Java使用枚舉實現(xiàn)狀態(tài)機的方法詳解

    Java使用枚舉實現(xiàn)狀態(tài)機的方法詳解

    這篇文章主要介紹了Java使用枚舉實現(xiàn)狀態(tài)機的方法詳解,枚舉類型很適合用來實現(xiàn)狀態(tài)機,狀態(tài)機可以處于有限數(shù)量的特定狀態(tài),它們通常根據(jù)輸入,從一個狀態(tài)移動到下一個狀態(tài),但同時也會存在瞬態(tài),需要的朋友可以參考下
    2023-11-11

最新評論

唐山市| 广州市| 西充县| 陇南市| 北京市| 阿合奇县| 洞头县| 兴化市| 赤壁市| 托里县| 通辽市| 玉树县| 措美县| 崇义县| 木里| 壤塘县| 南雄市| 天台县| 汽车| 宁乡县| 修武县| 钟祥市| 克山县| 策勒县| 龙海市| 高陵县| 南平市| 东乡族自治县| 墨竹工卡县| 怀化市| 崇礼县| 涟源市| 松桃| 文成县| 方城县| 洛南县| 扶绥县| 睢宁县| 日照市| 南汇区| 临澧县|