Java 基礎知識(3)(抽象類/IO/異常)

1 抽象類

抽象 實際存在的,具體的現實生活中的事務叫做對象,而抽象就是將他們的共有信息提取出來做一個描述。比如說:“貓” 是一個對象,具體存在。“ 動物”,”寵物“等等就是貓可以抽象出來的東西,而抽象出來的東西又可以代表一個部分,你可以理解抽象出來的東西,但是不能用來具體對應上現實存在的事物。

1.1抽象類與普通類

(1) 抽象不是具體的概念,抽象類不能被實例化,而普通類可以進行實例化調用。
(2) 關於繼承,普通類和抽象類都可以被繼承,但是對於抽象類來說,如果繼承抽象類的類也是抽象類,就和普通類一樣。否則就必須重寫繼承的方法。

1.2抽象類與接口

接口是方法的抽象,抽象類是對事物本質的抽象。
接口只能有抽象方法和不可變常量抽象類可以有具體的方法和屬性
抽象類主要用來抽象類別,而接口用來抽象功能
抽象類實現接口時,接口的方法在抽象類中可以被實現也可以不被實現,而普通實現接口必須實現所有接口方法
抽象類的功能要遠超過接口,但是,定義抽象類的代價高。因爲高級語言來說(從實際設計上來說也是)每個類只能繼承一個類

1.3 抽象類不可以使用final修飾

因爲抽象類就是用來被繼承的,使用了final就不可被繼承了

2 Java I/O

**定義:**數據流的輸入和輸出,主要有兩大類:字節流和字符流。字節流可以處理任何類型的數據,如圖片,視頻等,字符流只能處理字符類型的數據。I/O流是單向傳輸的
分類:
根據數據處理的不同類型分爲:字節流和字符流

·讀寫單位的不同:字節流以字節(8bit)爲單位。字符流以字符爲單位,根據碼錶映射字符,一次可能讀多個字節。
·處理對象不同:字節流可以處理任何類型的數據,如圖片、avi等,而字符流只能處理字符類型的數據。

根據數據流向不同分爲:輸入流和輸出流

對於輸入流只能進行讀操作。
對於輸出流只能進行鞋操作。

3 異常分類及常見異常

3.1分類

在這裏插入圖片描述
Throwable類繼承Object()類,有兩個重要的子類,Error(錯誤)和Execption(異常)
Error 是程序無法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如: Virtual MachineError: Java虛擬機運行錯誤 ,OutOfMemoryError 內存不足。

Exception程序本身可以處理的異常,Execption有一個重要的子類RuntimeException NullPointerException (空指針異常)IndexOutOfBoundsException(數組越界)ArithmaticException(除零錯誤)等。

3.2 throw和throws

throws總是出現在一個函數頭中,用來標明該成員函數可能拋出的各種異常。對大多數Exception子類來說,Java 編譯器會強迫你聲明在一個成員函數中拋出的異常的類型。如果異常的類型是Error或 RuntimeException, 或它們的子類,這個規則不起作用, 因爲這在程序的正常部分中是不期待出現的。 如果你想明確地拋出一個RuntimeException,你必須用throws語句來聲明它的類型。 方法拋出異常
throw總是出現在函數體中,用來拋出一個異常。程序會在throw語句後立即終止,它後面的語句執行不到,然後在包含它的所有try塊中(可能在上層調用函數中)從裏向外尋找含有與其匹配的catch子句的try塊
語句拋出異常
throw要麼和try-catch-finally語句配套使用,要麼與throws配套使用。但throws可以單獨使 用,然後再由處理異常的方法捕獲。

3.3 try-catch-final

try語句用大括號{}指定了一段代碼,該段代碼可能會拋棄一個或多個例外 ,可以內嵌
** catch語句的參數類似於方法的聲明,包括一個例外類型和一個例外對象。例外類型必須爲Throwable類的子類,它指明瞭catch語句所處理的例外類型,例外對象則由運行時系統在try所指定的代碼塊中生成並被捕獲,大括號中包含對象的處理,其中可以調用對象的方法。
** finally

try所限定的代碼中,當拋棄一個例外時,其後的代碼不會被執行。通過finally語句可以指定一塊代碼。無論try所指定的程序塊中拋棄或不拋棄例外,也無論catch語句的例外類型是否與所拋棄的例外的類型一致,finally所指定的代碼都要被執行,它提供了統一的出口。通常在finally語句中可以進行資源的清除工作。如關閉打開的文件等。
注意: 但有一點值得注意,那就是儘量不要從try區段中返回(調用return),因爲只要有finally區段存在,它就一定會被執行,那麼如果你在finally區段中又調用了一次return語句,則try區段中的返回值將會被遮掩,使得方法調用者得到的是finally區段中的返回值

    public static void main(String[] args){
   		 int n=1,m=0;
   		 int k;
    	try {
       		 k = n/m;
       		 System.out.println("K的值是:"+k);
   		 }catch (RuntimeException e){
       		 System.out.println("除0");
   		 }finally {
        	System.out.println("finally");
   	 }
}

結果:

除0
finally

3.4 try-catch-final哪個可以省略

public static void main(String[] args){
    int n=1,m=0;
    int k;
    try {
        k = n/m;
        System.out.println("K的值是:"+k);
    }catch (RuntimeException e){
        System.out.println("除0");
    }
}
結果是:除0
    public static void main(String[] args){
    int n=1,m=0;
    int k;
    try {
        k = n/m;
        System.out.println("K的值是:"+k);
    } finally {
        System.out.println("finally");
    }
}
結果是:finally
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Execption.ExecptionMain.main(ExecptionMain.java:13)
    public static void main(String[] args){
    int n=1,m=0;
    int k;
    try {
        k = n/m;
        System.out.println("K的值是:"+k);
    }
}
直接報錯;

所以結果是:可以省略catch或者finally,但是不能同時省略兩者。

3.4 final,finally和finalize的區別

final 用於申明屬性,方法和類,表示屬性不可變,方法不可以被覆蓋,類不可以被繼承。
finally 是異常處理語句結構中,表示總是執行的部分。  
finallize 表示是object類一個方法,在垃圾回收機制中執行的時候會被調用被回收對象的方法。允許回收此前未回收的內存垃圾。所有object都繼承了 finalize()方法

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