1、代碼塊
根據(jù)代碼塊定義位置不同分為三種
?局部代碼塊:直接定義在方法內(nèi)部的代碼塊
初始化代碼塊(構造代碼塊):直接定義在類中.
靜態(tài)代碼塊:使用static修飾的初始化代碼塊.
一般會有此類面試題,結(jié)合繼承分析執(zhí)行順序。
父類靜態(tài)塊?—>子類靜態(tài)塊?—>父類構造塊?—>父類構造函數(shù)?—>子類構造塊?—>子類構造函數(shù)
http://blog.sina.com.cn/s/blog_812973c30101okqj.html
2、final
final修飾的類: 表示最終的類, 該類不能再有子類.
只要滿足以下條件就可以把一個類設計成final類:
① 某類不是專門為繼承而設計。
② 出于安全考慮,類的實現(xiàn)細節(jié)不許改動,不準修改源代碼。
③ 確信該類不會再被拓展。
final修飾的方法: 最終的方法,該方法不能被子類覆蓋.
什么時候的方法需要使用final修飾.
? ? ? ? ? 1):在父類中提供的統(tǒng)一的算法骨架,不準子類通過方法覆蓋來修改. 此時使用final修飾.模板方法設計模式.
? ? ? ? ? 2):在構造器中調(diào)用的方法(初始化方法),此時一般使用final修飾.
final修飾的變量: 最終的變量,常量,該變量只能賦值一次,不能再賦值.
? ? ? ? final是唯一可以修飾局部變量的修飾符.
1):final變量必須顯示地指定初始值,系統(tǒng)不會為final字段初始化。
2):final變量一旦賦予初始值,就不能被重新賦值。
3):常量名規(guī)范:常量名符合標識符,單詞全部使用大寫字母,如果是多個單詞組成,單詞間使用下劃線隔開。
? ? int類型的最大值:? final int MAX_VALUE = ....;
? ? 補充概念:全局靜態(tài)常量: public? static? final 修飾的變量,直接使用類名調(diào)用即可.
面試題: final修飾的引用類型變量到底表示引用的地址不能改變,還是引用空間中的數(shù)據(jù)不能改變.
final修飾基本類型變量:表示該變量的值不能改變,即不能用“=”號重新賦值。
final修飾引用類型變量:表示該變量的引用的地址不能變,而不是引用地址里的內(nèi)容不能變。
final是唯一可以修飾局部變量的修飾符,目的何在?期待局部內(nèi)部類.局部內(nèi)部類只能訪問final修飾的局部變量
什么時候使用常量:
? ? 當在程序中,多個地方使用到共同的數(shù)據(jù),且該數(shù)據(jù)不會改變,此時我們專門定義全局的常量,
? ? 一般的,我們在開發(fā)中會專門定義一個常量類,專門用來存儲常量數(shù)據(jù).
3、工具類:存放了某一類事物的工具方法的類.
工具類存放的包:工具包(util,utils,tool/tools,helper,helpers),存放工具類.
工具類起名: XxxUtil/XxxUtils/XxxXTool/XxxTools.Xxx表示一類事物,
? ? ? ? ? ? ? 比如ArrayUtil,StringUtil,JdbcUtil.
----------------------------------------------------------------------
工具類如何設計: 工具在開發(fā)中其實只需要存在一份即可.
? ? ? 1):如果工具方法沒有使用static修飾,說明工具方法得使用工具類的對象來調(diào)用.
? ? ? ? ? ? 此時把工具類設計為單例的.
? ? ? 2):如果工具方法全部使用static修飾,說明工具方法只需要使用工具類名調(diào)用即可.
? ? ? ? ? ? 此時必須把工具類的構造器私有化(防止創(chuàng)建工具類對象調(diào)用靜態(tài)方法).
----------------------------------------------------------------------
一般的,首選第二種,簡單. 在JDK中提供的工具類都是第二種. 如java.util.Arrays類.
4、基本類型包裝類
自動裝箱:可把一個基本類型變量直接賦給對應的包裝類變量。
自動拆箱:允許把包裝類對象直接賦給對應的基本數(shù)據(jù)類型變量。
在底層依然是手動裝箱和拆箱操作.
但是:裝箱操作使用的是Integer.valueOf的方式,而不是直接new Integer.
Integer與int的區(qū)別(包裝類型和基本數(shù)據(jù)類型的區(qū)別):
? 1):默認值: int的默認值是0. ? ? ?Integer的默認值為null.
? ? ? ? ? ? 推論:Integer既可以表示null,又可以表示0.
? 2):包裝類中提供了該類型相關的很多算法操作方法.
? ? ? ? static String toBinaryString(int i) :把十進制轉(zhuǎn)換為二進制
? ? ? ? static String toOctalString(int i) : :把十進制轉(zhuǎn)換為八進制
? ? ? ? static String toHexString(int i) : :把十進制轉(zhuǎn)換為十六進制
? 3):在集合框架中,只能存儲對象類型,不能存儲基本數(shù)據(jù)類型值.
? 4):請問:Integer和int是相同的數(shù)據(jù)類型嗎?不是:? ? ? ?
? 5): 方法中的,基本類型變量存儲在棧中,包裝類型存放于堆中. ? 開發(fā)中,建議使用包裝類型.