抽象類與接口,final finalize finally,文件複製過程出錯情況

 一:複習抽象類與接口:

使用abstract class的方式定義Demo抽象類的方式如下:  

abstract class Demo {  
 abstract void method1();  
 abstract void method2();  
 …  
}  

使用interface的方式定義Demo抽象類的方式如下:  

interface Demo {  
 void method1();  
 void method2();  
 …  
}  

在abstract class方式中,Demo可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface方式的實現中,Demo只能夠有靜態的不能被修改的數據成員(也就是必須是static final的,不過在interface中一般不定義數據成員),所有的成員方法都是abstract的。從某種意義上說,interface是一種特殊形式的abstract class。  

首先,abstract class在Java語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface。也許,這是Java語言的設計者在考慮Java對於多重繼承的支持方面的一種折中考慮吧。  

其次,在abstract class的定義中,我們可以賦予方法的默認行爲。但是在interface的定義中,方法卻不能擁有默認行爲

二:final,finally,finalize

 

原創  java final,finally,finalize final—修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作爲父類被繼承。因此一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,可以保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明爲final的方法也同樣只能使用,不能重載。 


finally—異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。一般異常處理塊需要。

finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
 比如我的下載資源裏的ICTCLAS系統實現的對C++語言的編程調用,在釋放對象時需要該方法。

Java中所有類都從Object類中 繼承finalize()方法。
當垃圾回收器(garbage colector)決定回收某對象時,就會運行該對象的finalize()方法。值得C++程序員注意的是,finalize()方法並不能等同與析構函數。Java中是沒有析構函數的。C++的析構函數是在對象消亡時運行的。由於C++沒有垃圾回收,對象空間手動回收,所以一旦對象用不到時,程序員就應當把它delete()掉。所以析構函數中經常做一些文件保存之類的收尾工作。但是在Java中很不幸,如果內存總是充足的,那麼垃圾回收可能永遠不會進行,也就是說filalize()可能永遠不被執行,顯然指望它做收尾工作是靠不住的。

那麼finalize()究竟是做什麼的呢?它最主要的用途是回收特殊渠道申請的內存。Java程序有垃圾回收器,所以一般情況下內存問題不用程序員操心。但有一種JNI(Java Native Interface)調用non-Java程序(C或C++),finalize()的工作就是回收這部分的內存。

三:文件複製過程

1:被複制目錄的長度超過255個字符

2:被複制磁盤已滿

3:複製文件過大導致被複制磁盤已滿

4:權限的限制

5:被複制文件已存在,或文件重名

 

 

 

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