摘要:第一章面向?qū)ο笮“资且婚T(mén)完全面向?qū)ο蟮木幊陶Z(yǔ)言嗯什么是面向過(guò)程什么又是面向?qū)ο竽卮罄性谖覀冋竭M(jìn)入學(xué)習(xí)這部分前,了解一下面向過(guò)程和面向?qū)ο筮@兩個(gè)概念,對(duì)于我們接下來(lái)的學(xué)習(xí)有很大的好處。這一部分我們會(huì)在面向?qū)ο髮W(xué)習(xí)結(jié)束后進(jìn)行系統(tǒng)的整理和總結(jié)。
第一章 面向?qū)ο?/b>
小白:Java是一門(mén)完全面向?qū)ο蟮木幊陶Z(yǔ)言!嗯?什么是面向過(guò)程?什么又是面向?qū)ο竽兀?p>大佬:在我們正式進(jìn)入學(xué)習(xí)這部分前,了解一下面向過(guò)程和面向?qū)ο筮@兩個(gè)概念,對(duì)于我們 接下來(lái)的學(xué)習(xí)有很大的好處。別急,下面我就來(lái)和你說(shuō)一說(shuō)。面向過(guò)程——步驟化
面向過(guò)程就是分析出實(shí)現(xiàn)需求所需要的步驟,通過(guò)函數(shù)一步一步實(shí)現(xiàn)這些步驟,接著依次調(diào)用即可
面向?qū)ο蟆袨榛?/strong>面向?qū)ο笫前颜麄€(gè)需求按照特點(diǎn)、功能劃分,將這些存在共性的部分封裝成對(duì)象,創(chuàng)建了對(duì)象不是為了完成某一個(gè)步驟,而是描述某個(gè)事物在解決問(wèn)題的步驟中的行為
小白:面向過(guò)程還挺明白的,面向?qū)ο笠蔡y理解了吧(哭了)桌球?qū)嵗?幫助理解大佬:我再來(lái)舉個(gè)例子再給你好好說(shuō)一說(shuō)
我們先提出一個(gè)需求:
設(shè)計(jì)一個(gè)桌球游戲(略過(guò)開(kāi)球,只考慮中間過(guò)程)
面向過(guò)程方式思考:1.palyer1 擊球
2.實(shí)現(xiàn)畫(huà)面擊球效果
3.判斷是否進(jìn)球及有效
4.palyer2擊球
5.實(shí)現(xiàn)畫(huà)面擊球效果
6.判斷是否進(jìn)球及有效
7.返回步驟1
8.輸出游戲結(jié)果
把上面的步驟通過(guò)函數(shù)一步一步實(shí)現(xiàn),這個(gè)需求就完成了。
面向?qū)ο蠓绞剿伎迹?/strong>經(jīng)過(guò)觀察我們可以看到,其實(shí)在上面的流程中存在很多共性的地方
所以我們將這些共性部分全集中起來(lái),做成一個(gè)通用的結(jié)構(gòu)
玩家系統(tǒng)(包括palyer1和palyer2)
擊球效果系統(tǒng),負(fù)責(zé)展示給用戶游戲時(shí)的畫(huà)面
規(guī)則系統(tǒng),判斷是否犯規(guī),輸贏等
我們將繁瑣的步驟,通過(guò)行為、功能,模塊化,這就是面向?qū)ο螅覀兩踔量梢岳迷摮绦颍謩e快速實(shí)現(xiàn)8球和斯諾克的不同游戲(只需要修改規(guī)則即可,玩家系統(tǒng),擊球效果系統(tǒng)都是一致的)
面向過(guò)程和面向?qū)ο蟮膬?yōu)缺點(diǎn): 面向過(guò)程優(yōu)點(diǎn):性能上它是優(yōu)于面向?qū)ο蟮?*,因?yàn)轭愒谡{(diào)用的時(shí)候需要實(shí)例化,開(kāi)銷(xiāo)過(guò)大。
缺點(diǎn):不易維護(hù)、復(fù)用、擴(kuò)展**
用途:?jiǎn)纹瑱C(jī)、嵌入式開(kāi)發(fā)、Linux/Unix等對(duì)性能要求較高的地方
面向?qū)ο?/strong>優(yōu)點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展,由于面向?qū)ο笥?strong>封裝、繼承、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護(hù)
缺點(diǎn):性能比面向過(guò)程低
低耦合,簡(jiǎn)單的理解就是說(shuō),模塊與模塊之間盡可能的獨(dú)立,兩者之間的關(guān)系盡可能簡(jiǎn)單,盡量使其獨(dú)立的完成成一些子功能,這避免了牽一發(fā)而動(dòng)全身的問(wèn)題。這一部分我們會(huì)在面向?qū)ο髮W(xué)習(xí)結(jié)束后進(jìn)行系統(tǒng)的整理和總結(jié)。
只通過(guò)教科書(shū)后的例題是無(wú)法體會(huì)到面向過(guò)程所存在的問(wèn)題的,在一些小例程中,面向過(guò)程感覺(jué)反而會(huì)更加的簡(jiǎn)單,但是一旦面臨較大的項(xiàng)目,我們需要編寫(xiě)N個(gè)功能相似的函數(shù),函數(shù)越來(lái)越多,代碼量越來(lái)越多,Bug之路也就此開(kāi)始了。
1.1 類和對(duì)象面向?qū)ο蟮乃枷胧侨绾卧趈ava展現(xiàn)的呢? 就是通過(guò)類和對(duì)象
類是一組相關(guān)的屬性和行為的集合。是一個(gè)抽象的概念。
對(duì)象是該類事物的具體表現(xiàn)形式。具體存在的個(gè)體。
成員變量事物的屬性
成員方法事物的行為
上面我們說(shuō)了這幾個(gè)概念,那么到底應(yīng)該怎么理解呢?
類就是對(duì)一些具有共性特征,并且行為相似的個(gè)體的描述。
比如小李和老張都有姓名、年齡、身高、體重等一些屬性,并且兩人都能夠進(jìn)行聊天、運(yùn)動(dòng)等相似的行為。
由于這兩個(gè)人具有這些共性的地方,所以我們把它抽象出來(lái),定義為一個(gè)類——人類,而小李、老王正是這個(gè)類中的個(gè)體(對(duì)象),而個(gè)體才是真正具體的存在,光提到人類,你只知道應(yīng)該有哪些屬性行為,但你不知道他具體的一些值,比如你知道他屬于“人類”所以他應(yīng)該有姓名,年齡等屬性,但你并不知道他具體叫什么,年齡多大了。而小李和老王這兩個(gè)具體的對(duì)象,卻能夠?qū)崒?shí)在在的知道老王今年30歲了、身高175等值。
結(jié)合上面的例子再總結(jié)一下:
成員變量就是用來(lái)描述這個(gè)類的屬性的,比如人類應(yīng)該擁有姓名,年齡等屬性
成員方法就是用來(lái)描述事物的行為的,比如人類能夠聊天、運(yùn)動(dòng)等行為
1.1_1 類的定義及使用我們了解了類和對(duì)象的基本定義和概念
下面我們就通過(guò)一個(gè)實(shí)例 來(lái)了解到底如定義一個(gè)類
A:類的定義
成員變量:定義格式和普通變量一樣,只是位置不同,在類中,方法外。
成員方法:定義格式和普通方法一樣,只是去掉了static(后期講解原因)
B:創(chuàng)建并且使用類
a:創(chuàng)建對(duì)象格式
類名 對(duì)象名 = new 類名();
Eg:Person p = new Person();
b:如何使用成員變量和成員方法呢
對(duì)象名.成員變量
對(duì)象名.成員方法()
Eg:p.reading();
p.sleeping();
其實(shí)我們可以看出來(lái),類的定義還是很簡(jiǎn)單的,結(jié)合了我們前面的知識(shí),只是一些位置上的不同罷了,至于創(chuàng)建對(duì)象格式中每部分的意義我們?cè)谙旅骜R上就要講解了(我們還需要補(bǔ)充一些知識(shí)點(diǎn))
我們先來(lái)看這么一個(gè)話題
經(jīng)常聽(tīng)說(shuō)有一個(gè)詞叫做局部變量,它和類中的成員變量有什么關(guān)系嗎?
1.1_2 成員變量和局部變量的區(qū)別:(1)在類中的位置不同
成員變量:類中方法外
局部變量:方法定義中或者方法聲明上
(2)在內(nèi)存中的位置不同
成員變量:在堆中
局部變量:在棧中
(3)生命周期不同
成員變量:隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失
局部變量:隨著方法的調(diào)用而存在,隨著方法的調(diào)用完畢而消失
(4)初始化值不同
成員變量:有默認(rèn)值(下面會(huì)詳講這一點(diǎn))
局部變量:沒(méi)有默認(rèn)值,必須定義,賦值,然后才能使用
關(guān)于初始化問(wèn)題我們?cè)谙旅嬖敿?xì)講解,但是我現(xiàn)在還有一個(gè)問(wèn)題,在我們學(xué)習(xí)java中內(nèi)存分配的時(shí)候,有這樣一>句話,“堆內(nèi)存用來(lái)存放new創(chuàng)建的對(duì)象和數(shù)組” 換句話說(shuō)對(duì)象存在于堆中,而成員變量存在于類中而且對(duì)象是類>的個(gè)體,所以成員變量也存在于堆中,那么問(wèn)題就來(lái)了,按照同樣的方式推導(dǎo)的時(shí)候,則會(huì)發(fā)現(xiàn)方法也和成員變>量一樣存在于對(duì)象中,豈不就是說(shuō),局部變量也存在于堆中呢? 這明顯與我們上面的定義有區(qū)別1.1_3 形式參數(shù)的問(wèn)題:一個(gè)類可以創(chuàng)建n個(gè)不同的對(duì)象,當(dāng)我們new一個(gè)對(duì)象后,這個(gè)對(duì)象實(shí)體,已經(jīng)在堆上分配了內(nèi)存空間,由于類>的成員變量在不同的對(duì)象中各不相同(例如,小李和老王的姓名不同),都需要自己各自的存儲(chǔ)空間,所以類的成員變量會(huì)隨著對(duì)象存儲(chǔ)在堆中,而由于類的方法是所有對(duì)象通用的,所以創(chuàng)建對(duì)象時(shí),方法里面的局部變量并沒(méi)有被創(chuàng)建,只有等到對(duì)象使用方法的時(shí)候才會(huì)被壓入棧。
我們知道堆中存放著new出來(lái)的對(duì)象以及數(shù)組,兩者均為引用類型
在講數(shù)組的相關(guān)知識(shí)的時(shí)候,我們已經(jīng)講過(guò)了基本類型和數(shù)組這一種引用類型,形式參數(shù)對(duì)實(shí)際參數(shù)的影響
跳轉(zhuǎn)—第三章 3.3_1參數(shù)傳遞問(wèn)題
在我們學(xué)習(xí)對(duì)象后,我們繼續(xù)來(lái)看一下這個(gè)問(wèn)題
基本類型:形式參數(shù)的改變不影響實(shí)際參數(shù)(值傳遞)
引用類型:形式參數(shù)的改變直接影響實(shí)際參數(shù)(引用傳遞)
我們先來(lái)了解一下如何創(chuàng)建匿名對(duì)象
(1)簡(jiǎn)單的理解就是:沒(méi)有名字的對(duì)象
(2)應(yīng)用場(chǎng)景
A:調(diào)用方法,僅僅只調(diào)用一次的時(shí)候。
B:可以作為實(shí)際參數(shù)傳遞
好處:匿名對(duì)象調(diào)用完就是垃圾,可以被垃圾回收器回收,并且這樣寫(xiě)比較簡(jiǎn)化。
注意:如果對(duì)一個(gè)對(duì)象的多個(gè)成員進(jìn)行調(diào)用,就必須給這個(gè)對(duì)象起名字(即上圖中的 s),即使用普通創(chuàng)建對(duì)象的方法
我們下面來(lái)看一個(gè)實(shí)例來(lái)看一下如何具體使用匿名對(duì)象
1.1_5 封裝的概述和使用
首先我們先來(lái)簡(jiǎn)單舉一個(gè)例子:
例如:夏天宿舍很熱,我們(用戶)只需要操作遙控器即可使用空調(diào),并不需要了解空調(diào)內(nèi)部是如何運(yùn)行的
現(xiàn)在由于知識(shí)掌握較少,所以對(duì)于封裝的概念理解不是很深,不要著急,先過(guò)一遍,針對(duì)封裝的意義及問(wèn)題我會(huì)寫(xiě)一篇具體的文章,現(xiàn)在只需要有一個(gè)印象即可。
封裝概述:是指隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式
封裝好處:
· 隱藏實(shí)現(xiàn)細(xì)節(jié),提供公共的訪問(wèn)方式
· 提高了代碼的復(fù)用性
· 提高安全性
封裝原則:
· 將不需要對(duì)外提供的內(nèi)容都隱藏起來(lái)
· 把屬性隱藏,提供公共方法對(duì)其訪問(wèn)
思考過(guò)程:
通過(guò)對(duì)象去給成員變量賦值,可以賦值一些非法的數(shù)據(jù)
這是不合理的。所以在賦值之前應(yīng)該先對(duì)數(shù)據(jù)進(jìn)行判斷
StudenDemo是一個(gè)測(cè)試類,測(cè)試類一般只創(chuàng)建對(duì)象,調(diào)用方法
所以這個(gè)判斷應(yīng)該定義在Student類中。需要使用邏輯語(yǔ)句
邏輯語(yǔ)句應(yīng)該定義在方法中。所以在Student類中提供一個(gè)方法來(lái)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)
但是如果偏偏不調(diào)用方法來(lái)賦值,還是直接賦值
這樣我們的方法就沒(méi)有起作用
所以我們必須強(qiáng)制要求使用我的方法,而不能直接調(diào)用成員變量
針對(duì)這種情況 Java提供了一個(gè)關(guān)鍵字 private
Private:私有的,可以修飾成員變量和成員方法
被private修飾的成員只能在本類中訪問(wèn),所以外界想要操作類中的成員變量就必須通過(guò)調(diào)用類中的方法來(lái)實(shí)現(xiàn)
1.1_6 訪問(wèn)修飾符
客戶端程序員:即在其應(yīng)用中使用數(shù)據(jù)類型的類消費(fèi)者,他的目標(biāo)是收集各種用來(lái)實(shí)現(xiàn)快速應(yīng)用開(kāi)發(fā)的類。
類創(chuàng)建者:即創(chuàng)建新數(shù)據(jù)類型的程序員,目標(biāo)是構(gòu)建類。
訪問(wèn)控制存在的原因:
a、讓客戶端程序員無(wú)法觸及他們不應(yīng)該觸及的部分 ;
b、允許庫(kù)設(shè)計(jì)者可以改變類內(nèi)部的工作方式而不用擔(dān)心會(huì)影響到客戶端程序員
java的四個(gè)關(guān)鍵字:public、protected、default、private
(他們決定了緊跟其后被定義的東西可以被誰(shuí)使用)
適用范圍<訪問(wèn)權(quán)限范圍越小,安全性越高>
訪問(wèn)權(quán)限 | 類 | 包 | 子類 | 其他包 | |
---|---|---|---|---|---|
public | √ | √ | √ | √ | 對(duì)任何人都是可用的 |
protect | √ | √ | √ | 繼承的類可以訪問(wèn)以及和private一樣的權(quán)限 | |
default | √ | √ | 繼承的類可以訪問(wèn)以及和private一樣的權(quán)限 | ||
private | √ | 除類型創(chuàng)建者和類型的內(nèi)部方法之外的任何人都不能訪問(wèn)的元素 |
可用this關(guān)鍵字進(jìn)行完善(一般都是使用完善后的)
this的內(nèi)容在下面馬上介紹
1.1_8 this關(guān)鍵字的概述和應(yīng)用
這里的調(diào)用只能通過(guò)對(duì)象名,這里它應(yīng)該代表的是student的一個(gè)對(duì)象
this:代表所在類的對(duì)象引用
記住: 方法被哪個(gè)對(duì)象調(diào)用,this就代表哪個(gè)對(duì)象
適用:局部變量隱藏成員變量(稍后補(bǔ)充)
1.2 構(gòu)造方法構(gòu)造方法和它所在類的名字相同,但構(gòu)造方法沒(méi)有返回值。
通常會(huì)使用構(gòu)造方法給一個(gè)類的實(shí)例變量賦初值,或者執(zhí)行其它必要的步驟來(lái)創(chuàng)建一個(gè)完整的對(duì)象
怎么理解呢?
當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí)候,構(gòu)造方法用來(lái)初始化該對(duì)象。
那么什么叫做初始化呢?
我們要知道嗎,構(gòu)造函數(shù)又被叫做構(gòu)造器,它就是為了初始化類,當(dāng)調(diào)用該構(gòu)造器,會(huì)用值去初始化成員,當(dāng)使用帶參構(gòu)造時(shí),會(huì)將參數(shù)中的值傳遞給成員,而使用無(wú)參構(gòu)造時(shí),即會(huì)用一些默認(rèn)的值來(lái)進(jìn)行成員的初始化
例如:
private String name;
private int age;
public bool flag;
上面的三個(gè)成員變量被無(wú)參構(gòu)造進(jìn)行默認(rèn)初始化的時(shí)候,會(huì)被初始化
name = null; age = 0; flag = false;
注意:
A:如果我們沒(méi)有給出構(gòu)造方法,系統(tǒng)將自動(dòng)提供一個(gè)無(wú)參構(gòu)造方法
B:如果我們給出了構(gòu)造方法,系統(tǒng)將不再提供默認(rèn)的無(wú)參構(gòu)造方法
如果這個(gè)時(shí)候我們還想使用無(wú)參構(gòu)造方法,就必須自己給出,建議永遠(yuǎn) 給出無(wú)參構(gòu)造方法(所以我們習(xí)慣于在類中同時(shí)給出無(wú)參和帶參構(gòu)造方法)
給成員變量賦值的兩種方法:
A:setXxx()
B:構(gòu)造方法
講到這里我們不得不提一下,get、set方法,在今后寫(xiě)代碼的時(shí)候,我們需要頻繁的用到,其實(shí)這里就體現(xiàn)了封裝,不讓用戶直接操作成員,可以起到安全的作用,具體內(nèi)容可以看前封裝部分的知識(shí)
構(gòu)造方法是為了創(chuàng)建對(duì)象時(shí),傳入一些必要的參數(shù)用來(lái)初始化對(duì)象。
setter/getter是為了控制屬性可不可以讀寫(xiě)
兩者不矛盾
之前在講解類的時(shí)候,我們由于缺少一些知識(shí)的鋪墊,所以我們將類的初始化過(guò)程講一下:
類的初始化過(guò)程
Student s = new Student();在內(nèi)存中做了哪些事情?
·加載Student.class文件進(jìn)內(nèi)存
·在棧內(nèi)存為s開(kāi)辟空間
·在堆內(nèi)存為學(xué)生對(duì)象開(kāi)辟空間
·對(duì)學(xué)生對(duì)象的成員變量進(jìn)行默認(rèn)初始化
·對(duì)學(xué)生對(duì)象的成員變量進(jìn)行顯示初始化
·通過(guò)構(gòu)造方法對(duì)學(xué)生對(duì)象的成員變量賦值
·學(xué)生對(duì)象初始化完畢,把對(duì)象地址賦值給s變量
1.3 static關(guān)鍵字Static關(guān)鍵字注意事項(xiàng)
A:在靜態(tài)方法中是沒(méi)有this關(guān)鍵字的
靜態(tài)是隨著類的加載而加載,this是隨著對(duì)象的創(chuàng)建而 存在的 → 靜態(tài)比對(duì)象先存在
B:靜態(tài)方法只能訪問(wèn)靜態(tài)的成員變量和靜態(tài)的成員方法
靜態(tài)方法:
A:成員變量:只能訪問(wèn)靜態(tài)變量
B:成員方法:只能訪問(wèn)靜態(tài)成員方法
非靜態(tài)方法:
A:成員變量:可以是靜態(tài)的,也可以是非靜態(tài)的
B:成員方法:可以是靜態(tài)的成員方法,也可以是非靜態(tài)的成員方法
為什么靜態(tài)方法不能訪問(wèn)非靜態(tài)方法呢?
因?yàn)殪o態(tài)方法是隨著類的加載而加載的,靜態(tài)是優(yōu)于對(duì)象存在的,你要訪問(wèn)非靜態(tài)的東西,可是這時(shí)候可能它還不存在。
總結(jié)起來(lái)一句話:靜態(tài)只能訪問(wèn)靜態(tài)
1.4 靜態(tài)變量和成員變量趁熱打鐵,我們來(lái)對(duì)靜態(tài)變量和成員變量做一些區(qū)分
所屬不同
·靜態(tài)變量屬于類,所以也稱為類變量
·成員變量屬于對(duì)象。所以也稱為實(shí)例變量(對(duì)象變量)
·內(nèi)存中位置不同
·靜態(tài)變量存儲(chǔ)于方法區(qū)的靜態(tài)區(qū)
·成員變量存儲(chǔ)于堆內(nèi)存
·內(nèi)存出現(xiàn)時(shí)間不一樣
·靜態(tài)變量隨著類的加載而加載,隨著類的消失而消失
·成員變量隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失
·調(diào)用不同·
·靜態(tài)變量可以通過(guò)類名調(diào)用,也可以通過(guò)對(duì)象調(diào)用
·成員變量只能通過(guò)對(duì)象名調(diào)用
方式一 是用對(duì)象調(diào)用成員方法
方式二 是用類調(diào)用成員方法(推薦方式二【需要將對(duì)應(yīng)成員方法寫(xiě)為靜態(tài)的】)
如果不想讓用戶創(chuàng)建對(duì)象調(diào)用成員方法:
只需要把構(gòu)造方法私有,外界就不能創(chuàng)建對(duì)象了
在同一個(gè)文件夾下,類定義兩個(gè)文件夾中和一個(gè)文件夾中是一樣的
1.4 制作文檔注釋和說(shuō)明書(shū)(一)
制作文檔注釋,文檔說(shuō)明書(shū)工具解析文檔注釋
javadoc工具
D:格式
javadoc -d 目錄 -author -version ArrayTool.java
目錄:就可以寫(xiě)一個(gè)文件夾的路徑
制作幫助文檔出錯(cuò):
找不到可以文檔化的公共或受保護(hù)的類:告訴我們類的權(quán)限不夠(解決辦法: 在class前面加public)
(二)
API(Application Programming Interface)
應(yīng)用程序編程接口(幫助文檔)
Jdk可以幫助我們查閱一些類、方法的詳細(xì)用法以及參數(shù)說(shuō)明,學(xué)會(huì)查閱文檔也是一項(xiàng)很重要的本領(lǐng)(網(wǎng)絡(luò)上自行下載)
下面試著自己通過(guò)查閱文檔使用一個(gè)類
Math類
A:是針對(duì)數(shù)學(xué)進(jìn)行操作的類
B:沒(méi)有構(gòu)造方法,因?yàn)樗某蓡T都是靜態(tài)的
C:產(chǎn)生隨機(jī)數(shù)
public static double random(): [0.0,1.0)
D:如何產(chǎn)生一個(gè)1-100之間的隨機(jī)數(shù)
int number = (int)(Math.random()*100)+1;
E:猜數(shù)字小游戲
1.5 代碼塊我們下面來(lái)講解這一部分的最后一個(gè)知識(shí)點(diǎn)
(1)用{}括起來(lái)的代碼。
(2)分類:
A:靜態(tài)代碼塊
概念: 在java類中(方法中不能存在靜態(tài)代碼塊)
使用static關(guān) 鍵字和{} 聲明的代碼塊:
執(zhí)行: 靜態(tài)代碼塊在類被加載的時(shí)候就運(yùn)行了,而且只運(yùn)行一次,并且優(yōu) 先于各種代碼塊以及構(gòu)造函數(shù)。
作用: 一般情況下,如果有些代碼需要在項(xiàng)目啟動(dòng)的時(shí)候就執(zhí)行, 這時(shí)候 就需要靜態(tài)代碼塊。比如一個(gè)項(xiàng)目啟動(dòng)需要加載的 很多配置文件等 資源,我們就可以都放入靜態(tài)代碼塊中。
對(duì)類的數(shù)據(jù)進(jìn)行初始化,僅僅只執(zhí)行一次。
B:構(gòu)造代碼塊
概念:在java類中使用{}聲明的代碼塊(和靜態(tài)代碼塊的 區(qū) 別是少了static關(guān)鍵字):
執(zhí)行: 構(gòu)造代碼塊在創(chuàng)建對(duì)象時(shí)被調(diào)用,每次創(chuàng)建對(duì)象都會(huì)調(diào)用一 次,但是優(yōu)先于構(gòu)造函數(shù)執(zhí)行。
作用: 和構(gòu)造函數(shù)的作用類似,都能對(duì)對(duì)象進(jìn)行初始化,并且只要 創(chuàng)建一個(gè)對(duì)象,構(gòu)造代碼塊都會(huì)執(zhí)行一次。但是反過(guò)來(lái),構(gòu) 造函數(shù)則不一定每個(gè)對(duì)象建立時(shí)都執(zhí)行(多個(gè)構(gòu)造函數(shù)情況 下,建立對(duì)象時(shí)傳入的參數(shù)不同則初始化使用對(duì)應(yīng)的構(gòu)造函 數(shù))。
把多個(gè)構(gòu)造方法中相同的代碼可以放到這里,每個(gè)構(gòu)造方法 執(zhí)行前, 首先執(zhí)行構(gòu)造代碼塊。
C:局部代碼塊
用于限定變量的生命周期,及早釋放,提高內(nèi)存利用率。
靜態(tài)代碼塊,構(gòu)造代碼塊,構(gòu)造方法的順序問(wèn)題
·靜態(tài)代碼塊 > 構(gòu)造代碼塊 > 構(gòu)造方法
結(jié)尾:如果內(nèi)容中有什么不足,或者錯(cuò)誤的地方,歡迎大家給我留言提出意見(jiàn), 蟹蟹大家 !^_^
如果能幫到你的話,那就來(lái)關(guān)注我吧!
在這里的我們素不相識(shí),卻都在為了自己的夢(mèng)而努力 ?一個(gè)堅(jiān)持推送原創(chuàng)Java技術(shù)的公眾號(hào):理想二旬不止
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74664.html
摘要:文字有點(diǎn)長(zhǎng),對(duì)于不想看文字的朋友,可以去這里看視頻,內(nèi)容和這個(gè)文字一樣的,視頻可能更好理解回顧面向過(guò)程前面我們已經(jīng)學(xué)過(guò)了面向過(guò)程我們知道,面向過(guò)程的時(shí)候,我們的關(guān)注點(diǎn)是步驟面向過(guò)程做事,就是把一件事情分割為多個(gè)步驟,然后依次去完成每一個(gè)步驟 文字有點(diǎn)長(zhǎng),對(duì)于不想看文字的朋友,可以去這里看視頻,內(nèi)容和這個(gè)文字一樣的,視頻可能更好理解https://www.piqizhu.com/v/yj...
摘要:更形象的我們還可以將面向?qū)ο罄斫鉃橐环N宗教信仰。這就導(dǎo)致面向?qū)ο蠼痰某绦騿T們?cè)趯?xiě)時(shí)就很難受。所以為了滿足信仰面向?qū)ο蠼痰男枨笸ㄟ^(guò)構(gòu)造函數(shù)的形式模擬了偽類。這個(gè)套路的核心就是類那么里沒(méi)有類所以其實(shí)是通過(guò)構(gòu)造函數(shù)來(lái)模擬的偽類。 JS面向?qū)ο笾?【概述】 在學(xué)習(xí)JS的面向?qū)ο笾?我們應(yīng)該先自問(wèn)這樣幾個(gè)問(wèn)題: 面向?qū)ο笫鞘裁匆馑? 學(xué)習(xí)面向?qū)ο蟮暮诵氖鞘裁? 為什么要學(xué)習(xí)面向?qū)ο?(它的...
摘要:面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開(kāi)發(fā)的各個(gè)方面。面向?qū)ο蟮某绦蛟O(shè)計(jì)是將數(shù)據(jù)成員和屬于此數(shù)據(jù)的操作方法放在同一實(shí)體或?qū)ο笾校褪欠庋b。 面向?qū)ο? 什么是面向?qū)ο?..
摘要:為什么要采用面向?qū)ο缶幊探鉀Q問(wèn)題更容易設(shè)計(jì)計(jì)算機(jī)程序就是為了解決人類的問(wèn)題。面向?qū)ο缶幊绦枰獙?duì)業(yè)務(wù)及代碼的架構(gòu)是有一定的要求的。 1. 編程方式 我們目前的編程方式大體可以有以下三種編程方式: 順序編程 過(guò)程式編程 面向?qū)ο缶幊? 在講面向?qū)ο缶幊虝r(shí)先講一下什么是順序編程,什么是過(guò)程式編程,什么是面向?qū)ο缶幊蹋? 順序編程: 就是只用一個(gè)單線程去執(zhí)行一段代碼,執(zhí)行過(guò)程根據(jù)代碼依次從上...
摘要:用代碼可以這樣描述安全到達(dá)國(guó)外面向過(guò)程既然說(shuō)了面向?qū)ο螅敲磁c之對(duì)應(yīng)的就是面向過(guò)程。小結(jié)在這篇文章中,介紹了什么是面向?qū)ο蠛兔嫦蜻^(guò)程,以及中對(duì)象的含義。 這是 javascript 面向?qū)ο蟀鎵K的第一篇文章,主要講解對(duì)面向?qū)ο笏枷氲囊粋€(gè)理解。先說(shuō)說(shuō)什么是對(duì)象,其實(shí)這個(gè)還真的不好說(shuō)。我們可以把自己當(dāng)成一個(gè)對(duì)象,或者過(guò)年的時(shí)候相親,找對(duì)象,那么你未來(lái)的老婆也是一個(gè)對(duì)象。我們就要一些屬性,比...
摘要:二面向?qū)ο笥惺裁刺卣髅嫦驅(qū)ο蟮闹饕卣饔谐橄罄^承封裝和多態(tài)。析構(gòu)函數(shù)析構(gòu)函數(shù)是在引入的,它的作用與調(diào)用時(shí)機(jī)和構(gòu)造函數(shù)剛好相反,它在對(duì)象被銷(xiāo)毀時(shí)自動(dòng)執(zhí)行。 PHP面試專欄正式起更,每周一、三、五更新,提供最好最優(yōu)質(zhì)的PHP面試內(nèi)容。PHP中面向?qū)ο蟪?嫉闹R(shí)點(diǎn)有以下7點(diǎn),我將會(huì)從以下幾點(diǎn)進(jìn)行詳細(xì)介紹說(shuō)明,幫助你更好的應(yīng)對(duì)PHP面試常考的面向?qū)ο笙嚓P(guān)的知識(shí)點(diǎn)和考題。整個(gè)面向?qū)ο笪恼碌慕Y(jié)構(gòu)涉...
閱讀 1572·2021-11-25 09:43
閱讀 2476·2019-08-30 15:54
閱讀 2938·2019-08-30 15:53
閱讀 1087·2019-08-30 15:53
閱讀 747·2019-08-30 15:52
閱讀 2538·2019-08-26 13:36
閱讀 807·2019-08-26 12:16
閱讀 1210·2019-08-26 12:13