1. 對象
名詞解釋
OOA-Object Oriented Analysis-面向?qū)ο蠓治?/p>
OOD-Object Oriented Design-面向?qū)ο笤O(shè)計
OOP-Object Oriented Programming-面向?qū)ο蟪绦蛟O(shè)計
面向?qū)ο蠡咎匦?/p>
萬物皆可為對象:任何一件事物都可以表示為程序中的對象
程序是對象的集合:它們通過發(fā)送信息來告知彼此所需要做的
每個對象都有自己的或有其他對象所構(gòu)成的存儲:如:對象中引用其他對象
每個對象都擁有其類型:每個對象都是某個類class的實例景图,這里的類就是指類型
某一指定類型的所有對象都可以接受相同的信息:如:person對象擁有father和mother對象的所有性質(zhì)
一句話總結(jié)就是:對象具有狀態(tài)行為和標識英支,內(nèi)部數(shù)據(jù)即狀態(tài)-方法即行為-存在內(nèi)存中的唯一地址即標識
面向?qū)ο笕齻€特性
- 封裝(encapsulate):把客觀事物封裝成抽象的類,并且類中的屬性和方法有自己指定的訪問權(quán)限潜沦。隱藏具體細節(jié),是調(diào)用者只能遵循自己定義的規(guī)則绪氛,方便權(quán)限控制唆鸡。
權(quán)限控制 | 類 | 本包 | 子類 | 外部包 |
---|---|---|---|---|
private | √ | X | X | X |
default | √ | √ | X | X |
protected | √ | √ | √ | X |
public | √ | √ | √ | √ |
繼承:指子類有父類所有的功能,并可以重寫或補充自己的方法钞楼。
關(guān)鍵字:extends 喇闸,Java是單繼承關(guān)系所有對象的父類都是Object,多繼承容易使代碼混亂询件,單繼承使只有一個父類代碼邏輯更清晰如:它們都是相同的數(shù)據(jù)類型都有相同的方法功能且單繼承結(jié)構(gòu)對垃圾回收機制實現(xiàn)變得容易的多燃乍。Java是單繼承多實現(xiàn)接口的結(jié)構(gòu)。
重載(overloading):同一個類中有相同的方法名字不同的參數(shù)叫做方法重載宛琅。
重寫(overriding):兩個類之間必須存在繼承關(guān)系刻蟹,且子類重寫了父類中有的方法,包括方法名字參數(shù)返回值都相同嘿辟,如果需要調(diào)用父類中方法須用super關(guān)鍵字調(diào)用舆瘪。多態(tài):指一個實現(xiàn)類在不同的情景下有不同的實現(xiàn)方式,即不同的類可以實現(xiàn)相同的接口來完成不同的任務(wù)红伦,但我們可以通過相同的方式予以調(diào)用英古。
條件:必須存在繼承關(guān)系,子類重寫父類的方法昙读,向下轉(zhuǎn)型召调。
轉(zhuǎn)化規(guī)則:子類轉(zhuǎn)換父類向上轉(zhuǎn)型可直接賦值,父類轉(zhuǎn)換子類向下轉(zhuǎn)型許強制類型轉(zhuǎn)換且無法調(diào)用子類特有方法。
對象的生命周期
對象在堆(heap)的內(nèi)存池中動態(tài)的創(chuàng)建唠叛,這種方式只有運行時才能知道有多少對象需要被創(chuàng)建只嚣,他們的生命周期如何,以及它們的具體類型艺沼。
Java用NEW關(guān)鍵字來創(chuàng)建對象册舞,Java提供垃圾回收的機制,它可以自動發(fā)現(xiàn)對象何時不再使用并繼而銷毀它障般。
異常處理
異常也是一種對象调鲸,它往往處于編程語言中,與程序正常執(zhí)行路徑并行挽荡,在發(fā)生錯誤時執(zhí)行另一條路徑线得。因為是完全另一條路徑執(zhí)行,所以不會干擾正常代碼的運行徐伐。
Java從一開始就內(nèi)置了異常處理贯钩,它要求你必須使用它,如果沒有編寫正確的異常處理代碼办素,在編譯時就會報錯角雷,這也是Java健壯性和安全性的表現(xiàn)。
并發(fā)編程
我們想把問題分割成多個可獨立運行的任務(wù)性穿,在程序中這些獨立運行的部分叫做線程勺三,這就是并發(fā)。
當多個線程訪問同一個資源的時候有可能會有問題需曾,我們必須使某個線程鎖定某個資源吗坚,完成其任務(wù)后釋放資源,這是線程鎖也叫同步線程呆万。
對象存儲位置
寄存器:這是最快的儲存區(qū)商源,位于處理器內(nèi)部,我們無法用程序操控它也無法感知它的存在谋减。
堆棧:位于RAM(隨機訪問儲存器)中牡彻,堆棧指針下移分配內(nèi)存上移釋放內(nèi)存,速度僅次于寄存區(qū)出爹,Java系統(tǒng)必須知道所有項的生命周期以便用上下移動堆棧指針庄吼,雖然某些數(shù)據(jù)(對象引用)存儲其中,但對象本身并不在其中严就。
堆:一種通用的內(nèi)存池也存在RAM中总寻,用于存放所有Java對象。不需要知道對象的生命周期梢为,需要的時候直接NEW出一個對象堆堆自動分配空間渐行,但當清理的時候卻要花費點時間技矮。
常量儲存:常量因為是不會被改變的所以通常放在程序中,也可以放在ROM(只讀存儲器)中殊轴。
非RAM存儲:一些對象完全存活于數(shù)據(jù)之外比如:流對象和持久化對象。這種對象通常存儲在硬盤上袒炉。
特例基本類型:創(chuàng)建一個并非是引用的自動變量旁理,直接存儲在棧中,因此更加高效我磁。
用引用操作對象:就像遙控器操縱電視機一樣孽文,沒有電視機遙控器還可以存在只是不能發(fā)出任何消息,所以為了安全起見創(chuàng)建一個引用的時候就初始化一個對象夺艰。
2. 類
作用域
作用域決定了其內(nèi)部變量的可見性和生命周期芋哭,用花括號表示。但用new創(chuàng)建的引用對象郁副,它可以存活于作用域之外减牺,雖然引用對象不能用了,但是new出來的對象還一直在內(nèi)存中存谎,Java通過垃圾回收機制最終回收無用的對象拔疚,finalize方法在垃圾回收之前調(diào)用,但不推薦使用既荚。
類
用class關(guān)鍵字后面緊跟著新的類型名稱稚失,用來抽象某一類的對象。命名方式:首字母大寫每個單詞的首字母大寫恰聘。
依賴(uses-a)(dependence)
聚合(has-a)(aggregation)
繼承(is-a)(inheritance)
設(shè)計類時盡量做到高內(nèi)聚低耦合
所有的標識符都應(yīng)該以字母(A-Z或者a-z),美元符($)句各、或者下劃線(_)開始。
屬性
屬性就是對象本身的一些描述字段晴叨,他可以是基本數(shù)據(jù)類型也可以是其他對象的引用凿宾。命名方式:首字母小寫每個單詞的首字母大寫。
方法-參數(shù)-返回值
方法是對象行為的描述兼蕊,可以有很多方法菌湃,利用傳遞的參數(shù)做業(yè)務(wù)處理返回想要得到的值罢杉。命名方式:首字母小寫每個單詞的首字母大寫熟呛。
構(gòu)造器:與類名相同胖笛,每個類可以有一個以上的構(gòu)造器燕垃,沒有返回值妨马,伴隨new關(guān)鍵字被調(diào)用术健。一個類中如果沒有構(gòu)造器矫钓,系統(tǒng)就會默認一個無參的構(gòu)造器署拟,數(shù)值型為0蕾久,布爾型為false势似,對象為null。
static
static類是不被允許的,通常使用內(nèi)部類實現(xiàn)靜態(tài)類履因。
static方法在類被加載后jvm就可以在運行時數(shù)據(jù)區(qū)讀取到障簿,因此不依賴創(chuàng)建對象就可以直接調(diào)用類名.方法名()≌て可以調(diào)用其他static方法站故,只能調(diào)用static數(shù)據(jù),不能用super和this調(diào)用毅舆。
static變量在jvm加載的時候只會分配一塊內(nèi)存(節(jié)省內(nèi)存)西篓,可以用類名.變量名來調(diào)用,private static表示私有的靜態(tài)數(shù)據(jù)憋活。而實例變量會每new一個對象就是一塊內(nèi)存岂津。
static代碼塊通常叫做靜態(tài)代碼塊,在類加載的時候被順序執(zhí)行悦即,在構(gòu)造方法之前執(zhí)行吮成。
final
final類不能被繼承,里面的方法都是final的辜梳,沒有繼承所以就沒有重寫赁豆。
final方法不允許被覆蓋,為了鎖定其方法不被擴展或者為了提高效率冗美。private方法無法繼承因此private方法默認是final的(有爭議)魔种。
final變量一但被賦值就無法改變。
final參數(shù)可以運用但不能被改變粉洼。
final+static表示不能被改變的靜態(tài)數(shù)據(jù)或方法也叫全局常量节预。
初始化數(shù)據(jù)
在聲明中賦值
在初始化塊中賦值
在構(gòu)造方法中賦值
聲明>初始化塊>構(gòu)造方法
包(package)
將類組織起來,一般用域名的逆序作為包名属韧。如果一個類里面引用相同名字的外部類安拟,可以通過inport關(guān)鍵字導(dǎo)入包路徑來區(qū)分。
注釋
單行(//)以及多行注釋(/* */)宵喂,注釋內(nèi)容Java虛擬機會自動過濾糠赦。
注釋文檔:JavaDoc可以生成html文檔,以@符號為標識符如:@version锅棕。
不積小流拙泽,無以成江海