第二章----對(duì)象和類

Java

1. 對(duì)象

名詞解釋

  • OOA-Object Oriented Analysis-面向?qū)ο蠓治?/p>

  • OOD-Object Oriented Design-面向?qū)ο笤O(shè)計(jì)

  • OOP-Object Oriented Programming-面向?qū)ο蟪绦蛟O(shè)計(jì)

面向?qū)ο蠡咎匦?/p>

  • 萬物皆可為對(duì)象:任何一件事物都可以表示為程序中的對(duì)象

  • 程序是對(duì)象的集合:它們通過發(fā)送信息來告知彼此所需要做的

  • 每個(gè)對(duì)象都有自己的或有其他對(duì)象所構(gòu)成的存儲(chǔ):如:對(duì)象中引用其他對(duì)象

  • 每個(gè)對(duì)象都擁有其類型:每個(gè)對(duì)象都是某個(gè)類class的實(shí)例,這里的類就是指類型

  • 某一指定類型的所有對(duì)象都可以接受相同的信息:如:person對(duì)象擁有father和mother對(duì)象的所有性質(zhì)

一句話總結(jié)就是:對(duì)象具有狀態(tài)行為和標(biāo)識(shí),內(nèi)部數(shù)據(jù)即狀態(tài)-方法即行為-存在內(nèi)存中的唯一地址即標(biāo)識(shí)

面向?qū)ο笕齻€(gè)特性

  • 封裝(encapsulate):把客觀事物封裝成抽象的類,并且類中的屬性和方法有自己指定的訪問權(quán)限。隱藏具體細(xì)節(jié),是調(diào)用者只能遵循自己定義的規(guī)則,方便權(quán)限控制。
權(quán)限控制 本包 子類 外部包
private X X X
default X X
protected X
public
  • 繼承:指子類有父類所有的功能,并可以重寫或補(bǔ)充自己的方法。
    關(guān)鍵字:extends ,Java是單繼承關(guān)系所有對(duì)象的父類都是Object,多繼承容易使代碼混亂,單繼承使只有一個(gè)父類代碼邏輯更清晰如:它們都是相同的數(shù)據(jù)類型都有相同的方法功能且單繼承結(jié)構(gòu)對(duì)垃圾回收機(jī)制實(shí)現(xiàn)變得容易的多。Java是單繼承多實(shí)現(xiàn)接口的結(jié)構(gòu)。
    重載(overloading):同一個(gè)類中有相同的方法名字不同的參數(shù)叫做方法重載。
    重寫(overriding):兩個(gè)類之間必須存在繼承關(guān)系,且子類重寫了父類中有的方法,包括方法名字參數(shù)返回值都相同,如果需要調(diào)用父類中方法須用super關(guān)鍵字調(diào)用。

  • 多態(tài):指一個(gè)實(shí)現(xiàn)類在不同的情景下有不同的實(shí)現(xiàn)方式,即不同的類可以實(shí)現(xiàn)相同的接口來完成不同的任務(wù),但我們可以通過相同的方式予以調(diào)用。
    條件:必須存在繼承關(guān)系,子類重寫父類的方法,向下轉(zhuǎn)型。
    轉(zhuǎn)化規(guī)則:子類轉(zhuǎn)換父類向上轉(zhuǎn)型可直接賦值,父類轉(zhuǎn)換子類向下轉(zhuǎn)型許強(qiáng)制類型轉(zhuǎn)換且無法調(diào)用子類特有方法。

對(duì)象的生命周期

對(duì)象在堆(heap)的內(nèi)存池中動(dòng)態(tài)的創(chuàng)建,這種方式只有運(yùn)行時(shí)才能知道有多少對(duì)象需要被創(chuàng)建,他們的生命周期如何,以及它們的具體類型。

Java用NEW關(guān)鍵字來創(chuàng)建對(duì)象,Java提供垃圾回收的機(jī)制,它可以自動(dòng)發(fā)現(xiàn)對(duì)象何時(shí)不再使用并繼而銷毀它。

異常處理

異常也是一種對(duì)象,它往往處于編程語言中,與程序正常執(zhí)行路徑并行,在發(fā)生錯(cuò)誤時(shí)執(zhí)行另一條路徑。因?yàn)槭峭耆硪粭l路徑執(zhí)行,所以不會(huì)干擾正常代碼的運(yùn)行。

Java從一開始就內(nèi)置了異常處理,它要求你必須使用它,如果沒有編寫正確的異常處理代碼,在編譯時(shí)就會(huì)報(bào)錯(cuò),這也是Java健壯性和安全性的表現(xiàn)。

并發(fā)編程

我們想把問題分割成多個(gè)可獨(dú)立運(yùn)行的任務(wù),在程序中這些獨(dú)立運(yùn)行的部分叫做線程,這就是并發(fā)。

當(dāng)多個(gè)線程訪問同一個(gè)資源的時(shí)候有可能會(huì)有問題,我們必須使某個(gè)線程鎖定某個(gè)資源,完成其任務(wù)后釋放資源,這是線程鎖也叫同步線程。

對(duì)象存儲(chǔ)位置

寄存器:這是最快的儲(chǔ)存區(qū),位于處理器內(nèi)部,我們無法用程序操控它也無法感知它的存在。

堆棧:位于RAM(隨機(jī)訪問儲(chǔ)存器)中,堆棧指針下移分配內(nèi)存上移釋放內(nèi)存,速度僅次于寄存區(qū),Java系統(tǒng)必須知道所有項(xiàng)的生命周期以便用上下移動(dòng)堆棧指針,雖然某些數(shù)據(jù)(對(duì)象引用)存儲(chǔ)其中,但對(duì)象本身并不在其中。

堆:一種通用的內(nèi)存池也存在RAM中,用于存放所有Java對(duì)象。不需要知道對(duì)象的生命周期,需要的時(shí)候直接NEW出一個(gè)對(duì)象堆堆自動(dòng)分配空間,但當(dāng)清理的時(shí)候卻要花費(fèi)點(diǎn)時(shí)間。

常量?jī)?chǔ)存:常量因?yàn)槭遣粫?huì)被改變的所以通常放在程序中,也可以放在ROM(只讀存儲(chǔ)器)中。

非RAM存儲(chǔ):一些對(duì)象完全存活于數(shù)據(jù)之外比如:流對(duì)象和持久化對(duì)象。這種對(duì)象通常存儲(chǔ)在硬盤上。

特例基本類型:創(chuàng)建一個(gè)并非是引用的自動(dòng)變量,直接存儲(chǔ)在棧中,因此更加高效。

用引用操作對(duì)象:就像遙控器操縱電視機(jī)一樣,沒有電視機(jī)遙控器還可以存在只是不能發(fā)出任何消息,所以為了安全起見創(chuàng)建一個(gè)引用的時(shí)候就初始化一個(gè)對(duì)象。

2. 類

作用域

作用域決定了其內(nèi)部變量的可見性和生命周期,用花括號(hào)表示。但用new創(chuàng)建的引用對(duì)象,它可以存活于作用域之外,雖然引用對(duì)象不能用了,但是new出來的對(duì)象還一直在內(nèi)存中,Java通過垃圾回收機(jī)制最終回收無用的對(duì)象,finalize方法在垃圾回收之前調(diào)用,但不推薦使用。

用class關(guān)鍵字后面緊跟著新的類型名稱,用來抽象某一類的對(duì)象。命名方式:首字母大寫每個(gè)單詞的首字母大寫。

依賴(uses-a)(dependence)

聚合(has-a)(aggregation)

繼承(is-a)(inheritance)

設(shè)計(jì)類時(shí)盡量做到高內(nèi)聚低耦合

所有的標(biāo)識(shí)符都應(yīng)該以字母(A-Z或者a-z),美元符($)、或者下劃線(_)開始。

屬性

屬性就是對(duì)象本身的一些描述字段,他可以是基本數(shù)據(jù)類型也可以是其他對(duì)象的引用。命名方式:首字母小寫每個(gè)單詞的首字母大寫。

方法-參數(shù)-返回值

方法是對(duì)象行為的描述,可以有很多方法,利用傳遞的參數(shù)做業(yè)務(wù)處理返回想要得到的值。命名方式:首字母小寫每個(gè)單詞的首字母大寫。

構(gòu)造器:與類名相同,每個(gè)類可以有一個(gè)以上的構(gòu)造器,沒有返回值,伴隨new關(guān)鍵字被調(diào)用。一個(gè)類中如果沒有構(gòu)造器,系統(tǒng)就會(huì)默認(rèn)一個(gè)無參的構(gòu)造器,數(shù)值型為0,布爾型為false,對(duì)象為null。

static

static類是不被允許的,通常使用內(nèi)部類實(shí)現(xiàn)靜態(tài)類。

static方法在類被加載后jvm就可以在運(yùn)行時(shí)數(shù)據(jù)區(qū)讀取到,因此不依賴創(chuàng)建對(duì)象就可以直接調(diào)用類名.方法名()??梢哉{(diào)用其他static方法,只能調(diào)用static數(shù)據(jù),不能用super和this調(diào)用。

static變量在jvm加載的時(shí)候只會(huì)分配一塊內(nèi)存(節(jié)省內(nèi)存),可以用類名.變量名來調(diào)用,private static表示私有的靜態(tài)數(shù)據(jù)。而實(shí)例變量會(huì)每new一個(gè)對(duì)象就是一塊內(nèi)存。

static代碼塊通常叫做靜態(tài)代碼塊,在類加載的時(shí)候被順序執(zhí)行,在構(gòu)造方法之前執(zhí)行。

final

final類不能被繼承,里面的方法都是final的,沒有繼承所以就沒有重寫。

final方法不允許被覆蓋,為了鎖定其方法不被擴(kuò)展或者為了提高效率。private方法無法繼承因此private方法默認(rèn)是final的(有爭(zhēng)議)。

final變量一但被賦值就無法改變。

final參數(shù)可以運(yùn)用但不能被改變。

final+static表示不能被改變的靜態(tài)數(shù)據(jù)或方法也叫全局常量。

初始化數(shù)據(jù)

在聲明中賦值

在初始化塊中賦值

在構(gòu)造方法中賦值

聲明>初始化塊>構(gòu)造方法

包(package)

將類組織起來,一般用域名的逆序作為包名。如果一個(gè)類里面引用相同名字的外部類,可以通過inport關(guān)鍵字導(dǎo)入包路徑來區(qū)分。

注釋

單行(//)以及多行注釋(/* */),注釋內(nèi)容Java虛擬機(jī)會(huì)自動(dòng)過濾。

注釋文檔:JavaDoc可以生成html文檔,以@符號(hào)為標(biāo)識(shí)符如:@version。


不積小流,無以成江海

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容