核心思想:找適合的對象做適合的事情蜗字。
自定義類
自定義類的三步驟:
1伸眶、自定義類
class 類名 {
// 事物的公共屬性使用變量描述
// 事物的公共行為使用函數(shù)描述
}
2、通過類創(chuàng)建對象
類名 變量名 = new 類名();
3、訪問(設(shè)置)對象的屬性或調(diào)用對象的功能事哭。
抽象類 用abstract修飾
應(yīng)用場景:
描述一類事物的時候,該種事物存在某種行為瓜富,但是該行為目前不是具體的行為鳍咱,那么就可以抽取該種行為的聲明,但是不去實現(xiàn)該行為与柑,這種行為就叫抽象行為谤辜,該類就叫抽象類
好處: 強制要求子類必須實現(xiàn)基類的抽象方法。
注意事項:
- 如果一個函數(shù)沒有方法體价捧,該函數(shù)必須使用abstract修飾丑念,把該函數(shù)修飾成抽象的函數(shù)。
- 如果一個類中出現(xiàn)了抽象的函數(shù)结蟋,那么該類也必須使用abstract修飾脯倚。
- 如果一個非抽象類繼承了一個抽象類,那么必須把抽象類的所有抽象方法都實現(xiàn)嵌屎。
- 抽象類中可以存在非抽象的方法推正。
- 抽象類可以不存在抽象方法恍涂。
- 抽象類不能創(chuàng)建對象。
- 抽象類是存在構(gòu)造方法的植榕,其構(gòu)造方法是提供給其子類創(chuàng)建對象使用的再沧。
匿名對象
定義:沒有引用類型變量指向的對象。
需要注意的事項:
- 一般不會給匿名對象賦予屬性值内贮,因為永遠無法取到产园。
- 兩個匿名對象永遠都不可能是同一個對象。
應(yīng)用場景: - 當(dāng)一個對象需要調(diào)用一個方法夜郁,調(diào)用完這個對象就不再使用了什燕,可以使用匿名對象,節(jié)省內(nèi)存空間竞端。
- 可以作為實參調(diào)用一個函數(shù)屎即。
面向?qū)ο蟮娜筇卣鳎悍庋b、繼承事富、多態(tài)
封裝
權(quán)限修飾符:控制變量的可見范圍技俐。
- public 修飾的成員變量或者方法任何人都可以直接訪問。
- private 修飾的成員變量或者方法只能本類進行直接訪問统台。
封裝的步驟:
- 使用private修飾需要封裝的屬性雕擂。
- 提供一個公共的方法設(shè)置或者獲取該私有的成員屬性。
命名規(guī)范:
set屬性名();
get屬性名();
封裝的好處:
- 提高數(shù)據(jù)安全性
- 操作簡單
- 隱藏了實現(xiàn)
繼承:is a 關(guān)系
繼承的格式:
class 類名1 extends 類名2 {
// 類內(nèi)容
}
類名1稱為子類贱勃,類名2稱為基類(父類/超類)井赌;
注意事項:
- 只有真正存在繼承關(guān)系的時候才能使用繼承。
- 基類私有的成員不能被繼承贵扰。
- 基類的構(gòu)造函數(shù)不能被繼承仇穗。
- 創(chuàng)建子類對象時默認會先調(diào)用父類無參的構(gòu)造函數(shù)。
方法重寫: 子類中重寫父類的方法
什么時候使用方法重寫: 父類的功能不能滿足子類的需求時戚绕。
方法重寫的注意事項:
- 方法名和形參列表必須一致纹坐。
- 子類的權(quán)限修飾符必須要大于或者等于父類方法的權(quán)限修飾符。
- 子類的返回值類型必須要小于或等于父類的返回值類型舞丛。
4.子類拋出的異常類型必須要小于或等于父類拋出的異常類型耘子。
多態(tài)
定義:父類的引用類型變量指向了子類的對象。
前提:必須存在繼承或者實現(xiàn)關(guān)系瓷马。
注意事項:
- 多態(tài)情況下拴还,子父類存在同名的成員時,訪問的都是父類的成員欧聘,只有當(dāng)成員為非靜態(tài)方法時,訪問的是子類方法端盆。
- 多態(tài)情況下怀骤,不能訪問子類特有的成員费封。
多態(tài)應(yīng)用: - 用于形參類型時,可以接收更多類型的數(shù)據(jù)蒋伦。
- 用于返回值類型時弓摘,可以返回更多類型的數(shù)據(jù)。
構(gòu)造函數(shù)
作用:給對應(yīng)的對象初始化痕届。
定義格式:
修飾符 函數(shù)名() {
函數(shù)體韧献;
}
注意細節(jié):
- 構(gòu)造函數(shù)沒有返回值。
- 構(gòu)造函數(shù)函數(shù)名必須要與類名一樣研叫。
- 構(gòu)造函數(shù)是在創(chuàng)建對象的時候自動調(diào)用的锤窑,不能手動調(diào)用。
- 沒有給類寫構(gòu)造方法時嚷炉,那么Java編譯器在編譯時會為該類添加一個無參的構(gòu)造函數(shù)渊啰。
- 構(gòu)造函數(shù)可以以函數(shù)重載的形式存在多個的,創(chuàng)建對象時只調(diào)用參數(shù)對應(yīng)的那個申屹。
代碼塊
- 構(gòu)造代碼塊
- 局部代碼塊
- 靜態(tài)代碼塊
構(gòu)造代碼塊
作用:給對象進行統(tǒng)一的初始化绘证。
格式:
{
構(gòu)造代碼塊;
}
放的位置:在類的任何一個方法外面哗讥,和類的屬性位置平齊嚷那。
注意:
- 構(gòu)造代碼塊中的代碼在編譯時,會放在構(gòu)造函數(shù)中執(zhí)行杆煞,而且是放在前面執(zhí)行魏宽,構(gòu)造函數(shù)中的代碼最后執(zhí)行。
- 成員變量的顯示賦值和代碼塊中的賦值索绪,是按照代碼書寫的順序執(zhí)行的湖员。
局部代碼塊
大括號位于方法內(nèi),一般不會用瑞驱。
靜態(tài)代碼塊
this 關(guān)鍵字
代表所屬函數(shù)的調(diào)用者娘摔,即誰調(diào)用就this就指向誰。
作用:
- 指向它的調(diào)用者唤反。
- 在一個構(gòu)造函數(shù)中凳寺,通過this(形參);方式,調(diào)用本類中的其他構(gòu)造函數(shù)彤侍。
注意:
- this(形參); 必須放在第一行肠缨。
- 不能調(diào)用本構(gòu)造函數(shù),否則出現(xiàn)死循環(huán)盏阶。
super 關(guān)鍵字
super關(guān)鍵字代表了父類空間的引用晒奕。
作用:
- 子類中存在著和父類同名的成員時,默認訪問子類的成員,通過super關(guān)鍵字指定訪問父類的成員脑慧。
- 創(chuàng)建子類對象時魄眉,默認會調(diào)用父類無參的構(gòu)造函數(shù),通過super指定調(diào)用父類帶參的構(gòu)造函數(shù)闷袒。
instanceof 關(guān)鍵字
判斷一個對象是否屬于指定的類型坑律。
使用前提:判斷的對象與指定的類別必須要存在繼承或?qū)崿F(xiàn)的關(guān)系。
使用格式:
對象 instanceof 類名
final 修飾符
用法:
- 修飾基本類型的變量時囊骤,該變量初始化后其值不可再次修改晃择。
- 修飾引用類型的變量時,該變量不能改變其指向的對象也物。
- 修飾一個方法時宫屠,該方法不能被重寫。
- 修飾一個類時焦除,該類不能被繼承激况。
常量的修飾符一般為: public static final
static 修飾符
應(yīng)用場景:當(dāng)變量需要被所有對象共享時使用。
作用:
- static修飾符修飾的成員變量膘魄,在實例化時不會每個對象都維護一份乌逐,而是只在數(shù)據(jù)共享
區(qū)維護一份,所有的同類型的對象共享创葡。
靜態(tài)成員變量的訪問方式:
- 點 對象.變量名
- 類直接訪問 類名.變量名 (非靜態(tài)成員變量不能使用此方式訪問)
- static修飾符修飾方法時
訪問方式1:使用對象進行訪問
對象名.靜態(tài)函數(shù)名();
訪問方式2:類名進行訪問
類名.靜態(tài)函數(shù)名字
注意事項:
- 靜態(tài)函數(shù)可以使用對象或類名進行訪問浙踢,而非靜態(tài)函數(shù)不能使用類名訪問。
- 靜態(tài)函數(shù)內(nèi)可以直接訪問靜態(tài)成員灿渴,不能直接訪問非靜態(tài)成員洛波。
- 非靜態(tài)函數(shù)可以對靜態(tài)成員和非靜態(tài)成員都可以直接訪問。
- 靜態(tài)函數(shù)不能出現(xiàn)this和super關(guān)鍵字骚露。
靜態(tài)數(shù)據(jù)的生命周期:
- 靜態(tài)的數(shù)據(jù)是在類文件加載時執(zhí)行一次蹬挤,優(yōu)先于對象存在的。
靜態(tài)成員數(shù)據(jù)存儲的位置:
靜態(tài)成員數(shù)據(jù)存在方法區(qū)的數(shù)據(jù)共享區(qū)棘幸,而非靜態(tài)成員變量存儲在堆內(nèi)存中焰扳。
main函數(shù)
格式:
public static void main() {
代碼區(qū);
}
解讀:
public:公共的误续,權(quán)限很大吨悍,在任何情況下都可以訪問。
static: 靜態(tài)蹋嵌,可以讓jvm調(diào)用main函數(shù)時育瓜,不需要通過對象調(diào)用,直接調(diào)用既可栽烂。
設(shè)計模式
單例設(shè)計模式(餓漢單例設(shè)計模式)
解決的問題:保證一個類在內(nèi)存中只有一個對象躏仇。
設(shè)計模式步驟:
- 私有化構(gòu)造函數(shù)
- 聲明本類的引用類型變量(private static)恋脚,并使用該變量指向本類對象,即在本類中實例化本身钙态。
- 提供一個公共的靜態(tài)的方法獲取本類的對象慧起。
class Single {
private static Single s = new Single(); // 在本類中實例化本身
private Single { } // 私有化構(gòu)造函數(shù)
public static Single getInstance () { // 提供一個公共靜態(tài)方法獲取本類對象
return s;
}
}
// 使用
Single s1 = Single.getInstance();
單例設(shè)計模式(懶漢單例設(shè)計模式)
步驟:
- 私有化構(gòu)造函數(shù)
- 聲明本類的引用類型變量菇晃,不創(chuàng)建本類的對象
- 提供公共靜態(tài)的方法獲取本類對象册倒,返回之前,先判斷是否創(chuàng)建了本類對象磺送,若沒有創(chuàng)建則創(chuàng)建驻子,若已經(jīng)創(chuàng)建了,則直接返回估灿。
class Single {
private static Single s = null; // 在本類中實例化本身
private Single { } // 私有化構(gòu)造函數(shù)
public static Single getInstance () { // 提供一個公共靜態(tài)方法獲取本類對象
if (s == null) {
s = new Single();
}
return s;
}
}
// 使用
Single s1 = Single.getInstance();
注意:推薦使用餓漢單例設(shè)計模式崇呵,因為懶漢設(shè)計模式可能存在線程安全問題。
接口
為了拓展功能馅袁。
定義格式:
interface 接口名 {
}
注意事項:
- 接口是一個特殊的類域慷。
- 接口中的成員變量默認修飾符為:public static final,就是說接口中的成員變量都是常量汗销。
- 接口中的方法都是抽象的方法犹褒,默認修飾符為:public abstract。
- 接口不能創(chuàng)建對象弛针,因為接口中的方法是抽象叠骑,成員變量時常量。
- 接口是沒有構(gòu)造方法的削茁。
- 接口是給類去使用的宙枷, 非抽象類實現(xiàn)一個接口時,必須把類中的所有方法都實現(xiàn)茧跋。
接口的作用:
- 程序的解耦慰丛。
- 定義約束規(guī)范。
- 拓展功能瘾杭。
類使用接口格式:
class 類名 implements 接口名 {
// 代碼
}