final, finally, finalize 的區(qū)別
- final是一個關鍵字止潮,可以修飾類凶掰、變量(類變量和成員變量)、方法寄摆。final變量初始化賦值之后棚辽,不允許再被賦值(引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象)冰肴,若試圖修改,編譯器會報錯榔组;final類不允許被繼承熙尉,final類中的所有成員方法會被隱式指定為final方法;final方法不允許被重載搓扯。
特別注意
1)final修飾的引用變量指向的對象內(nèi)容可以改變检痰。
2)當final變量是基本數(shù)據(jù)類型以及String類型時,如果在編譯期間能知道它的確切值锨推,則編譯器會把它當做編譯期常量使用铅歼,不需要在運行時期確定。final方法在編譯階段綁定换可,稱為靜態(tài)綁定(static binding)椎椰。
3)匿名內(nèi)部類中使用的外部局部變量只能是final變量。
4)final成員變量必須在聲明的時候初始化或者在構造器中初始化沾鳄,否則就會報編譯錯誤慨飘;本地變量必須在聲明時賦值。
5)接口中聲明的所有變量本身是final的。
6)final變量可以安全的在多線程環(huán)境下進行共享瓤的,而不需要額外的同步開銷休弃。
finally也是一個關鍵字基矮,主要用于資源回收缘薛。當代碼拋出異常峡碉,該方法中剩余的代碼就不會被執(zhí)行蛇尚,會產(chǎn)生資源回收問題还棱,利用finally塊來關閉已打開的資源哪自。
finalize是一個方法喳整。在垃圾回收器回收分配給對象的存儲空間之前調(diào)用蜀漆,特別注意慎皱,雖然子類可以覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作老虫,但因為很難知道finalize方法什么時候會被調(diào)用,所以不要依靠finalize方法進行資源回收
包裝類
自動將基本類型轉為引用類型的過程稱為裝箱茫多,裝箱的實質(zhì)是調(diào)用包裝器的valueOf方法實現(xiàn)祈匙;自動將引用類型轉為基本類型的過程為拆箱,拆箱的實質(zhì)是調(diào)用包裝器的xxxValue方法(xxx代表對應的基本數(shù)據(jù)類型)實現(xiàn)天揖。
裝箱 Integer num = Integer.valueOf(3);
拆箱 int num = new Integer(3).intValue();
特別注意:
- 裝箱和拆箱發(fā)生在編譯時期夺欲。
- 自動裝箱規(guī)范要求boolean、byte今膊、char 127些阅,介于-128~127之間的short和 int被包裝到固定的對象中,否則創(chuàng)建一個新對象斑唬。
- 對于自增操作市埋,要先拆箱,再計算恕刘,最后裝箱缤谎。
Integer n = 3;
n++;
重載(overload)與重寫(override)
將方法名和參數(shù)列表稱為方法簽名
override(重寫):方法簽名相同,返回值相同
- 方法名褐着、參數(shù)坷澡、返回值相同。
- 子類方法不能縮小父類方法的訪問權限含蓉。
- 子類方法不能拋出比父類方法更多的異常(但子類方法可以不拋出異常)频敛。
- 存在于父類和子類之間。
- 方法被定義為final不能被重寫馅扣。
overload(重載):方法名相同斟赚,參數(shù)不同
- 參數(shù)類型、個數(shù)岂嗓、順序至少有一個不相同汁展。
- 不能重載只有返回值不同的方法名。
- 存在于父類和子類、同類中食绿。
注:重載解析:編譯器根據(jù)各個方法給出的參數(shù)類型與特定方法調(diào)用所使用的值類型進行匹配來挑選出相應的方法