Java基礎——Java筆記——異常

一,異常的概述和分類

  • A:異常的概述
    • 異常就是Java程序在運行過程中出現的錯誤。
  • B:異常的分類
    • 通過API查看Throwable
    • Error
      • 服務器宕機,數據庫崩潰等
    • Exception

  • C:異常的繼承體系
    • Throwable
      • Error
      • Exception
        • RuntimeException

二,JVM默認是如何處理異常的

  • A:JVM默認是如何處理異常的
    • main函數收到這個問題時,有兩種處理方式:
    • a:自己將該問題處理,然後繼續運行
    • b:自己沒有針對的處理方式,只有交給調用main的jvm來處理
    • jvm有一個默認的異常處理機制,就將該異常進行處理.
    • 並將該異常的名稱,異常的信息.異常出現的位置打印在了控制檯上,同時將程序停止運行
  • B:案例演示
    • JVM默認如何處理異常

三,try...catch的方式處理異常1

          try{
		  需要被檢測的代碼;
	  }catch(異常類 變量){
		  處理異常代碼;(處理方式)
	  }finally{
		  一定會執行的語句;
	  }

四,try...catch的方式處理異常2

 try{
		  需要被檢測的代碼;
	  }catch(異常類1 變量){
		  處理異常代碼;(處理方式)
	  }catch(異常類2 變量){
		  處理異常代碼;(處理方式)
	  }finally{
		  一定會執行的語句;
	  }


五,編譯期異常和運行期異常的區別

  • Java中的異常被分爲兩大類:編譯時異常和運行時異常。
  • 所有的RuntimeException類及其子類的實例被稱爲運行時異常,其他的異常就是編譯時異常
    • 編譯時異常

      • Java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯
    • 運行時異常
      • 無需顯示處理,也可以和編譯時異常一樣處理

六,Throwable的幾個常見方法

  • a:getMessage()
    • 獲取異常信息,返回字符串。
  • b:toString()
    • 獲取異常類名和異常信息,返回字符串。
  • c:printStackTrace()
    • 獲取異常類名和異常信息,以及異常出現在程序中的位置。返回值void。

七,throws的方式處理異常

  • 定義功能方法時,需要把出現的問題暴露出來讓調用者去處理。
  • 那麼就通過throws在方法上標識。

八,throw的概述以及和throws的區別

  • A:throw的概述
    • 在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。
  • B:案例演示
    • 分別演示編譯時異常對象和運行時異常對象的拋出
  • C:throws和throw的區別
    • a:throws
      • 用在方法聲明後面,跟的是異常類名
      • 可以跟多個異常類名,用逗號隔開
      • 表示拋出異常,由該方法的調用者來處理
    • b:throw
      • 用在方法體內,跟的是異常對象名
      • 只能拋出一個異常對象名
      • 表示拋出異常,由方法體內的語句處理

九,finally關鍵字的特點及作用

  • A:finally的特點
    • 被finally控制的語句體一定會執行
    • 特殊情況:在執行到finally之前jvm退出了(比如System.exit(0))
  • B:finally的作用
    • 用於釋放資源,在IO流操作和數據庫操作中會見到
  • C:案例演示
    • finally關鍵字的特點及作用

十,finally關鍵字的面試題

  • A:面試題1
    • final,finally和finalize的區別
    • fina *l可以修飾類,不能被繼承
            * 修飾方法,不能被重寫
            * 修飾變量,只能賦值一次
         
    • finally是try語句中的一個語句體,不能單獨使用,用來釋放資源
          
    • finalize是一個方法,當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
  • B:面試題2
    • 如果catch裏面有return語句,請問finally的代碼還會執行嗎?如果會,請問是在return前還是return後。
    • 會執行,在return前執行。

十一,自定義異常概述和基本使用

  • A:爲什麼需要自定義異常
    • 舉例:人的年齡
  • B:自定義異常概述
    • 繼承自Exception
    • 繼承自RuntimeException
  • C:案例演示
    • 自定義異常的基本使用

十二,異常的注意事項及如何使用異常處理

  • A:異常注意事項
    • a:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
    • b:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常
    • c:如果被重寫的方法沒有異常拋出,那麼子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那麼子類只能try,不能throws
  • B:如何使用異常處理

    • 原則:如果該功能內部可以將問題處理,用try,如果處理不了,交由調用者處理,這是用throws
    • 區別:

      • 後續程序需要繼續運行就try
      • 後續程序不需要繼續運行就throws
    • 如果JDK沒有提供對應的異常,需要自定義異常。

十三,練習

  • 鍵盤錄入一個int類型的整數,對其求二進制表現形式
    • 如果錄入的整數過大,給予提示,錄入的整數過大請重新錄入一個整數BigInteger
    • 如果錄入的是小數,給予提示,錄入的是小數,請重新錄入一個整數
    • 如果錄入的是其他字符,給予提示,錄入的是非法字符,請重新錄入一個整數
Scanner scanner = new Scanner(System.in);
	 System.out.println("請輸入一個整數");
	 while(true){
	 String str = scanner.nextLine();
	 try{
		 Integer i = Integer.parseInt(str);
		 String binary = Integer.toBinaryString(i);
		 System.out.println("錄入成功,整數是:"+i+"二進制是:"+binary);
		 break;
	 }catch(Exception e){
		 try {
			BigInteger bi = new BigInteger(str);
			System.out.println("錄入的整數過大,請重新錄入:");
			continue;
		} catch (Exception e1) {
			try{
				Double d = Double.parseDouble(str);
				System.out.println("錄入的是小數,請重新錄入:");
				continue;
			}catch(Exception e2){
				System.out.println("錄入的是非法字符,請重新錄入一個整數:");
			}
		}
	 }
	 }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章