Java基礎(chǔ)之面向?qū)ο螅ǘ?/h1>

一俊卤、深入變量

前面已經(jīng)說到變量分為成員變量浸赫、局部變量。這里將深入探究變量

1忌警、變量的初始化:

局部變量都沒有初始值搁拙,所以使用前我們自己要顯示的初始化秒梳。因?yàn)橄到y(tǒng)不會(huì)對(duì)它進(jìn)行初始化操作法绵,也就是說一定要給局部變量賦值才可以使用變量。

定義局部變量后酪碘,系統(tǒng)并未為這個(gè)變量分配內(nèi)存空間朋譬,直到程序?yàn)檫@個(gè)變量賦值時(shí),系統(tǒng)才會(huì)為局部變量分配內(nèi)存兴垦,并將初始值保存到該內(nèi)存中徙赢。

局部變量不屬于任何類或?qū)嵗虼怂偸潜4嬖谄渌诜椒ǖ臈?nèi)存中探越。

基本數(shù)據(jù)局部變量:直接把這個(gè)變量的值保存到該變量所對(duì)應(yīng)的內(nèi)存中狡赐。

引用數(shù)據(jù)局部變量:這個(gè)變量?jī)?nèi)存中存的是地址,通過該地址引用到該變量實(shí)際引用堆里的的對(duì)象。

棧內(nèi)存中的變量無需系統(tǒng)垃圾回收钦幔,其往往隨方法或代碼塊的運(yùn)行結(jié)束而結(jié)束枕屉。

而成員變量可以不用賦值,原因是如果你不給成員變量賦值系統(tǒng)會(huì)自動(dòng)對(duì)它進(jìn)行初始化賦于默認(rèn)值鲤氢,定義成員變量之后系統(tǒng)會(huì)分配空間給它搀擂,將這個(gè)變量保存在堆中,不同類型的初始值如下:


2卷玉、變量的作用域

變量的作用域指的是變量的存在范圍哨颂,只有在這個(gè)范圍內(nèi),程序代碼才能訪問它相种。當(dāng)一個(gè)變量被定義時(shí),它的作用域就確定了:

A威恼、成員變量:在類中聲明,作用域是整個(gè)類。

B箫措、局部變量:作用域是定義開始到定義所在的花括號(hào)結(jié)束缭黔。

例如:

{

int x = 12;

/*只有x有效*/

{

int q = 96;

/* x與q都有效*/

}

/*只有x有效*/

/*q已經(jīng)無效了*/

}

/*x已經(jīng)無效了*/

作為在作用域里定義的一個(gè)變量,它只有在那個(gè)作用域結(jié)束之前才可使用蒂破。 ?注意盡管在C和C++里是合法的馏谨,但在Java里不能象下面這樣書寫代碼:

{

int x = 12;

{

int x = 96;

/* illegal */

}

}

編譯器會(huì)認(rèn)為變量x已被定義。這樣做使程序產(chǎn)生了混淆附迷。也就是說在同一個(gè)方法中不可以重復(fù)定義同一個(gè)局部變量惧互。

C、引用類型變量:

對(duì)象的作用域Java對(duì)象不具備與主類型一樣的存在時(shí)間喇伯。用new關(guān)鍵字創(chuàng)建一個(gè)Java對(duì)象的時(shí)候喊儡,它會(huì)超出作用域的范 圍之外。所以假若使用下面這段代碼:

{

String s = new String("a string");

} /*作用域的終點(diǎn)*/

那么變量s會(huì)在作用域的終點(diǎn)處消失稻据。然而艾猜,s指向的String對(duì)象依然占據(jù)著內(nèi)存空間。在上面這段代碼 里捻悯,我們沒有辦法訪問對(duì)象匆赃,因?yàn)橹赶蛩奈ㄒ灰粋€(gè)變量s已超出了作用域的邊界。Java有一個(gè)特別 的“垃圾收集器”今缚,它會(huì)查找用new創(chuàng)建的所有對(duì)象算柳,并辨別其中哪些不再被引用。隨后姓言,它會(huì)自動(dòng)釋放由 那些閑置對(duì)象占據(jù)的內(nèi)存瞬项,以便能由新對(duì)象使用。這意味著我們根本不必操心內(nèi)存的回收問題何荚。只需簡(jiǎn)單地 創(chuàng)建對(duì)象囱淋,一旦不再需要它們,它們就會(huì)自動(dòng)離去餐塘。

3妥衣、變量的生命周期

指的是一個(gè)變量被創(chuàng)建并分配內(nèi)存空間開始,到該變量被銷毀并清除其所占內(nèi)存空間的過程唠倦。不同類型的變量生命周期如下:


二称鳞、Package(創(chuàng)建包)、import(導(dǎo)入包)語句

在實(shí)際開發(fā)中,一個(gè)項(xiàng)目可能存在上百個(gè)甚至上千個(gè)Java文件,如果這么多Java文件全部都在一個(gè)包中,很難管理,并且也不允許存在同名的文件.

解決方案:使用package對(duì)Java的類實(shí)施分包管理.分包之后,如何去找到包中的某一個(gè)類呢?就需要使用到import去尋找包中的某一個(gè)類稠鼻。

package語句必須作為文件的第一個(gè)非注釋語句出現(xiàn)冈止。該語句的作用是指出這個(gè)編譯單元屬于名為mypackage包中的一部分『虺荩或者換句話說熙暴,它表明這個(gè)編譯單元內(nèi)的public類名位于mypackage這個(gè)名 字的下面闺属。如果其他人想使用這個(gè)名字,要么指出完整的名字周霉,要么與mypackage聯(lián)合使用import關(guān)鍵字掂器。注意根據(jù)Java包(封裝)的約定,名字內(nèi)的所有字母都應(yīng)小寫俱箱,甚至那些中間單 詞亦要如此国瓮。

現(xiàn)在,如果有人想使用mypackage內(nèi)的任何public類狞谱,他們必須用import關(guān)鍵 字激活mypackage內(nèi)的名字乃摹,使它們能夠使用。

import mypackage.*; // . . . MyClass m = new MyClass();

另一個(gè)辦法則是指定完整的名稱:

mypackage.MyClass m = new mypackage.MyClass();

包名應(yīng)該如何編寫:

1:按照標(biāo)識(shí)符的規(guī)范來書寫,

2:全部使用小寫字母,

3:不要使用JDK中的包名,如:java.lang/java.util.

4.如果包中第一個(gè)字母是數(shù)字_520it,我們可以使用_連接或者使用a520it.

5.但是在Android中如果包名使用_打頭,則不能部署到模擬器中去,此時(shí)a520it.

6.要求獨(dú)一無二

三跟衅、訪問權(quán)限修飾符

訪問修飾符可以修飾,成員變量,方法.

訪問權(quán)限控制:

①private(類私有):本類內(nèi)部可以訪問孵睬,不能被之類繼承,類訪問權(quán)限。

② 無(包私有):本類內(nèi)部可以訪問伶跷,同包其他類也可以訪問掰读,能被同包的子類繼承,(包訪問權(quán)限)。

③protected(包和子類私有):本類內(nèi)部可以訪問叭莫,不同包的子類也可以訪問蹈集,同包其他類也可以訪問,能被子類所繼承食寡。

④public(公共):任何地方都可以訪問雾狈,能繼承到子類廓潜。

以后抵皱,我們把沒有修飾符這種情況都統(tǒng)稱為包私有權(quán)限。


四辩蛋、this關(guān)鍵字

什么是this(關(guān)鍵字):

表示當(dāng)前對(duì)象呻畸,哪個(gè)對(duì)象調(diào)用this所在的成員(方法/字段),那么this就表示哪個(gè)對(duì)象.

一般的,我們使用this主要是使用在方法中,說人話:

哪一個(gè)對(duì)象調(diào)用了this所在的方法,那么this就表示哪一個(gè)對(duì)象.

構(gòu)造器中的this關(guān)鍵字,表示當(dāng)前所創(chuàng)建的對(duì)象.

使用this可以解決哪些問題:

① 解決成員變量和參數(shù)之間的二義性,必須使用;

② 同類中非static方法間互調(diào)悼院。

③ 將當(dāng)前對(duì)象作為參數(shù)傳遞給另一個(gè)方法;

④ 當(dāng)前對(duì)象作為方法的返回值(鏈?zhǔn)椒椒ň幊?;

⑤ 構(gòu)造器重載的互調(diào)伤为,this([參數(shù)])必須寫在構(gòu)造方法第一行;

⑥static不能和this一起使用;

static成員隨著字節(jié)碼加載進(jìn)JVM,就已經(jīng)分配內(nèi)存空間了,而此時(shí)并沒有使用new去創(chuàng)建對(duì)象.

static存在的時(shí)候,對(duì)象級(jí)別數(shù)據(jù)還不存在.記住:在調(diào)用靜態(tài)方法的時(shí)候,是使用類名調(diào)用的,沒有對(duì)象.

五、繼承

繼承關(guān)系:

可以基于某個(gè)父類對(duì)對(duì)象的定義加以拓展据途,而產(chǎn)生新的子類定義绞愚,子類可以繼承父類原來的某些定義,也可以增加原來父類所沒有的定義颖医,或者覆寫父類中的某些特性位衩。

在Java中子類定義時(shí),使用“extends”關(guān)鍵字熔萧,并同時(shí)指定父類糖驴。

語法格式:class SubClass extends SuperClass{}

在繼承(拓展)關(guān)系中僚祷,被繼承的類(SuperClass)稱為父類(超類、基類)贮缕。而拓展父類的類(SubClass)稱為子類(派生類辙谜、拓展類),子類會(huì)自動(dòng)繼承父類部分的方法和字段感昼,這里的部分和訪問權(quán)限有關(guān)系装哆。

-----------------------------------------------------------------------------------------------------------------

子類到底繼承了父類的哪些成員:

1):SubClass類能繼承SuperClass類中的public和protected成員(字段、方法定嗓、內(nèi)部類)烂琴。

2):當(dāng)SubClass和SuperClass類是位于同一包中,SubClass類會(huì)繼承SuperClass類中的默認(rèn)訪問權(quán)限成員蜕乡。

3):私有成員和構(gòu)造器奸绷,絕對(duì)繼承不到。

----------------------------------------------------------------------------------------------------------------

一個(gè)Java類(除了Object外)都有且只有一個(gè)直接的父類层玲,即使一個(gè)類沒有顯示的繼承另外一個(gè)類号醉,那該類的直接父類默認(rèn)是Object。

class Demo{}等價(jià)于class Demo extends Object{}

Java中類的繼承只支持單繼承,不支持多繼承辛块,但是允許多重繼承畔派,java.lang.Object是所有類(除了Object)的根類,Object要么是直接父類要么是間接父類润绵。

方法覆蓋:

方法覆寫的原則(一同兩小一大):復(fù)寫/覆寫/重寫/覆蓋:Override.

一同:

① 實(shí)例方法簽名必須相同线椰。(方法簽名=方法名+方法的參數(shù)列表)

兩小:

② 子類方法的返回值類型是父類方法的返回值類型的子類或相同類,子類方法可以返回一個(gè)更加具體的類型尘盼。

③ 子類方法聲明拋出的異常應(yīng)比父類方法聲明拋出的異常更小或相等憨愉。

子類方法中聲明拋出的異常小于或等于父類方法聲明拋出異常類型;

子類方法可以同時(shí)聲明拋出多個(gè)屬于父類方法聲明拋出異常類的子類(RuntimeException類型除外)卿捎;

一大:

④ 子類方法的訪問權(quán)限比父類方法訪問權(quán)限更大或相等配紫。

判斷是否是覆寫方法的必殺技:@Override注解:若方法是覆寫方法,在方法前或上貼上該注解午阵, 編譯通過躺孝,否則,編譯出錯(cuò)底桂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末植袍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子籽懦,更是在濱河造成了極大的恐慌于个,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猫十,死亡現(xiàn)場(chǎng)離奇詭異览濒,居然都是意外死亡呆盖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門贷笛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來应又,“玉大人,你說我怎么就攤上這事乏苦≈昕福” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵汇荐,是天一觀的道長洞就。 經(jīng)常有香客問我,道長掀淘,這世上最難降的妖魔是什么旬蟋? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮革娄,結(jié)果婚禮上倾贰,老公的妹妹穿的比我還像新娘。我一直安慰自己拦惋,他們只是感情好匆浙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厕妖,像睡著了一般首尼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上言秸,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天软能,我揣著相機(jī)與錄音,去河邊找鬼井仰。 笑死埋嵌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俱恶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼范舀,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼合是!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锭环,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤聪全,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辅辩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體难礼,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娃圆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛾茉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讼呢。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谦炬,靈堂內(nèi)的尸體忽然破棺而出悦屏,到底是詐尸還是另有隱情,我是刑警寧澤键思,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布础爬,位于F島的核電站,受9級(jí)特大地震影響吼鳞,放射性物質(zhì)發(fā)生泄漏看蚜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一赔桌、第九天 我趴在偏房一處隱蔽的房頂上張望失乾。 院中可真熱鬧,春花似錦纬乍、人聲如沸碱茁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纽竣。三九已至,卻和暖如春茧泪,著一層夾襖步出監(jiān)牢的瞬間蜓氨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工队伟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穴吹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓嗜侮,卻偏偏與公主長得像港令,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锈颗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容