Java程序設(shè)計(jì)基礎(chǔ) 課件 第5章 Java類(lèi)與對(duì)象_第1頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第5章 Java類(lèi)與對(duì)象_第2頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第5章 Java類(lèi)與對(duì)象_第3頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第5章 Java類(lèi)與對(duì)象_第4頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第5章 Java類(lèi)與對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五章Java類(lèi)與對(duì)象5.1面向?qū)ο缶幊袒A(chǔ)5.2類(lèi)與對(duì)象5.3構(gòu)造函數(shù)5.4成員修飾符本章小結(jié)

5.1面向?qū)ο缶幊袒A(chǔ)

1.面向?qū)ο缶幊痰膬?yōu)點(diǎn)

(1)方便建模:雖然面向?qū)ο笳Z(yǔ)言中的對(duì)象與現(xiàn)實(shí)生活中的對(duì)象并不是同一個(gè)概念,但很多時(shí)候可以將現(xiàn)實(shí)生活中對(duì)象的概念抽象后稍作修改來(lái)進(jìn)行建模,大大方便了建模的過(guò)程。

(2)模塊化:通過(guò)封裝可以定義對(duì)象的屬性和方法的訪問(wèn)級(jí)別,通過(guò)不同的訪問(wèn)修飾符控制對(duì)外的接口,防止內(nèi)部數(shù)據(jù)在不安全的情況下被修改。

(3)易維護(hù):采用面向?qū)ο笏枷朐O(shè)計(jì)的結(jié)構(gòu)可讀性高,繼承的存在增加了代碼的復(fù)用性,即使改變需求,維護(hù)也只是在局部模塊,方便且成本較低。

(4)易擴(kuò)展:通過(guò)繼承、多態(tài)等技術(shù)減少冗余代碼,并易于擴(kuò)展現(xiàn)有代碼,即在標(biāo)準(zhǔn)的模塊上構(gòu)建程序,而不必一切從頭開(kāi)始,從而提高了編程效率。

2.面向?qū)ο缶幊痰娜筇卣?/p>

(1)封裝。封裝即把對(duì)象的屬性和方法封裝成一個(gè)獨(dú)立的單位,并隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。這主要體現(xiàn)為兩方面內(nèi)容:

①封裝體:把對(duì)象的屬性和方法結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位。

②信息隱蔽:可以通過(guò)訪問(wèn)控制符來(lái)控制信息對(duì)外的公開(kāi)程度,對(duì)象的使用者只是通過(guò)預(yù)先定義的接口關(guān)聯(lián)到某一對(duì)象的行為和數(shù)據(jù),而不知道其內(nèi)部細(xì)節(jié)。

(2)繼承。繼承是在已有的類(lèi)的基礎(chǔ)上進(jìn)行擴(kuò)充、改造,得到新的數(shù)據(jù)類(lèi)型,可以實(shí)現(xiàn)程序的代碼復(fù)用,它是存在于面向?qū)ο蟪绦蛑械膬蓚€(gè)類(lèi)之間的一種關(guān)系:當(dāng)一個(gè)類(lèi)獲得另一個(gè)類(lèi)中所有非私有的成員屬性和行為時(shí),就稱(chēng)這兩個(gè)類(lèi)之間具有繼承關(guān)系。被繼承的類(lèi)稱(chēng)為父類(lèi)或超類(lèi),繼承了父類(lèi)或超類(lèi)的屬性和行為的類(lèi)稱(chēng)為子類(lèi)。

(3)多態(tài)。在繼承的基礎(chǔ)上,某些類(lèi)的方法只有在程序運(yùn)行過(guò)程中才能看出具體表現(xiàn)出來(lái)的行為,稱(chēng)之為多態(tài)性。多態(tài)性是增強(qiáng)程序擴(kuò)展性、可維護(hù)性的重要手段和技術(shù)。

5.2類(lèi)與對(duì)象

5.2.1類(lèi)的基本概念類(lèi)(Class)用來(lái)描述具有相同的屬性和方法的對(duì)象的集合,可以看成是對(duì)象的模板,它定義了該集合中所有對(duì)象共有的屬性和方法,而對(duì)象是類(lèi)的具體實(shí)例。

程序設(shè)計(jì)所面對(duì)的問(wèn)題域——客觀世界是由許多事物構(gòu)成的,這些事物既可以是有形的(比如一個(gè)學(xué)生、一張桌子),也可以是無(wú)形的(比如一次購(gòu)買(mǎi)、一次會(huì)議),把客觀世界中的事物映射到面向?qū)ο蟮某绦蛟O(shè)計(jì)中就是對(duì)象,對(duì)象是面向?qū)ο蟪绦蛟O(shè)計(jì)中用來(lái)描述客觀事物的程序單位??陀^世界中的許多對(duì)象,無(wú)論是其屬性還是其行為常常有許多共同性,抽象出這些對(duì)象的共同性便可以構(gòu)成類(lèi),所以類(lèi)是對(duì)象的抽象和歸納,對(duì)象是類(lèi)的實(shí)例。

Java中的類(lèi)被認(rèn)為是一種自定義數(shù)據(jù)類(lèi)型,C語(yǔ)言中則可以使用已有的類(lèi)型作為自定義結(jié)構(gòu)體類(lèi)型的成員,從而生成新的結(jié)構(gòu)體類(lèi)型;但是C語(yǔ)言中的結(jié)構(gòu)體類(lèi)型只是封裝了成員變量,Java中的類(lèi)除封裝了成員變量外,還封裝了成員方法,由類(lèi)可以定義具體的實(shí)例——對(duì)象,每個(gè)對(duì)象具有自己的成員變量和成員方法。

5.2.2類(lèi)的結(jié)構(gòu)與定義

1.學(xué)生屬性(field)

在學(xué)生類(lèi)眾多的屬性中,程序設(shè)計(jì)時(shí)有些屬性是必要的,如學(xué)生的學(xué)號(hào)、姓名、性別,有些屬性就需要根據(jù)程序的上下文(軟件的需求)進(jìn)行取舍,比如軟件主要用于處理學(xué)生的成績(jī),那么學(xué)生的籍貫、身高、愛(ài)好、體重、外貌、習(xí)慣、特長(zhǎng)等等這些屬性就可以不用設(shè)計(jì)到學(xué)生類(lèi)中,這些屬性對(duì)應(yīng)到類(lèi)的結(jié)構(gòu)中,就稱(chēng)為成員變量。

2.學(xué)生行為(method)

真的需要將現(xiàn)實(shí)世界中學(xué)生的行為設(shè)計(jì)到學(xué)生類(lèi)中嗎?吃飯、學(xué)習(xí)、睡覺(jué)、跑步、游泳等等行為就算想在程序中實(shí)現(xiàn),也很難設(shè)計(jì)到學(xué)生類(lèi)中(在一些特定的軟件環(huán)境中可能真的需要對(duì)這些行為進(jìn)行程序?qū)崿F(xiàn),比如3D游戲)。大多數(shù)情況下對(duì)于學(xué)生類(lèi)行為設(shè)計(jì)指的是方法(函數(shù))的定義,對(duì)應(yīng)學(xué)生類(lèi)結(jié)構(gòu)中的成員方法,這些成員方法主要是對(duì)學(xué)生類(lèi)數(shù)據(jù)進(jìn)行處理,比如顯示學(xué)生的信息、獲取學(xué)生的年齡、修改學(xué)生的成績(jī)、求學(xué)生成績(jī)的平均值等等,它們代表了學(xué)生類(lèi)中提供的功能和服務(wù),并不真的需要實(shí)現(xiàn)現(xiàn)實(shí)世界中學(xué)生的動(dòng)態(tài)行為。

3.構(gòu)造函數(shù)(Constructor)

學(xué)生類(lèi)中有一類(lèi)特殊的函數(shù),用于構(gòu)造出學(xué)生類(lèi)的實(shí)例,即具體的學(xué)生對(duì)象(如名叫張三的學(xué)生),這類(lèi)函數(shù)被稱(chēng)為構(gòu)造函數(shù),在構(gòu)造學(xué)生對(duì)象的時(shí)候使用new來(lái)調(diào)用。構(gòu)造函數(shù)的作用是生成學(xué)生類(lèi)對(duì)象,在函數(shù)中一般是對(duì)學(xué)生屬性進(jìn)行初始化。如果一個(gè)構(gòu)造函數(shù)什么也不做,那生成的學(xué)生實(shí)例就類(lèi)似一張白紙,只表示有這么一個(gè)學(xué)生,但是學(xué)生的各個(gè)屬性沒(méi)有值。

上述內(nèi)容定義一個(gè)學(xué)生類(lèi)的主要結(jié)構(gòu),如圖5-1所示。圖5-1Student類(lèi)結(jié)構(gòu)

(1)定義一個(gè)學(xué)生類(lèi)使用class關(guān)鍵字,如:

publicclassStudent1{

}

該類(lèi)的名字Student1要與文件名Student1.java一致,花括號(hào){}之間是類(lèi)的定義。

(2)該類(lèi)有五個(gè)成員變量,對(duì)應(yīng)學(xué)生類(lèi)的五個(gè)屬性,即學(xué)號(hào)、姓名、性別、分?jǐn)?shù)1、分?jǐn)?shù)2。對(duì)每個(gè)屬性需要定義屬性的類(lèi)型,比如學(xué)號(hào)的類(lèi)型可以是int,也可以是String,這需要根據(jù)學(xué)生的學(xué)號(hào)取值來(lái)定。如果學(xué)號(hào)全是整數(shù),可以使用int,也可以使用String;如果有其它字符,就只能使用String。

(3)成員變量還有一些其它的修飾符,如訪問(wèn)控制符,靜態(tài)修飾符static,終態(tài)修飾符final等,會(huì)在后面具體說(shuō)明。

(4)該類(lèi)具有一個(gè)空的構(gòu)造函數(shù)(目前暫時(shí)不用,具體在后面進(jìn)行說(shuō)明),使用new來(lái)調(diào)用該函數(shù)能夠生成一個(gè)Student類(lèi)的對(duì)象。

(5)成員方法1用于求一個(gè)學(xué)生對(duì)象兩科分?jǐn)?shù)的平均分。

(6)成員方法2用于顯示學(xué)生對(duì)象各個(gè)成員變量的信息。

5.2.3對(duì)象的基本概念

對(duì)象(object)是類(lèi)的一個(gè)具體實(shí)例(instance),每個(gè)對(duì)象都有自己的成員變量和成員方法,在堆內(nèi)存中具有一段內(nèi)存空間以保存自己的成員變量,例如張三是學(xué)生類(lèi)的一個(gè)具體學(xué)生對(duì)象。

上一節(jié)定義好了Student類(lèi),將現(xiàn)實(shí)世界的學(xué)生抽象到了程序中,這一節(jié)在程序中由該類(lèi)產(chǎn)生具體的學(xué)生對(duì)象實(shí)例,如圖5-2所示。

圖5-2Student類(lèi)與對(duì)象

定義好了Student類(lèi),就可以由類(lèi)生成對(duì)象,主要語(yǔ)法是使用new調(diào)用類(lèi)的構(gòu)造函數(shù),在堆內(nèi)存區(qū)域獲得一個(gè)對(duì)象的內(nèi)存空間,在該空間中存放該對(duì)象的成員變量的值。例如語(yǔ)句“Students1=newStudent();”表示使用Student類(lèi)生成了一個(gè)該類(lèi)的對(duì)象,使用s1這個(gè)引用變量指向該對(duì)象,具體的內(nèi)存示意圖如圖5-3所示。圖5-3Student對(duì)象內(nèi)存示意圖

5.2.4對(duì)象的初始化

1.對(duì)象成員的類(lèi)型

如何給s1對(duì)象中的成員進(jìn)行賦值呢?首先要分清楚對(duì)象的成員有哪些類(lèi)型,對(duì)象成員變量的類(lèi)型主要有基本數(shù)據(jù)類(lèi)型、JDK預(yù)定義類(lèi)型和用戶自定義類(lèi)型。

1)基本數(shù)據(jù)類(lèi)型

如果某個(gè)成員變量是基本數(shù)據(jù)類(lèi)型,即使沒(méi)有進(jìn)行初始化,Java也會(huì)確保其有一個(gè)默認(rèn)值,如表5-1所示。

2)?JDK預(yù)定義類(lèi)型

預(yù)定義類(lèi)型即JDK自帶的類(lèi),例如常用的字符串類(lèi)String,學(xué)生類(lèi)中很多成員變量都是String字符串類(lèi)型的,如名字、性別、班級(jí)等等。JDK龐大的類(lèi)庫(kù)能夠方便程序員構(gòu)造程序,比如可以使用Date或者Calendar類(lèi)來(lái)作為學(xué)生類(lèi)的出生日期成員變量(出生日期)。在使用這些類(lèi)作為成員變量類(lèi)型時(shí)可查詢(xún)JDK幫助文檔,了解這些類(lèi)的用法。

3)用戶自定義類(lèi)型

也可以使用用戶自定義的類(lèi)型來(lái)作為成員變量的類(lèi)型,比如可以在學(xué)生類(lèi)中定義一個(gè)Teacher(教師)類(lèi)型的成員變量,表示學(xué)生的班主任屬性,那么在生成學(xué)生類(lèi)對(duì)象的時(shí)候就要生成一個(gè)Teacher類(lèi)對(duì)象作為該學(xué)生類(lèi)對(duì)象的一個(gè)對(duì)象成員。

2.對(duì)象的初始化

學(xué)生類(lèi)對(duì)象的初始化有以下兩種方式:

(1)使用圓點(diǎn)成員運(yùn)算符(.)?!?”直接對(duì)指定對(duì)象的成員變量進(jìn)行賦值:

s1.num=101;

="張三";

s1.gander="男";

s1.score1=80.0;

s1.score2=74.0;

(2)使用構(gòu)造函數(shù)。構(gòu)造函數(shù)的主要作用是對(duì)成員變量進(jìn)行初始化。可以在類(lèi)中定義不同參數(shù)的多個(gè)構(gòu)造函數(shù)來(lái)對(duì)成員變量進(jìn)行初始化(在一個(gè)類(lèi)中有多個(gè)同名的函數(shù),但是參數(shù)列表不同,這稱(chēng)為函數(shù)重載,在調(diào)用函數(shù)時(shí)根據(jù)傳入的參數(shù)來(lái)決定具體調(diào)用哪個(gè)函數(shù)),前面的Student類(lèi)中只有一個(gè)空的構(gòu)造函數(shù):

publicStudent1(){

}

函數(shù)定義的三個(gè)參數(shù)(intn,Strings,Stringg)是函數(shù)的形參,也是函數(shù)定義的局部變量。使用new調(diào)用該函數(shù)來(lái)生成學(xué)生類(lèi)對(duì)象時(shí),傳入三個(gè)實(shí)參(102,"李四","男"),分別交給n、s、g,然后該構(gòu)造函數(shù)的函數(shù)體將這三個(gè)實(shí)參賦值給成員變量num、name和gander,這個(gè)賦值的內(nèi)存示意圖如圖5-4所示。

圖5-4Student對(duì)象生成的內(nèi)存示意圖

3.this

上述構(gòu)造函數(shù)是寫(xiě)在Student1類(lèi)定義中的,定義該類(lèi)的時(shí)候,是無(wú)法知道將要生成的對(duì)象名字是什么,所以用this這個(gè)關(guān)鍵字來(lái)代替將要生成的對(duì)象的名字,以構(gòu)成“對(duì)象名.成員名”的形式,所以可以稱(chēng)this為“當(dāng)前(將要生成)對(duì)象的引用”。

除了構(gòu)造函數(shù)能夠?qū)Τ蓡T變量初始化外,還可以使用一些成員函數(shù)來(lái)對(duì)指定的成員變量賦值或修改,如:

publicvoidsetNum(intnum){

this.num=num;

}

定義類(lèi)的目的主要是生成對(duì)象,有了對(duì)象就能保存對(duì)象的成員變量值,并且調(diào)用對(duì)象的成員方法,這是面向?qū)ο缶幊痰闹饕僮?。成員方法往往代表了要提供的功能或服務(wù),比如Student1類(lèi)中有兩個(gè)成員方法,一個(gè)是用于求對(duì)象兩個(gè)成員變量的平均分,一個(gè)是用于顯示對(duì)象的信息。

程序示例5-2定義學(xué)生類(lèi)。

程序分析:

(1)?Student2類(lèi)中具有兩個(gè)構(gòu)造函數(shù)的重載,在生成該類(lèi)對(duì)象的時(shí)候,根據(jù)是否傳入?yún)?shù)來(lái)區(qū)分調(diào)用哪個(gè)構(gòu)造函數(shù)。

(2)?Student2類(lèi)中使用this來(lái)區(qū)分同名的成員變量和局部變量。

(3)定義好Student2類(lèi),在后面就能夠使用該類(lèi)產(chǎn)生對(duì)象,并使用對(duì)象去調(diào)用其成員,完成相應(yīng)的程序功能。

程序結(jié)果:

5.3構(gòu)造函數(shù)

構(gòu)造函數(shù)(constructor)是某個(gè)類(lèi)用來(lái)生成該類(lèi)對(duì)象的一類(lèi)特殊函數(shù)。這里對(duì)構(gòu)造函數(shù)總結(jié)如下:

1.構(gòu)造函數(shù)的特點(diǎn)(1)構(gòu)造函數(shù)的名字必須與類(lèi)名一致。(2)構(gòu)造函數(shù)沒(méi)有返回值類(lèi)型。我們知道,函數(shù)定義的三要素中必須要有返回值類(lèi)型,即使函數(shù)沒(méi)有返回值,在定義的時(shí)候也要用void修飾,但是構(gòu)造函數(shù)既沒(méi)有返回值類(lèi)型也沒(méi)有用void修飾。

2.構(gòu)造函數(shù)的作用

(1)構(gòu)造函數(shù)是使用new生成對(duì)象的時(shí)候被調(diào)用的函數(shù)。

(2)構(gòu)造函數(shù)的功能主要是對(duì)對(duì)象成員變量進(jìn)行初始化,在生成對(duì)象的時(shí)候能讓一些成員變量獲得值。

(3)可以按照程序的上下文和需求在對(duì)對(duì)象初始化的時(shí)候進(jìn)行一些特定的操作,例如對(duì)構(gòu)造函數(shù)實(shí)參的值范圍進(jìn)行檢測(cè)等,但是不建議在該函數(shù)內(nèi)進(jìn)行復(fù)雜的邏輯處理,畢竟構(gòu)造函數(shù)的主要作用是生成對(duì)象和初始化對(duì)象。

3.構(gòu)造函數(shù)的重載

(1)一個(gè)類(lèi)中具有多個(gè)構(gòu)造函數(shù),但是參數(shù)列表不同,比如Student2類(lèi)中就有兩個(gè)構(gòu)造函數(shù),一個(gè)是沒(méi)有參數(shù)的,一個(gè)有三個(gè)參數(shù)對(duì)三個(gè)成員變量進(jìn)行初始化。

(2)無(wú)參且空函數(shù)體的構(gòu)造函數(shù),一般建議保留。如果在定義類(lèi)的時(shí)候一個(gè)構(gòu)造函數(shù)都沒(méi)寫(xiě),系統(tǒng)會(huì)自動(dòng)生成一個(gè)無(wú)參空函數(shù)體的構(gòu)造函數(shù);如果有了一個(gè)構(gòu)造函數(shù),系統(tǒng)就不會(huì)再自動(dòng)生成構(gòu)造函數(shù)了。

(3)如果一個(gè)類(lèi)有10個(gè)成員變量,需要寫(xiě)幾個(gè)構(gòu)造函數(shù)呢?可以根據(jù)軟件需求進(jìn)行取舍,以方便在程序中進(jìn)行調(diào)用。例如上述的Student2類(lèi),在實(shí)際生成對(duì)象的時(shí)候,必須對(duì)3個(gè)成員變量初始化,而有一些成員變量就可以在其它地方進(jìn)行初始化。

(4)在一個(gè)類(lèi)的一個(gè)構(gòu)造函數(shù)中,可以使用this()來(lái)調(diào)用本類(lèi)其它的構(gòu)造函數(shù),如程序5-4所示。

5.4成?員?修?飾?符

5.4.1訪問(wèn)控制符Java提供了3個(gè)訪問(wèn)控制符,即private、protected和public,分別代表了三種訪問(wèn)控制級(jí)別,另外還有一個(gè)不加任何訪問(wèn)控制符的訪問(wèn)控制級(jí)別,共四個(gè)訪問(wèn)控制級(jí)別。Java訪問(wèn)控制符的開(kāi)放性如圖5-5所示,越往右邊,成員的可見(jiàn)性和可訪問(wèn)性越趨于公開(kāi)。

圖5-5訪問(wèn)控制符的開(kāi)放性

1.private(私有訪問(wèn)權(quán)限)

如果類(lèi)中的一個(gè)成員(包括成員變量、方法和構(gòu)造器等)使用private訪問(wèn)控制符來(lái)修飾,則這個(gè)成員只能在當(dāng)前類(lèi)的內(nèi)部被訪問(wèn),對(duì)于外部類(lèi)是不可見(jiàn)的。private訪問(wèn)控制符用于修飾成員變量較合適,使用它來(lái)修飾成員變量就可以把成員變量隱藏在該類(lèi)的內(nèi)部,外部的類(lèi)就不能直接使用“對(duì)象名.成員名”的方式來(lái)直接訪問(wèn)該成員了。

為什么要采用較復(fù)雜的getter-setter方法,而不直接使用“對(duì)象名.成員名”方式直接來(lái)獲取/修改成員變量呢?原因如下:

(1)采用getter-setter方法能隱藏、保護(hù)對(duì)象的成員變量的數(shù)據(jù)。

(2)采用getter-setter方法的方式訪問(wèn)和設(shè)置對(duì)象的成員,可以在方法中實(shí)施訪問(wèn)、權(quán)限、日志記錄、修改值范圍等控制,如:

2.default(包package訪問(wèn)權(quán)限)

如果類(lèi)里的一個(gè)成員(包括成員變量、方法和構(gòu)造器等)不使用任何訪問(wèn)控制符修飾,就稱(chēng)它為包(即文件夾)訪問(wèn)權(quán)限。default訪問(wèn)控制的成員可以被處于同一個(gè)包下的其他類(lèi)訪問(wèn)。在初學(xué)Java階段,使用這個(gè)進(jìn)行訪問(wèn)控制較為簡(jiǎn)便。

3.protected(子類(lèi)訪問(wèn)權(quán)限)

如果一個(gè)成員(包括成員變量、方法和構(gòu)造器等)使用protected訪問(wèn)控制符修飾,那么這個(gè)成員既可以被同一個(gè)包中的其它類(lèi)訪問(wèn),也可以被不同包中的子類(lèi)(在后面的繼承知識(shí)點(diǎn)中將涉及)訪問(wèn)。

4.?public(公共訪問(wèn)權(quán)限)

這是一個(gè)最開(kāi)放的訪問(wèn)控制級(jí)別,如果一個(gè)成員(包括成員變量、方法和構(gòu)造器等)或者一個(gè)外部類(lèi)使用public訪問(wèn)控制符修飾,那么這個(gè)成員或外部類(lèi)就可以被所有類(lèi)訪問(wèn),不管訪問(wèn)類(lèi)和被訪問(wèn)類(lèi)是否處于同一個(gè)包中,是否具有父子繼承關(guān)系,都可以直接使用“對(duì)象名.成員名”方式進(jìn)行訪問(wèn)或設(shè)置。

訪問(wèn)控制修飾符的總結(jié)如表5-2所示。

5.4.2static修飾符

static修飾符可以修飾一個(gè)類(lèi)的成員變量、成員方法和內(nèi)部類(lèi)等。

1.static修飾成員

在第3.5.2節(jié)中提到,類(lèi)定義中的方法分為兩種:

(1)對(duì)象成員:不帶static修飾符,要使用該成員,必須先生成該類(lèi)的對(duì)象,由對(duì)象調(diào)用該成員。

(2)類(lèi)成員:帶static修飾符,可以由類(lèi)名或者對(duì)象名來(lái)調(diào)用該成員,這樣的成員在內(nèi)存中只有一個(gè)副本。

2.static修飾符的特點(diǎn)

(1)?static修飾的成員(變量/方法),隨著所在類(lèi)的加載而被加載。當(dāng)JVM把類(lèi)的字節(jié)碼加載進(jìn)JVM的時(shí)候,static修飾的成員已經(jīng)在內(nèi)存中存在了,優(yōu)先于對(duì)象的存在,對(duì)象只有通過(guò)new創(chuàng)建出來(lái)后才會(huì)在堆內(nèi)存中出現(xiàn)。

(2)?static修飾的成員被該類(lèi)型的所有對(duì)象所共享;該類(lèi)創(chuàng)建出來(lái)的任何對(duì)象,都可以訪問(wèn)static成員;每個(gè)對(duì)象在內(nèi)存中都有自己的副本,但是不管一個(gè)類(lèi)具有多少個(gè)對(duì)象,static成員都只有一個(gè)副本。

(3)靜

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論