【Java学习笔记一】类和对象
面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)一個(gè)重要特點(diǎn)是:封裝性。
這里的封裝性有兩方面含義:一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中形成一個(gè)基本單位,各個(gè)對(duì)象之間相互獨(dú)立互不干擾,二是將對(duì)象中某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié)只留下少量接口以便與外界聯(lián)系,接收外界的信息。這種隱蔽的做法稱為信息隱蔽。
程序設(shè)計(jì)者的任務(wù)包括兩個(gè)方面:一是設(shè)計(jì)所需要的各種類和 對(duì)象,即決定把哪些數(shù)據(jù)和操作封裝在一起,二是考慮怎樣向有關(guān)對(duì)象發(fā)送消息,已完成所需要的任務(wù)。
對(duì)象=算法+數(shù)據(jù)結(jié)構(gòu)
程序=(對(duì)象+對(duì)象+對(duì)象+……)+消息,消息的作用就是對(duì)對(duì)象的控制。
類的定義形式為
[public][final][abstract]class<類名>[extends<父類名>][implements<接口名列表>] {<成員名>}[]中的內(nèi)容都不是必需的,<>中的內(nèi)容是必需的。
public表示該類可以為所有類使用,還有一種是默認(rèn)訪問權(quán)限,只對(duì)同一個(gè)包中的類可見。(修飾外部類的就只有這兩種訪問權(quán)限)
final表示該類為終結(jié)類,即不允許被其他任何類繼承而派生出子類。即不能成為父類。
abstract表示該類是一個(gè)抽象類。在抽象類中,允許所定義的方法只有聲明沒有定義,抽象類一定是作為一個(gè)父類使用,被其他相關(guān)的類繼承,然后在子類中實(shí)現(xiàn)沒有實(shí)現(xiàn)的方法。一般類中的方法必須是有定義的。
給出所定義的類需要繼承的父類,父類名是一個(gè)已經(jīng)存在的一個(gè)類的標(biāo)識(shí)符。
implements<接口名列表>給出所定義的類需要實(shí)現(xiàn)的接口列表,若接口列表中超過一個(gè)接口名,則前后接口名之間必須要用逗號(hào)隔開。
類體(花括號(hào)內(nèi)的部分)包含成員和方法。成員用來反映類的屬性,方法用來反映類的行為。
類中成員的定義格式:
[<訪問權(quán)限>][static][final]<數(shù)據(jù)類型><變量名列表>;//同樣<>內(nèi)是必選項(xiàng)數(shù)據(jù)成員有四種可選擇的訪問權(quán)限(訪問屬性),其中三種分別用關(guān)鍵字public,protected,private表示,剩余一種訪問權(quán)限不需要關(guān)鍵字,為默認(rèn)(缺省,隱含)的訪問權(quán)限。不同的訪問權(quán)限對(duì)應(yīng)著不同的訪問范圍。
public數(shù)據(jù)成員為共有訪問權(quán)限,能被所有的類訪問
protected數(shù)據(jù)成員為保護(hù)訪問權(quán)限,能夠被同一包中的類和繼承于本類的派生類(無論是否在同一個(gè)包中)所訪問
privated數(shù)據(jù)成員為私有訪問權(quán)限,只能被本類成員所訪問,不能被其他任何類中的成員所訪問
缺省數(shù)據(jù)成員能夠被本類和同一包中的其他任何類中的成員所訪問
包類似文件夾
總結(jié):無論是何種訪問屬性都能被本類中的任何成員訪問,默認(rèn)權(quán)限還能夠被同一包中的任何類所訪問,保護(hù)訪問權(quán)限時(shí)更進(jìn)一步能夠被不同包中的任何子類所訪問,公有訪問權(quán)限時(shí)可以被所有的類訪問。
訪問范圍從小到大的順序?yàn)?#xff1a;私有<默認(rèn)<保護(hù)<共有
需要注意的是保護(hù)修飾的數(shù)據(jù)不僅不同包中的子類可以訪問,同一個(gè)包中的所有類都是可以訪問的。
如果想要了解更多可以移步去看大佬的博客,有更加詳細(xì)的解釋:傳送門
如果被final修飾,則必須對(duì)該成員進(jìn)行初始化(包含在構(gòu)造函數(shù)中賦值),并且之后不能再被修改(相當(dāng)于C++中的const)
若一個(gè)數(shù)據(jù)成員帶有關(guān)鍵字static修飾,則表示他是類的靜態(tài)成員類中的靜態(tài)成員對(duì)所有對(duì)象都是公共的,共享一個(gè)存儲(chǔ)空間。而實(shí)例成員變量則是互相獨(dú)立的。
類中函數(shù)成員的定義格式為
[<訪問權(quán)限>][abstract][static][final]<返回類型><函數(shù)名>(<參數(shù)列表>){<函數(shù)體>}函數(shù)成員的訪問權(quán)限與數(shù)據(jù)成員相同:public為公有訪問權(quán)限,能夠被所有的類訪問。protected為保護(hù)訪問權(quán)限,能夠被本包中的類和子類訪問。private為私有訪問權(quán)限,只能夠被本類訪問。缺省:此函數(shù)成員能夠被本包中的類訪問。
abstract表示為抽象成員函數(shù),這樣的函數(shù)只有函數(shù)頭沒有函數(shù)體,在函數(shù)頭末尾使用分號(hào)表示結(jié)束定義。抽象成員函數(shù)只能出現(xiàn)在抽象類的定義中。
static表示靜態(tài)成員函數(shù),可以直接通過類名進(jìn)行訪問而不用進(jìn)行實(shí)例化。在靜態(tài)成員函數(shù)中只能訪問靜態(tài)成員變量和調(diào)用靜態(tài)成員函數(shù),不允許訪問實(shí)例成員變量和函數(shù)。
final表示終結(jié)性成員函數(shù),該函數(shù)不允許被繼承類中的成員函數(shù)所覆蓋,也就是說不能被繼承類重新定義,不允許有多態(tài)性。
類中的構(gòu)造函數(shù)是特殊的成員函數(shù),作用是為創(chuàng)建的對(duì)象初始化,該函數(shù)名與類名相同,不帶返回值類型,只允許使用訪問權(quán)限的修飾符,不允許使用其他任何修飾符。
當(dāng)類中沒有定義任何構(gòu)造函數(shù)時(shí),系統(tǒng)將隱含定義個(gè)一個(gè)默認(rèn)的構(gòu)造函數(shù),函數(shù)體將初始化成員變量為默認(rèn)值,具體的講,將數(shù)值和字符變量初始化為0,邏輯變量初始化為false,對(duì)類對(duì)象成員初始化為null。如果有自己定義的構(gòu)造函數(shù)系統(tǒng)將不會(huì)再自動(dòng)定義一個(gè)構(gòu)造函數(shù)。
如果類的訪問權(quán)限是public,則默認(rèn)構(gòu)造函數(shù)的訪問權(quán)限是public,如果沒有采用public修飾,則默認(rèn)構(gòu)造函數(shù)的訪問權(quán)限是friendly。
可以有多個(gè)成員函數(shù)名字相同,但是參數(shù)列表必須不同,這種現(xiàn)象叫做函數(shù)的重載。
我們可以用類來定義和創(chuàng)建對(duì)象,具體格式為:
<類名標(biāo)識(shí)符><對(duì)象標(biāo)識(shí)符>[=<初值表達(dá)式>];//需要通過new操作符得到地址new運(yùn)算符為一元運(yùn)算符,操作數(shù)是調(diào)用該類的構(gòu)造函數(shù),在內(nèi)存中生成一個(gè)存儲(chǔ)對(duì)象并進(jìn)行初始化,以返回該存儲(chǔ)對(duì)象的首地址作為運(yùn)算結(jié)果。
沒有被new的對(duì)象是沒有意義的。相當(dāng)于一個(gè)空指針。
創(chuàng)建對(duì)象以后就可以通過點(diǎn)運(yùn)算符訪問成員變量和成員函數(shù)。點(diǎn)運(yùn)算符具有最高的優(yōu)先級(jí)。
對(duì)于靜態(tài)成員整個(gè)類對(duì)應(yīng)同一個(gè)存儲(chǔ)空間,所以允許通過類名來直接訪問。(當(dāng)然也可以通過對(duì)象訪問),對(duì)于實(shí)例成員只能通過對(duì)象進(jìn)行訪問。
Java類中的程序是由類所構(gòu)成的,每個(gè)類可以是一個(gè)獨(dú)立的編譯單元。也可以把及各類的定義保存在同一個(gè)程序文件中共同成為一個(gè)編譯單元,編譯后每個(gè)類都有對(duì)應(yīng)各自的字節(jié)碼文件,即拓展名為.class的文件。
當(dāng)一個(gè)Java程序中包含多個(gè)類的定義時(shí),只允許包含主方法main的類被指定為公有類,即在類定義的開始用public修飾,其他的類必須是缺省訪問權(quán)限的類,也就是說一個(gè)Java程序文件中不管包含多少個(gè)類的定義,不能同時(shí)出現(xiàn)兩個(gè)及以上的類為public類
對(duì)于成員變量其作用域?yàn)檎麄€(gè)類,所以變量具有類作用域,成員函數(shù)中形參變量作用域?yàn)檎麄€(gè)函數(shù)。對(duì)于成員函數(shù)中頂一個(gè)局部變量,其作用域?yàn)閺亩x點(diǎn)開始到所在的語句塊結(jié)束。在同一個(gè)作用域中不能出現(xiàn)重名,作用域范圍小的變量一般不能與包含他的作用域大的變量重名。(否則小范圍的會(huì)覆蓋大范圍的)允許函數(shù)參數(shù)和函數(shù)體中的變量與成員變量重名,但是在訪問成員變量時(shí)應(yīng)該加上this.前綴表示是類的成員變量。
函數(shù)的形參和實(shí)參必須對(duì)應(yīng),或者實(shí)參的類型可以被系統(tǒng)自動(dòng)轉(zhuǎn)換成形參的類型。特殊的,對(duì)于類中的構(gòu)造函數(shù)是通過new操作符進(jìn)行調(diào)用而不是通過點(diǎn)運(yùn)算符進(jìn)行調(diào)用。當(dāng)形參為數(shù)組類型或者類(對(duì)象)類型時(shí)對(duì)形參的改變也會(huì)改變實(shí)參(很顯然,因?yàn)閷?shí)際傳遞的是指針)。
封裝可被理解為一種改用做保護(hù)的包裝器,以防止代碼和數(shù)據(jù)被包裝器外部所定義的其他代碼任意訪問。Java使用訪問權(quán)限控制來實(shí)現(xiàn)封裝。
讓可訪問性盡可能的低是促成封裝的原則之一,即盡可能采用可行狀態(tài)下最高的訪問權(quán)限(最小的訪問范圍)。
final在Java中并不常用,但是他給我們提供了定義常量的功能。而且final還可以控制成員、方法或者類不可以被覆寫或者繼承。
在定義變量時(shí)在前面加上final關(guān)鍵字,對(duì)于基本類型來講就是其值不可改變,對(duì)于對(duì)象來講就是引用不可改變,即一直指向同一個(gè)對(duì)象。只能在定義或者構(gòu)造函數(shù)中進(jìn)行賦值,而且只能任選其一。
總結(jié)
以上是生活随笔為你收集整理的【Java学习笔记一】类和对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育基地残疾证免费吗
- 下一篇: 成都大熊猫繁育基地几点关门