1. 程式人生 > 其它 >sql server 遠端訪問informix_微軟 SQL Server 遠端程式碼執行漏洞(CVE-2020-0618)

sql server 遠端訪問informix_微軟 SQL Server 遠端程式碼執行漏洞(CVE-2020-0618)

Java異常學習

什麼是異常

  • 異常 Exception
  • 異常指程式執行中出現的不期而至的各種狀況,如:檔案找不到、網路連線失敗、非法引數等
  • 異常發生再程式執行期間,它影響了正常的程式執行流程

簡單分類

  • 檢查性異常:最具代表的檢查性異常是使用者錯誤或問題引起的異常,這是程式設計師無法預見的
  • 執行時異常:執行時異常是可能被程式設計師避免的異常。與檢查性異常相反,執行時異常可以在編譯時被忽略
  • 錯誤ERROR:錯誤不是異常,而實脫離程式設計師控制的問題。錯誤在程式碼中通常被忽略。例如:當棧溢位時,一個錯誤就放生了,它們在編譯也檢查不到的

Error

  • Error類物件由Java虛擬機器生成並丟擲,大多數錯誤與程式碼編寫者所執行的操作無關
  • Java虛擬機器執行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所需的記憶體資源時,將出現OutOfMemoryError。這些異常發生時,Java虛擬機器一般會選擇執行緒終止
  • 還有發生在虛擬機器試圖執行應用時,如類定義錯誤(NoClassDefFoundError)、連結錯誤(LinkageError)。這些錯誤是不可查的,因為它們在應用程式的控制和處理能力之外,而且絕大數是程式執行時不允許出現的狀況

Exception

  • 在Exception分支中有一個重要的子類RuntimeException(執行時異常)

    • ArrayIndexOutOfBoundException(陣列下標越界)
    • NullPointerException(空指標異常)
    • ArithmeticException(算術異常)
    • MissingResourceException(丟失資源)
    • ClassNotFoundException(找不到類)等
    • 這些異常時不檢查異常,程式中可以選擇捕獲處理,也可以不處理
  • 這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這類異常的發生

  • Error和Exception的區別:Error通常時災難性的致命錯誤,是程式無法控制和處理的,當出現這些異常時,Java虛擬機器(JVM)一般會選擇終止執行緒;Exception通常情況下時可以被程式處理的,並且在程式中應該儘可能的去處理這些異常

異常處理機制

  • 捕獲異常
public static void main(String[] args) {
		//假設捕獲多個異常:從小到大
        int a = 1;
        int b = 0;
        try{ //try監控區域
            System.out.println(a/b);
        }catch(ArithmeticException e){//catch(想要捕獲的異常型別)
            System.out.println("程式出現異常,變數b不能為0");
        } finally {
            System.out.println("finally");
        }
    }
  • 丟擲異常
package com.opp.demo02;

public class Demo01 {

    public static void main(String[] args) {

        new Demo01().test(1,0);
    }
    //假設方法中,處理不了這個異常。方法上丟擲
    public void test(int a , int b)throws ArithmeticException{
        if(b==0){//throw 丟擲異常
            throw new ArithmeticException();//主動丟擲異常
        }

    }

}

自定義異常

  • 使用者自定義異常類,只需要繼承Exception類即可

  • 步驟:

    1. 建立自定義類
    2. 在方法中throw關鍵字丟擲異常物件
    3. 如果在當前方法丟擲異常的方法中處理異常,可以使用try-catch語句捕獲並處理,否則在方法的宣告處通過throws關鍵字指明要跑出給方法呼叫者的異常,繼續進行下一步操作
    4. 在出現異常方法的呼叫者中捕獲並處理異常
  • 實際應用中的經驗總結:

    • 處理執行時異常時,採用邏輯去合理規避同時輔助try-catch處理
    • 在多重catch塊後面,可以加一個catch(Exception)來處理可能會被一遺漏的異常
    • 對於不正確的程式碼,也可以加上try-catch,處理潛在異常
    • 儘量去處理異常,切忌只是簡單的呼叫printStackTrace()去列印輸出
    • 具體如何處理異常,要根據不同的業務需求和異常型別去決定
    • 儘量新增finally語句塊去釋放佔用的資源