java基礎(chǔ)知識(shí)大全(必看經(jīng)典)參考模板_第1頁(yè)
java基礎(chǔ)知識(shí)大全(必看經(jīng)典)參考模板_第2頁(yè)
java基礎(chǔ)知識(shí)大全(必看經(jīng)典)參考模板_第3頁(yè)
java基礎(chǔ)知識(shí)大全(必看經(jīng)典)參考模板_第4頁(yè)
java基礎(chǔ)知識(shí)大全(必看經(jīng)典)參考模板_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一講 Java語(yǔ)言入門(mén)1.1 Java的特點(diǎn)1.1.1面向?qū)ο螅?#183; 與C+相比,JAVA是純的面向?qū)ο蟮恼Z(yǔ)言     C+為了向下兼容C,保留了很多C里面的特性,而C,眾所周知是面向過(guò)程的語(yǔ)言,這就使C+成為一個(gè)"混血兒"。而JAVA語(yǔ)法中取消了C里為兼容C所保留的特性,如取消了頭文件、指針?biāo)惴?、結(jié)構(gòu)、單元等。1.1.2可移植(平臺(tái)無(wú)關(guān)性):· 生成中間字節(jié)碼指令     與其他編程語(yǔ)言不同,Java并不生成可執(zhí)行文件(.exe文件),而是生成一種中間字節(jié)碼文件(.class文件)。任何操作系

2、統(tǒng),只要裝有Java虛擬機(jī)(JVM),就可以解釋并執(zhí)行這個(gè)中間字節(jié)碼文件。這正是Java實(shí)現(xiàn)可移植的機(jī)制。· 原始數(shù)據(jù)類(lèi)型存儲(chǔ)方法固定,避開(kāi)移植時(shí)的問(wèn)題     Java的原始數(shù)據(jù)類(lèi)型的大小是固定的。比如,在任何機(jī)器上,整型都是32位,而C+里整型是依賴(lài)于目標(biāo)機(jī)器的,對(duì)16位處理器(比如8086),整數(shù)用兩個(gè)字節(jié)表示;在像Sun SPARC這樣的32位處理器中,整數(shù)用4個(gè)字節(jié)表示。在Intel Pentium處理器上,整數(shù)類(lèi)型由具體的操作系統(tǒng)決定:對(duì)于DOS和Win32來(lái)說(shuō),整數(shù)是2個(gè)字節(jié);對(duì)于Windows 9x 、NT和2000,整數(shù)是4個(gè)字節(jié)。當(dāng)然

3、,使整數(shù)類(lèi)型平臺(tái)無(wú)關(guān)之后,性能必然有所下降,但就Java來(lái)說(shuō),這個(gè)代價(jià)是值得的。Java的字符串,則采用標(biāo)準(zhǔn)的Unicode格式保存??梢哉f(shuō),沒(méi)有這個(gè)特性,Java的可移植性也不可能實(shí)現(xiàn)。1.1.3簡(jiǎn)單· JAVA在語(yǔ)法上與C+類(lèi)似     JAVA的語(yǔ)法與C+很接近,有過(guò)C或者C編程經(jīng)驗(yàn)的程序員很容易就可以學(xué)會(huì)JAVA語(yǔ)法;· 取消了C+的一些復(fù)雜而低效的特性比如:用接口技術(shù)代替了C+的多重繼承。C中,一個(gè)類(lèi)允許有多個(gè)超類(lèi),這個(gè)特性叫做"多重繼承",多重繼承使得編譯器非常復(fù)雜且效率不高;JAVA的類(lèi)只允許有一個(gè)超類(lèi),而用接

4、口(Interface)技術(shù)實(shí)現(xiàn)與C的多繼承相類(lèi)似的功能2 / 45     其它被取消的特性包括:虛擬基礎(chǔ)類(lèi)、運(yùn)算符過(guò)載等· JAVA的基本解釋器和類(lèi)支持模塊大概僅40K     即使加入基本的標(biāo)準(zhǔn)庫(kù)和支持線(xiàn)程的模塊,也才220K左右。與GUI(圖形用戶(hù)界面)相比,明顯小很多1.1.4健壯· 取消了指針?biāo)惴?    C的最關(guān)鍵的一個(gè)特性是它的強(qiáng)大指針?biāo)惴?,比如可以用指針訪問(wèn)字符串、數(shù)組甚至文件,很容易產(chǎn)生指針溢出,意外地改寫(xiě)內(nèi)存和損毀數(shù)據(jù)。JAVA里有一個(gè)指針模型,對(duì)于普通的任務(wù),如

5、訪問(wèn)字符串、數(shù)組,根本不用指針,而一旦需要,比如訪問(wèn)對(duì)象、文件時(shí),也可以獲得指針的強(qiáng)大能力,但JAVA同時(shí)有高度的指針安全保障,用戶(hù)永遠(yuǎn)不可能訪問(wèn)一個(gè)壞掉的指針、不可能造成內(nèi)存分配錯(cuò)誤,也用不著專(zhuān)門(mén)提防可能出現(xiàn)的內(nèi)存漏洞。1.1.5多線(xiàn)程· 強(qiáng)大的多線(xiàn)程能力     多線(xiàn)程可以使程序有更好的交互性和實(shí)時(shí)性,并可以最大限度地利用多處理器系統(tǒng)。JAVA有著強(qiáng)大的多線(xiàn)程處理能力,因?yàn)楦髦髁鞑僮飨到y(tǒng)平臺(tái)在線(xiàn)程的實(shí)施方面有重大的差異,所以JAVA為不同的操作系統(tǒng)實(shí)現(xiàn)了專(zhuān)門(mén)的多線(xiàn)程機(jī)制。在這點(diǎn)上來(lái)說(shuō),JAVA沒(méi)有做到平臺(tái)無(wú)關(guān)。 a1.2 Java簡(jiǎn)史 ·

6、首次亮相-1995年5月     Java技術(shù)起先是作為小型的計(jì)算機(jī)語(yǔ)言,用于消費(fèi)類(lèi)設(shè)備,比如有線(xiàn)電視交換盒等。因?yàn)檫@些設(shè)備的功能和內(nèi)存均不足以運(yùn)行大程序,所以程序要盡可能?。涣硗?,由于不同的廠商可能選用不同的CPU,所以要求這種語(yǔ)言不能受限于任何一種獨(dú)立的體系結(jié)構(gòu)。1995年5月23日召開(kāi)的SunWorld '95大會(huì)上,一種全新的瀏覽器(今天的HotJava的前身)亮相,標(biāo)志著Java的誕生。· 開(kāi)始流行-1996年1月     那時(shí)網(wǎng)景公司決定在Netscape2.0加入對(duì)Java的支持,Netscape2.0

7、在1996年1月發(fā)布,從這一版本開(kāi)始,所有Netscape瀏覽器均支持Java。注冊(cè)了Java使用許可證的還有IBM、Symantec、Inprise和其他許多公司。就連微軟,也加入了這一行列(盡管他們支持的Java和標(biāo)準(zhǔn)的Java稍有不同)。· SUN的第一個(gè)JAVA版本-1996年初     Sun公司于1996年初發(fā)布了Java 1.02,遺憾的是,Java1.02還未擺脫其小型語(yǔ)言的影子,只適合用來(lái)做諸如網(wǎng)頁(yè)上一個(gè)隨機(jī)移動(dòng)的文字之類(lèi)的工作,并不適合用來(lái)做正規(guī)的程序開(kāi)發(fā)。Java1.02作為一種正規(guī)的編程語(yǔ)言,可以說(shuō),準(zhǔn)備得很不充分。·

8、成熟-1998年     1998年12月,Java1.2問(wèn)世了。它是一個(gè)功能全面的、具有高度擴(kuò)展能力的新版本。3天后,Java1.2被改進(jìn)成Java2,向"一次編寫(xiě),到處運(yùn)行"的目標(biāo)前進(jìn)了一大步。· 現(xiàn)狀     現(xiàn)在最新的Java版本是JDK1.4,它是一個(gè)測(cè)試版,穩(wěn)定的正式版是JDK1.3。用戶(hù)可以到 1.3 JDK的安裝與編程環(huán)境的設(shè)定 1.3.1 Java程序的開(kāi)發(fā)過(guò)程    經(jīng)典的Java工具包是JDK。盡管可以用任何文本編輯器,如記事本,都可以直接編寫(xiě)Java程

9、序然后用JDK的命令編譯和運(yùn)行,為了調(diào)試方便,也為了初學(xué)者容易上手,本教程課件將使用一個(gè)叫JPadPro的Java編寫(xiě)工具來(lái)調(diào)用JDK的工具。用戶(hù)可以到下載這個(gè)工具。1.3.2 JDK的安裝1.3.3安裝運(yùn)行之后,應(yīng)該首先設(shè)置JDK工具包所在的路徑。    菜單欄的JDK-select JDK Directory-選擇剛才安裝的JDK路徑-OK。1.3.4 新建一個(gè)project    菜單欄的File->new projects->選擇路徑, 輸入project的名字。 1.4兩個(gè)簡(jiǎn)單的程序示例 1.4.1 Java 應(yīng)

10、用程序:Hello.java· 編寫(xiě)     新建一個(gè).java文件。File-new-java file-輸入一個(gè)名字:Hello-點(diǎn)creat file.出現(xiàn)了一個(gè)空的java文件。· 編譯     JDK-compile Hello.java 或者點(diǎn)擊如演示所示的按鈕。實(shí)際上是執(zhí)行JDK工具包里的javac.exe命令,與javac G:java2jiaochengexampleteach1Hello.java是等價(jià)的。便已完成之后在同一個(gè)文件夾就會(huì)有一個(gè)同名的.class文件。· 看編譯結(jié)果,改錯(cuò)

11、      錯(cuò)誤舉例:少寫(xiě)一個(gè)分號(hào);錄入錯(cuò)誤;· 運(yùn)行     JDK-Run classes-選擇要運(yùn)行的class,輸入?yún)?shù)(這里,沒(méi)有參數(shù))或者點(diǎn)擊如演示所示的按鈕。    一個(gè)有參數(shù)的例子· 看運(yùn)行結(jié)果 1.4.2 Java Applet: StarterApplet.java    新建一個(gè)Java Applet文件。File-new-java Applet-輸入一個(gè)名字:StarterApplet-出現(xiàn)了一個(gè)空的java文件和一個(gè)Ht

12、ml文件。· 編譯 JDK-compile StarterApplet.java 或者點(diǎn)擊如演示所示的按鈕。實(shí)際上是執(zhí)行JDK工具包里的javac.exe命令,與javac G:java2jiaochengexampleteach1 StarterApplet.java是等價(jià)的。 注意 不要隱藏文件的擴(kuò)展名,否則給編譯時(shí)帶來(lái)麻煩!可以在工工具/文件夾先項(xiàng)/查看/中修改!· 看編譯結(jié)果,改錯(cuò)  · 運(yùn)行     JDK-Test Applet-選擇要運(yùn)行的class,輸入?yún)?shù)(這里,沒(méi)有參數(shù))   

13、; 或者點(diǎn)擊如演示所示的按鈕    或者直接雙擊Html文件。· 看運(yùn)行結(jié)果 1.5 如果獲得幫助 1.5.1 下載幫助    JDK并不包含幫助文件,需要到網(wǎng)站上下載,里面有示例和說(shuō)明。    http:/www.confluent.fr/javadoc/jdk13e.html,下載下來(lái)時(shí)候,雙擊安裝。1.5.2 使用幫助    敲入想查找的關(guān)鍵字,按回車(chē)。 1.6 編程的一些約定 注意:在一個(gè)原文件中只能有一個(gè)public 類(lèi)!且文件名與public類(lèi)同名!1.

14、6.1命名規(guī)則    類(lèi)名與文件名應(yīng)該一致,否則編譯出錯(cuò)。比如,class Hello的文件名應(yīng)該是Hello.java    類(lèi)名首字母大寫(xiě),每個(gè)單詞開(kāi)頭大寫(xiě),其他用小寫(xiě)。比如:Hello.java, StarterApplet.java。    變量名用第一個(gè)單詞用小寫(xiě)字母,第二個(gè)以后的單詞首字母大寫(xiě)。比如:int myAge;    方法的名字第一個(gè)單詞用小寫(xiě)字母,第二個(gè)以后的單詞首字母大寫(xiě),比如:getMyAge();1.6.2 注釋/* Here is a bloc

15、k comment.*/表示完整的一段注釋?zhuān)籭f (condition) /* Handle the condition. */.表示注釋該行以下部分if (a = 2) return TRUE; /* special case */ else return isPrime(a); / works only for odd a注釋一行1.6.3 分行    如果一行太長(zhǎng)需要換行。比如:someMethod(longExpression1, longExpression2, longExpression3, longExpression4, longExp

16、ression5);var = someMethod1(longExpression1,someMethod2(longExpression2,longExpression3); var = someMethod1(longExpression1, someMethod2(longExpression2,longExpression3);講演計(jì)劃 第三講 語(yǔ)句    Java的語(yǔ)句可以分為以下4種:· 表達(dá)式語(yǔ)句 · 方法調(diào)用語(yǔ)句 · 控制語(yǔ)句 3.1表達(dá)式語(yǔ)句     一個(gè)表達(dá)式加上一個(gè)分號(hào)就

17、構(gòu)成了一個(gè)語(yǔ)句。分號(hào)表示一個(gè)語(yǔ)句的結(jié)束,缺少分號(hào),編譯將出錯(cuò)。最典型的表達(dá)式語(yǔ)句是賦值語(yǔ)句。比如:int x;x=23;3.2方法調(diào)用語(yǔ)句     調(diào)用一個(gè)類(lèi)的對(duì)象的方法:類(lèi)名(或?qū)ο竺?方法名(參數(shù)列表)。比如:System.out.println("Hello").如果方法有返回值,還可以把返回值賦值給一個(gè)變量。比如:String s="Hello",int len;len=s.length();3.3控制語(yǔ)句     Java語(yǔ)言的控制語(yǔ)句有2種:條件語(yǔ)句、循環(huán)語(yǔ)句。 

18、0;  條件語(yǔ)句:    條件語(yǔ)句有兩種:if語(yǔ)句和switch語(yǔ)句。· if語(yǔ)句: if (條件) 代碼塊1else 代碼塊2    如果條件為真,則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2。    else部分是可選的,也就是說(shuō),可以沒(méi)有else。    如果有else,則與最近的if結(jié)合:· switch語(yǔ)句     switch語(yǔ)句是多分支的開(kāi)關(guān)語(yǔ)句,它的一般格式定義如下:switch(表達(dá)式)ca

19、se 常量值1:代碼塊1break;case 常量值2:代碼塊2break;default:代碼塊    語(yǔ)句中表達(dá)式的值必須是整型或者字符型;常量值1到常量值n必須也是整型或者字符型。switch語(yǔ)句首先計(jì)算表達(dá)式的值,如果表達(dá)式的值和某個(gè)case后面的常量值相同,就執(zhí)行該case里的若干個(gè)語(yǔ)句直到break語(yǔ)句為止。如果沒(méi)有一個(gè)常量與表達(dá)式的值相同,則執(zhí)行default后面的若干個(gè)語(yǔ)句。default是可有可無(wú)的,如果它不存在,并且所有的常量值都和表達(dá)式的值不相同,那么switch語(yǔ)句就不會(huì)進(jìn)行任何處理。    需要注意的是,在s

20、witch同一個(gè)語(yǔ)句中,case后的常量值必須互不相同。 3.3控制語(yǔ)句     Java語(yǔ)言的控制語(yǔ)句有2種:條件語(yǔ)句、循環(huán)語(yǔ)句。    條件語(yǔ)句:    條件語(yǔ)句有兩種:if語(yǔ)句和switch語(yǔ)句。· if語(yǔ)句: if (條件) 代碼塊1else 代碼塊2    如果條件為真,則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2。    else部分是可選的,也就是說(shuō),可以沒(méi)有else。    如果有e

21、lse,則與最近的if結(jié)合:· switch語(yǔ)句     switch語(yǔ)句是多分支的開(kāi)關(guān)語(yǔ)句,它的一般格式定義如下:switch(表達(dá)式)case 常量值1:代碼塊1break;case 常量值2:代碼塊2break;default:代碼塊    語(yǔ)句中表達(dá)式的值必須是整型或者字符型;常量值1到常量值n必須也是整型或者字符型。switch語(yǔ)句首先計(jì)算表達(dá)式的值,如果表達(dá)式的值和某個(gè)case后面的常量值相同,就執(zhí)行該case里的若干個(gè)語(yǔ)句直到break語(yǔ)句為止。如果沒(méi)有一個(gè)常量與表達(dá)式的值相同,則執(zhí)行default后面的若干個(gè)

22、語(yǔ)句。default是可有可無(wú)的,如果它不存在,并且所有的常量值都和表達(dá)式的值不相同,那么switch語(yǔ)句就不會(huì)進(jìn)行任何處理。    需要注意的是,在switch同一個(gè)語(yǔ)句中,case后的常量值必須互不相同。     循環(huán)語(yǔ)句:     循環(huán)語(yǔ)句,顧名思義,是反復(fù)執(zhí)行的語(yǔ)句。比如,計(jì)算100的階乘,1*2*3*.*100,就需要用到循環(huán)語(yǔ)句,不然,就要寫(xiě)一百遍乘法。循環(huán)語(yǔ)句需要特別小心,很容易陷入死循環(huán),所以循環(huán)體的代碼塊里需要有能使循環(huán)結(jié)束的語(yǔ)句。Java有三種循環(huán)語(yǔ)句:while語(yǔ)句,do-while

23、語(yǔ)句和for語(yǔ)句。· while語(yǔ)句:     while語(yǔ)句的格式是:while(條件)代碼塊    當(dāng)條件成立的時(shí)候,執(zhí)行代碼塊,再檢查條件,如果還成立,再執(zhí)行代碼塊,直到條件不成立。    比如,計(jì)算10的階乘:· do-while語(yǔ)句     do-while語(yǔ)句的格式是:do代碼塊while(條件)    do-while語(yǔ)句和while語(yǔ)句的區(qū)別在于:while語(yǔ)句先檢查條件,如果條件不成立,則不進(jìn)入循環(huán)體;do-

24、while語(yǔ)句先執(zhí)行循環(huán)體的代碼,再檢查條件,如果條件成立,則在此執(zhí)行循環(huán)體的代碼。所以,do-while語(yǔ)句至少要執(zhí)行一遍循環(huán)體的代碼塊。    比如,計(jì)算10的階乘:· for語(yǔ)句     for語(yǔ)句是Java語(yǔ)言中用得最多的循環(huán)語(yǔ)句。它的格式如下:for(表達(dá)式1,表達(dá)式2,表達(dá)式3)代碼塊    其中,表達(dá)式1完成變量的初始化,表達(dá)式2時(shí)布爾類(lèi)型的表達(dá)式,是循環(huán)條件,表達(dá)式3是黨執(zhí)行了一遍循環(huán)之后,修改控制循環(huán)的變量值。    for語(yǔ)句的執(zhí)行過(guò)程是這樣的:

25、首先計(jì)算表達(dá)式1,完成必要的初始化工作;然后判斷表達(dá)式2的值,如果表達(dá)式的值為true,則執(zhí)行循環(huán)體;如果為false,則跳出循環(huán)。執(zhí)行完循環(huán)體之后緊接著計(jì)算表達(dá)式3,以便改變循環(huán)條件,這樣一輪循環(huán)就結(jié)束了。第二輪循環(huán)從計(jì)算表達(dá)式開(kāi)始,如果表達(dá)式的值仍為true,則繼續(xù)循環(huán);否則循環(huán)結(jié)束,執(zhí)行for語(yǔ)句后面的語(yǔ)句。    比如,計(jì)算10的階乘:· 嵌套循環(huán)     經(jīng)常可以遇到嵌套循環(huán)的例子。所謂嵌套循環(huán),是指一個(gè)循環(huán)體里還有一個(gè)或者更多個(gè)循環(huán)。比如計(jì)算10以?xún)?nèi)的階乘之和,或者求50以?xún)?nèi)的素?cái)?shù),就需要用到嵌套循環(huán)。我們以求5

26、0以?xún)?nèi)的素?cái)?shù)為例,說(shuō)明嵌套循環(huán)的用法;求10以?xún)?nèi)的階乘之和,將留作作業(yè)。    循環(huán)語(yǔ)句里的break語(yǔ)句和continue語(yǔ)句:    在循環(huán)體中,遇到break語(yǔ)句,那么整個(gè)循環(huán)語(yǔ)句就結(jié)束;如果遇到continue語(yǔ)句,那么本次循環(huán)就結(jié)束,就是說(shuō),不再執(zhí)行本次循環(huán)中continue語(yǔ)句后面的語(yǔ)句,而是轉(zhuǎn)入下一次循環(huán)。 3.5 變量的作用域     變量是由作用域的。所謂變量的作用域,是指一個(gè)變量在什么地方生效。總的來(lái)說(shuō),變量的作用域是聲明它的塊。所謂塊,是指用一對(duì)花括號(hào)包圍起來(lái)的任意數(shù)量的Java語(yǔ)句

27、。變量只在聲明它的塊中有效,在這塊以外,變量是無(wú)效的。    然而,不可以在兩個(gè)嵌套的塊中聲明兩個(gè)完全同名的變量。    注意,在C+中,這是允許的,內(nèi)部定義會(huì)掩蓋外部定義。這很容易造成錯(cuò)誤,所以Java不允許這樣做。     小結(jié)     這一講,我們主要學(xué)習(xí)了Java的語(yǔ)句,主要是流程控制語(yǔ)句,包括條件語(yǔ)句和循環(huán)語(yǔ)句等。語(yǔ)句是程序的基本組成部分,是我們進(jìn)一步學(xué)習(xí)Java的基礎(chǔ)。希望同學(xué)們切實(shí)掌握好這部分內(nèi)容,為我們的進(jìn)一步學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。   &#

28、160; 習(xí)題 1. 編一個(gè)計(jì)算1!+2!+10!的應(yīng)用程序 編寫(xiě)一個(gè)應(yīng)用程序計(jì)算100以?xún)?nèi)的全部質(zhì)數(shù) 2. 一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱(chēng)為“完數(shù)”,編寫(xiě)一個(gè)應(yīng)用程序,求1000之內(nèi)的所有完數(shù)。 3. 求45和的最大公約數(shù)和最小公倍數(shù)。 第四講 數(shù)組和字符串4.1什么是數(shù)組?為什么要數(shù)組?    除了基本數(shù)據(jù)類(lèi)型,Java還提供一種導(dǎo)出類(lèi)型:數(shù)組。數(shù)組是相同類(lèi)型的數(shù)據(jù)按順序組成的一種復(fù)合數(shù)據(jù)類(lèi)型,通過(guò)數(shù)組名和下標(biāo),可以使用數(shù)組中的數(shù)據(jù)。下標(biāo)從0開(kāi)始。數(shù)組是所有編程語(yǔ)言中常用的數(shù)據(jù)結(jié)構(gòu)。    為什么要數(shù)組呢?我們來(lái)舉一個(gè)

29、例子。假設(shè)我們需要表示一個(gè)班50個(gè)人的數(shù)學(xué)成績(jī),要求求出平均成績(jī)。如果沒(méi)有數(shù)組,我們需要用前面學(xué)過(guò)的聲明變量的方法,聲明50個(gè)變量,寫(xiě)50次加法運(yùn)算!數(shù)組可以大大地簡(jiǎn)化類(lèi)似的問(wèn)題!我們只要聲明一個(gè)長(zhǎng)度為50的整型數(shù)組,結(jié)合上一講我們學(xué)過(guò)的循環(huán)語(yǔ)句,就可以很方便地解決這個(gè)問(wèn)題!    在以前的編程語(yǔ)言比如C或者C+中,字符串也使用數(shù)組來(lái)表示的:字符串是字符數(shù)組!所以字符串與數(shù)組有著天然的聯(lián)系。但是在Java中,提供了一種更方便的表示字符串的方法:用一個(gè)String類(lèi)來(lái)表示。類(lèi)是面向?qū)ο蟮恼Z(yǔ)言特有的概念,對(duì)于初次接觸面向?qū)ο蠹夹g(shù)的人來(lái)說(shuō),比較難理解。所以,這一講,我們

30、將學(xué)習(xí)表示字符串的String類(lèi),也對(duì)類(lèi)的使用有一個(gè)粗略的了解,作為下一講詳細(xì)學(xué)習(xí)類(lèi)的準(zhǔn)備。    需要指出的是,C語(yǔ)言里的其他兩種導(dǎo)出類(lèi)型:結(jié)構(gòu)體和共用體,在Java里已經(jīng)被取消。    下面,我們來(lái)學(xué)習(xí)數(shù)組和字符串。 4.2數(shù)組的聲明、創(chuàng)建和初始化 1. 數(shù)組的聲明:     聲明數(shù)組,包括聲明數(shù)組的名字、數(shù)組包含的元素的數(shù)據(jù)類(lèi)型。數(shù)組可以一維的,也可以是二維或者多維的。舉例來(lái)說(shuō):一個(gè)班有50個(gè)人,我們用一個(gè)長(zhǎng)度為50的一維數(shù)組表示;如果要表示每個(gè)同學(xué)的五門(mén)高考成績(jī),那我們就需要用一個(gè)第一維長(zhǎng)度為50

31、,第二維長(zhǎng)度為5的二維數(shù)組。    聲明一維數(shù)組有兩種格式:· 數(shù)組元素類(lèi)型 數(shù)組名 ; · 數(shù)組元素類(lèi)型 數(shù)組名;     比如:int student ; 或者: int student;    類(lèi)似地,聲明二維數(shù)組有兩種格式:· 數(shù)組元素類(lèi)型 數(shù)組名 ; · 數(shù)組元素類(lèi)型 數(shù)組名;     比如:int score ; 或者: int score;    下面,我們主要以一維數(shù)組為例,學(xué)習(xí)數(shù)組的用法。

32、2. 數(shù)組的創(chuàng)建:     聲明數(shù)組僅僅給出了數(shù)組名字和元素的數(shù)據(jù)類(lèi)型,想要真正使用數(shù)組還必須為數(shù)組分配內(nèi)存空間,也就是創(chuàng)建數(shù)組。在為數(shù)組分配內(nèi)存空間時(shí)必須指明數(shù)組的長(zhǎng)度。為數(shù)組分配內(nèi)存空間的格式如下:· 數(shù)組名 = new 數(shù)組元素的類(lèi)型 數(shù)組的長(zhǎng)度 例如:student = new int 50;score = new int 50 4;    事實(shí)上,數(shù)組的聲明和創(chuàng)建可以一起完成,比如:int student = new int 50;    一旦數(shù)組被創(chuàng)建,數(shù)組的大小就不能改變。如果在程

33、序運(yùn)行期間,需要對(duì)數(shù)組的大小進(jìn)行擴(kuò)展,通常需要使用另一種數(shù)據(jù)對(duì)象:Vector。有關(guān)向量和擴(kuò)展數(shù)組,有興趣的同學(xué)可以在Java幫助中查找Vector的幫助。    student數(shù)組創(chuàng)建之后,其內(nèi)存模式如圖:3. 數(shù)組的初始化:     創(chuàng)建數(shù)組后,系統(tǒng)會(huì)給每個(gè)元素一個(gè)默認(rèn)的值,比如,整型數(shù)組的默認(rèn)值是0。    我們也可以在聲明數(shù)組的同時(shí)給數(shù)組一個(gè)初始值,我們稱(chēng)之為初始化。int num = 2, 4, 4, 1。    這個(gè)初始化動(dòng)作相當(dāng)于:int num = new i

34、nt 4;num 0=2; num 1=5; num 2=4; num 3=1;4.3數(shù)組的使用 1. 數(shù)組的訪問(wèn)     前面我們已經(jīng)看到,數(shù)組通過(guò)下標(biāo)訪問(wèn)數(shù)組元素,比如:student 0 =70,student 49=87等。注意,下標(biāo)從0開(kāi)始,如果數(shù)組長(zhǎng)度為n,則下標(biāo)是0 n -1,如果使用n或者以上的元素,將會(huì)發(fā)生數(shù)組溢出異常。比如:student 50 = 79,雖然編譯的時(shí)候能通過(guò),程序運(yùn)行時(shí)將中止。    二維數(shù)組的使用與之類(lèi)似。2. 數(shù)組的復(fù)制     可以把一個(gè)數(shù)組變量復(fù)制給另一個(gè),但

35、兩個(gè)變量引用的都會(huì)是同一個(gè)內(nèi)存空間,所以改變一個(gè)數(shù)組的值,另一個(gè)數(shù)組變量的值也會(huì)改變。比如:int num = 2, 3, 5, 1;int numcopy =num;numcopy2 =5;現(xiàn)在,num2也變成了5。    如果真的想把一個(gè)數(shù)組的所有值都復(fù)制到另一個(gè)數(shù)組中,就需要采用System . arrarycopy()方法:System . arrarycopy ( num, 0, numcopy, 0, 4)。這樣,num和numcopy將指向不同的內(nèi)存空間,numcopy的值的改變,不會(huì)在影響n(yōu)um。有興趣的同學(xué)可以參考幫助文件。 4.4字符串 

36、60;   前面已經(jīng)說(shuō)過(guò):Java使用java.lang包中的String類(lèi)來(lái)表示字符串,盡管我們可以用字符數(shù)組來(lái)實(shí)現(xiàn)類(lèi)似的功能。關(guān)于類(lèi)的詳細(xì)知識(shí),我們下一講將會(huì)講到。由于類(lèi)是面向?qū)ο缶幊陶Z(yǔ)言最核心的概念,學(xué)習(xí)起來(lái)有些難度,我們?cè)谶@里先通過(guò)String類(lèi)對(duì)類(lèi)的概念有一個(gè)粗略的了解,以使我們下面的學(xué)習(xí)更順利一些。    字符串,顧名思義,就是一串字符。比如:"student100", "China"等。用一對(duì)雙引號(hào)表示字符串。我們也可以把字符串看成字符數(shù)組(事實(shí)上,C就是把字符串當(dāng)作字符數(shù)組來(lái)處理),但是把

37、它視為類(lèi)更方便一些。為什么?我們下面馬上會(huì)看到。· 字符串的聲明、創(chuàng)建     字符串聲明的格式是: String 字符串名    比如:String s;    字符串的創(chuàng)建格式:字符串名 = new String(字符串常量)或者 字符串名=字符串常量    比如:s = new String ( "student" ); 或者:s = "student";    聲明和創(chuàng)建可以一步完成,比如

38、:String s = new String ( "student" ); 或者 String s = "student"    大家是不是覺(jué)得:String這個(gè)類(lèi)的聲明,跟前面我們學(xué)過(guò)的基本數(shù)據(jù)類(lèi)型的聲明的格式是一樣的,比如:整型的聲明:int n; 比較一下: String s;     事實(shí)上,    類(lèi)型 變量名    這種格式是類(lèi)的聲明的一般格式,你可以把類(lèi)當(dāng)作基本數(shù)據(jù)類(lèi)型一樣來(lái)聲明。  

39、0; 另一方面,    變量名= new 類(lèi)名(參數(shù)列表);比如 s = new String ( "student" );    這是類(lèi)的一般創(chuàng)建格式。 4.5與字符串有關(guān)的操作 · 字符串的長(zhǎng)度 length()方法:String s = "student"int len=s.length();    需要指出的是,s.length()這種調(diào)用方法,是面向?qū)ο缶幊陶Z(yǔ)言特有的方法,我們把s叫做String類(lèi)的對(duì)象,就像int n,我們把n叫做整型變量一樣

40、;把length()叫做String類(lèi)的方法。下面我們可以看到,String類(lèi)的方法,都是通過(guò) 對(duì)象名.方法名()這種方式調(diào)用的。· 取子串 String s = "I am a Chinese"String subs;subs = s.substring (7);· 字符串的比較 String tom = "my name is tom"String jane = "my name is jane"tom.equals(jane);返回false。表示不相等pareTo(jane),返回一個(gè)負(fù)整數(shù),因?yàn)榈谝粋€(gè)不相

41、等的字符t和j相比,t在j的后面;如果返回0,表示相等;如果返回一個(gè)正整數(shù),表示tom和jane第一個(gè)不相等的字符,tom的在jane的前面。    注意,不要用tom= =jane判斷兩個(gè)字符串是否相等,因?yàn)檫@樣的話(huà)比較的是它們?cè)趦?nèi)存中的地址是否相同,而不是我們所希望的比較字符串的內(nèi)容是否相同。· 字符串連接 String s = " I am"String s2 = "a Chinese"String s4, s4;s4 = s+s2;s4=s + 24;整數(shù)型24將會(huì)自動(dòng)轉(zhuǎn)換為字符串。· 字符串檢索

42、     字符串檢索是指判斷一個(gè)字符串是否包含某一個(gè)字符或者子字符串,如果有,返回它的位置,如果沒(méi)有,返回一個(gè)負(fù)數(shù)。String s = "I am a Chinese"s.indexOf("Chinese" ), 返回7;s.indexOf('a'); 返回2;· 字符串轉(zhuǎn)換為數(shù)值     如果一個(gè)字符串是一串?dāng)?shù)字,可以把它轉(zhuǎn)換成相應(yīng)的數(shù)值。o 轉(zhuǎn)換為整型: String s = "21"int x; x= Integer.parseInt (s)

43、;o 轉(zhuǎn)換為浮點(diǎn)型 String s = "22.124"float f; f = Float.valueOf(s).floatValue();o 當(dāng)然,也可以把整數(shù)或者浮點(diǎn)數(shù)轉(zhuǎn)換為字符串類(lèi)型: String s;int n = 24;s = String.valueOf ( n );o 其他     與字符串有關(guān)的方法還有很多,我們不可能一一講解。前面我們說(shuō)過(guò),我們要學(xué)會(huì)使用幫助。我們查找關(guān)于String的幫助,就可以看到,有關(guān)于String的所有方法的詳細(xì)講解。希望同學(xué)們可以學(xué)會(huì)使用幫助。     小結(jié) 

44、60;   這一講,我們學(xué)習(xí)了數(shù)組的一些知識(shí),并通過(guò)String類(lèi),一方面學(xué)習(xí)了字符串的使用,另一方面先對(duì)類(lèi)的一些概念和用法,比如類(lèi)的方法調(diào)用,有了一些粗略的了解。    數(shù)組是我們經(jīng)常要用到的數(shù)據(jù)結(jié)構(gòu),它是一種導(dǎo)出型的數(shù)據(jù)結(jié)構(gòu),對(duì)我們處理大規(guī)模的數(shù)據(jù),有很大幫助。    前面我們說(shuō),用String類(lèi)表示字符串,比我們自己用字符數(shù)組來(lái)做更方便。因?yàn)镾tring類(lèi)為我們提供了很多現(xiàn)成的可以直接使用的對(duì)字符串的操作方法。比如substring( ),equals( )等方法。如果我們要用字符數(shù)組來(lái)完成與substrin

45、g類(lèi)似的功能,就只能自己把子串的每一個(gè)字符復(fù)制到另外一個(gè)字符數(shù)組中;與equals()類(lèi)似的功能,就只能自己一個(gè)一個(gè)字符地檢查兩個(gè)字符船是否相等。提供對(duì)自己的成員數(shù)據(jù)的完整的操作方法,也就是把數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝起來(lái),是類(lèi)的最大的好處。如果現(xiàn)在還不能理解這句話(huà),不要緊,我們現(xiàn)在只需要知道:使用String類(lèi)這種方法,非常方便。     習(xí)題 1. 聲明一個(gè)數(shù)組,存一個(gè)學(xué)生的五門(mén)成績(jī)。求該學(xué)生總成績(jī)、平均成績(jī)。 2. 將一個(gè)數(shù)組中的值按逆序重新存放,例如,原來(lái)順序?yàn)椋?,5,7,4,8,要求改為:8,4,7,5,9。 3. 編寫(xiě)一個(gè)應(yīng)用程序,連接兩個(gè)字符串:“I

46、am”和“a student”,并求出第7個(gè)字符是什么?找出“am”在該字符串中的位置,最后把所有字符都變成大寫(xiě)字符。 4. 統(tǒng)計(jì)一個(gè)字符串中字母、空格和數(shù)字的個(gè)數(shù)。 第五講:類(lèi)、對(duì)象和接口(1)5.1什么是類(lèi)    上一講我們使用了一個(gè)String類(lèi),我們說(shuō)過(guò):類(lèi)把一類(lèi)對(duì)象的成員函數(shù)和方法封裝起來(lái),使用起來(lái)很方便。那么,什么是類(lèi)呢?要理解類(lèi),我們先來(lái)了解"對(duì)象"的概念,因?yàn)轭?lèi)就是用來(lái)創(chuàng)建對(duì)象的模板,它包含了被創(chuàng)建的對(duì)象的狀態(tài)描述和方法定義。    我們可以把長(zhǎng)虹牌電視機(jī)看成是一個(gè)對(duì)象。我們不必關(guān)心電視機(jī)里面的集成

47、電路是怎樣的,也不用關(guān)心電視機(jī)的顯像管的工作原理,我們只需要知道電視機(jī)的遙控器上提供了對(duì)這臺(tái)電視機(jī)的什么操作,比如選臺(tái)、調(diào)節(jié)色彩、聲音等。這樣,我們雖然不知道電視機(jī)內(nèi)部是怎么工作的,但我們可以使用這臺(tái)電視機(jī)。聽(tīng)起來(lái)這跟編程沒(méi)什么關(guān)系,但面向?qū)ο蟮乃枷胝桥c它類(lèi)似:對(duì)象,對(duì)外只提供操作該對(duì)象的方法,內(nèi)部的實(shí)現(xiàn)對(duì)外是隱藏的。我們把這種技術(shù)叫做數(shù)據(jù)隱藏。這樣,程序員不必了解一個(gè)對(duì)象內(nèi)部是怎么實(shí)現(xiàn)的,但可以很方便地使用這個(gè)對(duì)象。    類(lèi),就是對(duì)象的模板。比如,電視機(jī)是一個(gè)類(lèi),而某一臺(tái)電視機(jī)就是這個(gè)類(lèi)的一個(gè)對(duì)象,也叫一個(gè)實(shí)例。    我們前面

48、使用的String類(lèi),雖然我們不知道,也不必知道里面的實(shí)現(xiàn)細(xì)節(jié),但我們只要知道他的操作方法,就可以很方便地使用它。這樣,對(duì)別的程序員編寫(xiě)的程序,我們可以很方便地拿來(lái)使用,從而提高軟件的復(fù)用程度和編程的效率。    比如,我們構(gòu)造一個(gè)類(lèi):TV,然后對(duì)外提供一些對(duì)它的操作方法,選臺(tái) selectChannel( )等。然后用這個(gè)類(lèi)創(chuàng)建一個(gè)對(duì)象:TV kongKai;然后就可以這樣操作這臺(tái)電視: kongKai.selectChannel。    類(lèi)的另一個(gè)特性,也是它的一個(gè)大好處,是繼承。繼承的概念類(lèi)似于這樣一種表達(dá):電視是一種電器。如果

49、我們有一個(gè)電器類(lèi),那么,我們說(shuō),電視機(jī)類(lèi)繼承了電器類(lèi)。繼承有什么好處呢?設(shè)想電器類(lèi)有一些屬性,比如工作電壓,功率,有些一些方法,比如:打開(kāi) open( ), 關(guān)閉:close( )。這時(shí)候,如果電視類(lèi)繼承了電器類(lèi),電視類(lèi)就自動(dòng)擁有了電器類(lèi)的這些屬性和方法,而不用再自己重寫(xiě)一遍(當(dāng)然,如果想重寫(xiě),也可以,我們把這種技術(shù)叫做重載)。這樣做有什么好處呢?最明顯的好處就是減輕編程的工作量。假設(shè)我們有令一個(gè)類(lèi):VCD類(lèi),它也繼承了電器類(lèi),對(duì)于打開(kāi)關(guān)閉等,同樣不用重新編寫(xiě)。    好了,既然面向?qū)ο蟮姆椒ㄓ羞@么多好處,我們下面就來(lái)學(xué)習(xí)類(lèi)和對(duì)象的一些基本知識(shí)。 5.2 一個(gè)例子

50、     下面是一個(gè)完整的類(lèi)的例子,我們用這個(gè)例子詳細(xì)講解類(lèi)的一些用法。class Employee private String name;private double salary;private int hireYear;private static String company=new String("IBM");public Employee(String n, double s, int d) name = n;salary = s;hireYear = d;public void print() System.out.p

51、rintln(name + " " + salary + " " + getHireYear() + " "+ getCompany();return;public void raiseSalary(double byPercent) salary *= 1 + byPercent / 100;public void raiseSalary(int byAbsolute) salary +=byAbsolute;public int getHireYear() return hireYear;public static String

52、getCompany()return company;    為了測(cè)試這個(gè)類(lèi),我們寫(xiě)了一個(gè)測(cè)試程序:package teach4;public class EmployeeTest public static void main(String args) Employee emp = new Employee ("Tony Tester", 38000, 1990);emp.print();emp.raiseSalary(5.0D);emp.print();int raise=1000;emp.raiseSalary(raise);emp.pr

53、int();5.3 類(lèi)的結(jié)構(gòu)     class Employee 表示一個(gè)類(lèi)的聲明,其中,class是關(guān)鍵字,Employee是類(lèi)名。在一對(duì)大括號(hào)中的內(nèi)容,我們叫做類(lèi)體,是這個(gè)類(lèi)的實(shí)現(xiàn)部分。    前面我們說(shuō)過(guò),類(lèi)把數(shù)據(jù)和在數(shù)據(jù)上的操作方法封裝起來(lái),所以,類(lèi)體中有兩部分,一部分是數(shù)據(jù),另一部分是方法。    數(shù)據(jù)部分是:private String name;private double salary;private int hireDay;    分別是String類(lèi)型的

54、name,代表該員工的姓名,double類(lèi)型的salary,代表該員工的薪水;int類(lèi)型的hireDay,代表該員工的雇傭年份。    private是一個(gè)關(guān)鍵字,是私有的意思,表明這些數(shù)據(jù),只能被類(lèi)里面的方法訪問(wèn),外部程序是不能直接訪問(wèn)這些數(shù)據(jù)的。這正是類(lèi)的一個(gè)好處:對(duì)外隱藏?cái)?shù)據(jù)。我們建議,始終保持?jǐn)?shù)據(jù)的私用,也就是始終用private來(lái)修飾數(shù)據(jù),來(lái)是我們的程序更安全。    這個(gè)類(lèi)的方法部分是:public Employee(String n, double s, Day d)public void print()public v

55、oid raiseSalary(double byPercent)public void raiseSalary(int byAbsolute)public int getHireYear()public static String getCompany()    所謂方法,就是對(duì)數(shù)據(jù)的操作,有過(guò)C編程時(shí)間的同學(xué),可以把它理解為函數(shù),只是這些函數(shù)是放在類(lèi)里并對(duì)類(lèi)的數(shù)據(jù)進(jìn)行操作的。比如這個(gè)方法:    public void raiseSalary(double byPercent)就是對(duì)數(shù)據(jù)salary的操作。  

56、  public是一個(gè)關(guān)鍵字,是公有的意思,表明該方法可以用 對(duì)象名.方法名 的方式調(diào)用。比如我們的測(cè)試程序中: emp.raiseSalary(5.0D),就是對(duì)這個(gè)方法的調(diào)用。否則,如果是private,該方法就只能被類(lèi)里的方法調(diào)用,像emp.raiseSalary(5.0D)這種調(diào)用是非法的。    void表明方法的返回類(lèi)型為空,也就是什么都不返回。public int getHireYear()這個(gè)方法的返回類(lèi)型是int。一般來(lái)說(shuō),返回類(lèi)型這部分是不能缺少的,即使方法什么都不返回,也要用一個(gè)void關(guān)鍵字修飾。有一個(gè)例外:構(gòu)造函數(shù)。我們后面會(huì)講

57、到。    raiseSalary(double byPercent)是方法名,前面我們已經(jīng)說(shuō)過(guò)方法的命名規(guī)則,第一個(gè)單詞小寫(xiě),以后沒(méi)個(gè)單詞首字母大寫(xiě)。這樣可以增加可讀性,根據(jù)raiseSalary這個(gè)名字就可以知道這個(gè)方法的功能是漲工資。括號(hào)里是參數(shù)列表,類(lèi)似于我們前面學(xué)過(guò)的變量的聲明。如果有多個(gè)參數(shù),用逗號(hào)隔開(kāi),比如 Employee(String n, double s, int d)。    方法的一對(duì)大括號(hào)里是方法的實(shí)現(xiàn),就是我們前面學(xué)過(guò)的語(yǔ)句的組合。比如print( )方法,是打印出該員工的姓名工資等信息;raiseSal

58、ary( )方法是根據(jù)參數(shù),把員工工資漲相應(yīng)的比例。注意,如果方法有返回類(lèi)型且不為void,那么在方法的實(shí)現(xiàn)中必須有return語(yǔ)句,返回相應(yīng)的類(lèi)型。比如hireYear( )方法,就有return子句。相反,如果返回類(lèi)型是void,那么不能返回任何數(shù)據(jù),但可以是一個(gè)return語(yǔ)句,后面不帶返回值,比如print( )方法里就有一個(gè)空的return語(yǔ)句。 5.4 構(gòu)造方法     我們注意到,有一個(gè)方法是與類(lèi)名同名的,而且沒(méi)有返回類(lèi)型,比如這個(gè)例子中的public Employee(String n, double s, int d),我們把它叫做構(gòu)造方法。構(gòu)造

59、方法是做什么用的呢?構(gòu)造方法是在聲明對(duì)象的時(shí)候,自動(dòng)調(diào)用的方法,其作用是為對(duì)象的數(shù)據(jù)做一些必要的初始化工作。比如,這里的public Employee(String n, double s, int d)方法,就是初始化這個(gè)員工的姓名,工資和雇傭年份。在聲明emp對(duì)象的時(shí)候,調(diào)用的就是構(gòu)造函數(shù)。    Employee emp = new Employee ("Tony ", 10000, 1990);    如果沒(méi)有定義構(gòu)造函數(shù),Java會(huì)自動(dòng)提供一個(gè)默認(rèn)的構(gòu)造函數(shù),把所有成員數(shù)據(jù)初始化為默認(rèn)值,比如數(shù)字類(lèi)型(包

60、括整型、浮點(diǎn)型)將是0,布爾類(lèi)型將是false等。注意在沒(méi)有構(gòu)造方法時(shí),new后面的()中不能有數(shù)字!    需要注意的是,與構(gòu)造函數(shù)相對(duì)的是析構(gòu)函數(shù),目的是在對(duì)象不再使用的時(shí)候回收對(duì)象使用的內(nèi)存。C+里就支持析構(gòu)函數(shù)。但是,由于Java提供自動(dòng)回收"垃圾"的機(jī)制,所以不需要進(jìn)行內(nèi)存回收,所以Java沒(méi)有析構(gòu)函數(shù)。 5.5 方法的重載     方法的名字相同但參數(shù)的類(lèi)型或個(gè)數(shù)不同,我們叫做方法的重載。    類(lèi)允許有相同名字的方法,比如我們這個(gè)例子中的raiseSalary方法。pub

61、lic void raiseSalary(double byPercent)public void raiseSalary(int byAbsolute)    第一個(gè)的參數(shù)是double型,表明工資上漲的百分比;第二個(gè)的參數(shù)使int型,表明工資上漲的數(shù)額。這兩個(gè)方法參數(shù)不同。調(diào)用的時(shí)候,根據(jù)參數(shù)的不同,決定使用哪一個(gè)方法。比如,我們的例子中,emp.raiseSalary(5.0D)的參數(shù)是double型,所以將會(huì)調(diào)用第一個(gè),工資上漲5%,emp.raiseSalary(raise)的參數(shù)raise是一個(gè)int型,所以將會(huì)調(diào)用第二個(gè),是工資上漲1000元。

62、60;   方法的重載的好處是使我們的程序處理更方便。比如,我們的例子中,漲工資,我們提供了統(tǒng)一的raiseSalary( ) 方法,我們不用自己判斷漲的是百分比還是絕對(duì)數(shù)額,由程序自己判斷,是程序更好用,可讀性更強(qiáng)。 5.6 靜態(tài)方法和靜態(tài)成員變量     所謂靜態(tài)方法和靜態(tài)成員變量,是指那些用static關(guān)鍵字修飾的方法或者變量,比如我們例子中的private static String company就是一個(gè)靜態(tài)成員變量,而public static String getCompany()和public static void setCo

63、mpany(String s)都是靜態(tài)方法。    靜態(tài)的意思,是指該方法或者變量在整個(gè)類(lèi)中只有一份。我們說(shuō),類(lèi)是用來(lái)創(chuàng)建對(duì)象的模板,就是說(shuō),我們創(chuàng)建對(duì)象的時(shí)候,每個(gè)對(duì)象都會(huì)有類(lèi)中所聲明的成員變量的一個(gè)副本。但是,對(duì)于靜態(tài)成員變量,在內(nèi)存中只有一個(gè)副本,所有的對(duì)象將共享這個(gè)副本。比如我們的例子中,所有Employee所在的公司就只有一個(gè),所以我們沒(méi)有必要為每一個(gè)Employee的對(duì)象都保留一個(gè)company的副本,所以我們把它聲明為靜態(tài)的成員變量。比如我們例子中有兩個(gè)Employee類(lèi)的對(duì)象:emp和emp2,他們的成員變量?jī)?nèi)存模式如下圖所示: 

64、0;  所以,只要改變了company的值,對(duì)所有Employee的對(duì)象都是起作用的。    另一方面,靜態(tài)方法只能訪問(wèn)靜態(tài)成員變量,比如我們的例子中,setCompany( )只能訪問(wèn)company,如果它訪問(wèn)name之類(lèi)的變量,編譯器將會(huì)報(bào)錯(cuò)。而且靜態(tài)方法的調(diào)用是 類(lèi)名.方法名的方式來(lái)調(diào)用的,也可以用一般的 對(duì)象名.方法名 的方式來(lái)調(diào)用。    實(shí)際上,我們先前用的System.out.println( )方法,就是一個(gè)靜態(tài)的方法,所以我們可以直接用 類(lèi)名.方法名 的方式調(diào)用。而一個(gè)類(lèi)里如果有main函數(shù)都要聲明為靜態(tài)方法,因?yàn)橐粋€(gè)程序只能有一個(gè)main函數(shù)入口。     小結(jié)     這一講我們學(xué)習(xí)了類(lèi)和對(duì)象的一些基本概念和知識(shí),包括類(lèi)的結(jié)構(gòu),構(gòu)造方法 ,方法的重載 ,靜態(tài)方法和靜態(tài)成員變量。類(lèi)和

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論