工具類
存放了某一類事物的工具方法的類.
工具類存放的包:工具包(util,utils,tool/tools,helper,helpers),存放工具類.
工具類如何設(shè)計: 工具在開發(fā)中其實只需要存在一份即可.
1): 如果工具方法沒有使用static修飾,說明工具方法得使用工具類的對象來調(diào)用.
此時把工具類設(shè)計為單例的.
2): 如果工具方法全部使用static修飾,說明工具方法只需要使用工具類名調(diào)用即可.
此時必須把工具類的構(gòu)造器私有化(防止創(chuàng)建工具類對象調(diào)用靜態(tài)方法).
一般的,首選第二種,簡單. 在JDK中提供的工具類都是第二種. 如java.util.Arrays類.
包裝類
基本數(shù)據(jù)類型 Java包裝類
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
手動裝箱
// 手動裝箱
Integer a = new Integer(10);
// 手動拆箱
int b = a.intValue();
自動裝箱 - 編譯器提供的語法糖萤捆,編譯后自動幫我們拆裝箱
// 自動裝箱
Integer a = 10;
// 自動拆箱
int b = a;
包裝類的緩存設(shè)計:
享元設(shè)計
// 自動裝箱和valueOf會使用緩存設(shè)計
Integer a = 10;
Integer c = Integer.valueOf(123);
// 不適用緩存設(shè)計 不推薦
Integer b = new Integer(111);
Integer與int的區(qū)別(包裝類型和基本數(shù)據(jù)類型的區(qū)別):
1):默認值:
int的默認值是0.
Integer的默認值為null.
推論:Integer既可以表示null,又可以表示0.
2):包裝類中提供了該類型相關(guān)的很多算法操作方法.
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ā)中,建議使用包裝類型.
abstract
抽象方法
使用abstract修飾且沒有方法體的方法,稱為抽象方法乓梨。
特點:
① 使用抽象abstract修飾鳖轰,方法沒有方法體清酥,留給子類去實現(xiàn)/覆蓋扶镀。
② 抽象方法修飾符不能是private 和 final以及static,為什么焰轻?
③ 抽象方法必須定義在抽象類或接口中臭觉。
一般的:習慣性把abstract寫在方法修飾符最前面,一看就知道是抽象方法辱志。
abstract class Father {
abstract void say();
}
class Son extends Father {
void say(){
}
}
抽象類
使用abstract關(guān)鍵字修飾的類。
特點:
① 不能創(chuàng)建實例即不能new一個抽象類,即使創(chuàng)建出抽象類對象,調(diào)用抽象方法,根本沒有方法體揩懒。
② 可以不包含抽象方法什乙,若一旦包含,該類必須作為抽象類,抽象類可以包含普通方法(留給子類調(diào)用的),抽象類是有構(gòu)造器的,子類構(gòu)造器必須先調(diào)用父類構(gòu)造器已球。
③ 若子類沒有實現(xiàn)/覆蓋父類所有的抽象方法臣镣,那么子類也得作為抽象類(抽象派生類)。
④ 構(gòu)造方法不能都定義成私有的智亮,否則不能有子類(創(chuàng)建子類對象前先調(diào)用父類構(gòu)造方法)忆某。
⑤ 抽象類不能使用final修飾,因為必須有子類阔蛉,抽象方法才能得以實現(xiàn)弃舒。
⑥ 是不完整的類,需作為父類(必須要有子類)状原,功能才能得以實現(xiàn)聋呢。
抽象類:一般的,我們起名,習慣使用Abstract作為前綴,讓調(diào)用者一看就知道是抽象類.
抽象類中可以不存在抽象方法,如此這樣沒有太大的意義,但是可以防止外界創(chuàng)建對象,所以我們會發(fā)現(xiàn)有些工具類沒有抽象方法,但是也使用abstract來修飾..
抽象類不能實例化:
抽象類和普通類的區(qū)別:
普通類有的成員(方法,字段,構(gòu)造器),抽象類都有.
抽象類不能創(chuàng)建對象,抽象類中可以包含抽象方法.
模板方法
模板方法設(shè)計模式:
在父類的一個方法中定義一個總體算法的骨架(模板方法)苗踪,而將某一些一些步驟延遲到子類中,因為不同的子類實現(xiàn)細節(jié)不同削锰。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下徒探,重新定義算法中的某些步驟。
抽象父類負責定義操作中的業(yè)務(wù)骨架喂窟,而把某些具體的實現(xiàn)步驟延遲到子類中去實現(xiàn)测暗。
抽象父類至少提供的方法:
模板方法:一種通用的處理方式,即模板(總體算法的骨架)磨澡;
抽象方法:一種具體的業(yè)務(wù)功能實現(xiàn)碗啄,由子類完成;
注意:抽象父類提供的模版方法只是定義了一個通用算法稳摄,其實現(xiàn)必須依賴子類的輔助稚字。
abstract class AbstractCalculateLength {
final public float work(){
float total = length();
total += 100;
return total;
}
// 定義抽象方法
abstract float length();
}
class Item extends AbstractCalculateLength {
// 子類實現(xiàn)模板方法
float length(){
return 100;
};
}
class Untitled {
public static void main(String[] args) {
Item item = new Item();
item.work();
}
}