大三上java17單元課件lesson_第1頁(yè)
大三上java17單元課件lesson_第2頁(yè)
大三上java17單元課件lesson_第3頁(yè)
大三上java17單元課件lesson_第4頁(yè)
大三上java17單元課件lesson_第5頁(yè)
已閱讀5頁(yè),還剩109頁(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)介

1、Java程序語(yǔ)言設(shè)計(jì)Lesson 6Contents4Java 中的包123Java中的注釋再次認(rèn)識(shí)數(shù)組和字符串作 業(yè)21. Java中的包通過前面的學(xué)習(xí)我們知道,Java類必須放置在*.java文件中。之前我們都是直接將所有的*.java源文件放在同一個(gè)目錄下。這樣難免顯得很亂。這里,我們將學(xué)習(xí)如何使用Java中的包和如何將類放置在不同的包中。31.1 包(Package)為了將源文件更好的組織起來(lái),Java中的類可以存放到不同的文件夾中。Java中用于存放源文件的文件夾叫做包(Package)。Java要求一個(gè)包的名字必須是符合Java標(biāo)識(shí)符規(guī)定的名字,否則一個(gè)文件夾是不能作為包的。在我們

2、的文件系統(tǒng)中(也就是磁盤上),包的存在形式就是一個(gè)普通的文件夾。Java中的包內(nèi)可以包含源文件,也可以包含其它的包。這點(diǎn)與文件夾也是類似的。我們可以認(rèn)為Java中的包就是有著符合標(biāo)識(shí)符規(guī)定的文件夾。41.1 包(Package)java中的類的組織是懸空的,這樣的話,它們可以隨意放在任意平臺(tái)下,但是要在該平臺(tái)下正確找到一個(gè)類,則必須使用classpath來(lái)設(shè)置類所在目錄的前面一部分(即區(qū)別于平臺(tái)的部分)。在java中常常把一棵類樹壓縮成一個(gè).jar文件.51.1 包(Package)Java中的包名必須是一個(gè)合法的標(biāo)識(shí)符。包的全限定名是從源代碼的根目錄開始,以點(diǎn)號(hào)“.”作為分隔符的。比如在源代

3、碼根目錄下有一個(gè)包叫做:container,其下又有一個(gè)包叫items,則items的全限定名為:container.items 61.2 在Eclipse中使用包首先需要?jiǎng)?chuàng)建一個(gè)新的項(xiàng)目(Project)。然后我們開始規(guī)劃類的目錄結(jié)構(gòu)。我們還是以汽車為例子。假設(shè)我們現(xiàn)在有三種汽車Car,Bus和RaceCar。我們想把Car和Bus放在一個(gè)名為“common”的包中,然后把RaceCar放在“common”包內(nèi)的另一個(gè)名為“special”包中。這樣,common包中就既有源文件又有其它包了。71.2 在Eclipse中使用包創(chuàng)建流程第一步我們新建一個(gè)項(xiàng)目(project),其中src目錄就

4、是我們所說(shuō)的“源代碼的根目錄”,在這個(gè)目錄下的各個(gè)類可以相互間調(diào)用。但問題是實(shí)際中的Java項(xiàng)目都很大,往往有幾十上百甚至上千個(gè)類,這樣都放在一個(gè)目錄下很不方便,也很亂。所以要分門別類。81.2 在Eclipse中使用包在根目錄下(src目錄)下創(chuàng)建一個(gè)包(common)。右鍵src目錄New/Package 填寫對(duì)話框;單擊Finish,包創(chuàng)建完成;91.2 在Eclipse中使用包在common包中創(chuàng)建Car類和Bus類。右鍵單擊common包New/Class填寫對(duì)話框;在對(duì)話框中是可以選擇包的,具體可以動(dòng)手去操作一下。101.2 在Eclipse中使用包在common包中創(chuàng)建speci

5、al包。右鍵單擊srcNew/Package在Name屬性欄中鍵入包的全限定名單擊Finish完成。具體到這個(gè)例子就“common.special”;最后在special類中添加RaceCar類。111.2 在Eclipse中使用包我們還可以調(diào)換包顯示的方式:Package Explore菜單Package PresentationFlat/Hierarchical;121.2 在Eclipse中使用包這時(shí),我們打開Car類,會(huì)發(fā)現(xiàn)如下代碼:package common;public class Car 注意開頭的“package common;”很重要。它表明了Car類所從屬的包。之前之所以

6、沒有是因?yàn)樗蓄惗急4嬖趕rc根目錄下,這個(gè)部分被默認(rèn)隱藏了。131.2 在Eclipse中使用包package語(yǔ)句的格式如下package+空格+類所在包的全限定名+;Eclipse軟件會(huì)自動(dòng)幫我們添加package語(yǔ)句。141.3 包的使用Java中引入包后,使結(jié)構(gòu)更清晰,可以根據(jù)類的不同用途,來(lái)把它們放入不同的包之中。Java運(yùn)行在不同包中命名相同名字的類。類的全限定名:類所在包的全限定名+ . +類名比如RaceCar類:common.special.RaceCar151.3 包的使用不同包中可以有同名的類注意類的全限定名使用包中的類時(shí) 必須使用類的全限定名對(duì)于同一個(gè)包中的類 可省略全

7、限定名中的包名編譯包中類時(shí) 需要進(jìn)入源代碼根目錄161.4 import語(yǔ)句通過上面的學(xué)習(xí),我們發(fā)現(xiàn)雖然通過包將類組織起來(lái)會(huì)讓源代碼的結(jié)構(gòu)更加清晰。但是在使用包中的類時(shí),卻要通過類的全限定名,這多少給程序帶來(lái)了些許不便。本節(jié)中我們將學(xué)習(xí)使用“import”語(yǔ)句將繁瑣降至最低點(diǎn)。171.4.1 import語(yǔ)句“import”是Java中的關(guān)鍵字,用于提供給Java編譯器“類中使用到的其它類的尋找位置”。單詞import的意思是“引入”。在Java中,它的意思就是“引入其它的類”。其語(yǔ)法格式為:import+空格+類的全限定名+;181.4.1 import語(yǔ)句我們現(xiàn)在根目錄下創(chuàng)建一個(gè)包usei

8、mport,然后在其中創(chuàng)建一個(gè)類UseImport,假設(shè)這個(gè)類需要使用common.Car類,則有:package useimport;import common.Car;public class UseImportCar abc= new Car();191.4.1 import語(yǔ)句注意import語(yǔ)句的格式123在代碼中使用import語(yǔ)句引入所需類 則使用這些類時(shí)無(wú)需使用其全限定名 直接使用類名即可源文件中的import語(yǔ)句可以有多個(gè)201.4.2 引入包內(nèi)所有類在一個(gè)類中,import語(yǔ)句可以有多個(gè)。問題是如果需要引入幾十個(gè)甚至百十個(gè)類,一個(gè)一個(gè)導(dǎo)入就會(huì)很繁瑣。Java中的packag

9、e語(yǔ)句還有另一種類似的語(yǔ)法,可以用來(lái)將一個(gè)包中所有的類一起引入進(jìn)來(lái)。這樣,當(dāng)我們使用到一個(gè)包中的多個(gè)類時(shí),就不比一個(gè)個(gè)的敲入import語(yǔ)句了。211.4.2 引入包內(nèi)所有類格式如下:import + 空格 + 包的全限定名 + . + * + ;import語(yǔ)句的這兩種格式可以同時(shí)使用(不同包)。此語(yǔ)法僅是用來(lái)引入包中所有的類,而對(duì)于此包中的子包中的類則沒有引用。221.4.3 import語(yǔ)句的一個(gè)問題Java編譯器不允許在同一個(gè)源文件中存在兩個(gè)或者多個(gè)使用第一種語(yǔ)法的import語(yǔ)句引入類名相同的類。如果第一種語(yǔ)法的import語(yǔ)句引入的類和第二種import語(yǔ)句引入的類有沖突,Java

10、編譯器會(huì)采用第一種import語(yǔ)法結(jié)構(gòu)引入的類。231.4.3 import語(yǔ)句的一個(gè)問題比如有一個(gè)包fruits,里面有3個(gè)類:apple, banana and orange. 包中還有一個(gè)子包myFavorite,包內(nèi)有一個(gè)類:apple. 那么當(dāng)我們使用import語(yǔ)句第一種格式時(shí),不能同時(shí)引用兩個(gè)包中的apple類。import fruits.apple;import fruits.myFavorite.apple;241.4.4 默認(rèn)引入包前面說(shuō)過,String類不是基本類型,但我們并沒有引入String類。Java編譯器會(huì)自動(dòng)為每一個(gè)類添加一個(gè)import語(yǔ)句:import ja

11、va.lang.*;String類就在Java.lang包中。25Contents4Java 中的包123Java中的注釋再次認(rèn)識(shí)數(shù)組和字符串作 業(yè)262 Java中的注釋編程語(yǔ)言是一種抽象和邏輯的語(yǔ)言。我們就需要在源代碼中使用自然語(yǔ)言來(lái)對(duì)代碼的作用進(jìn)行解釋。這種用于解釋源代碼作用的文字就叫做注釋。為了區(qū)分有效的源代碼和注釋,向源代碼中添加注釋需要使用注釋專用的語(yǔ)法。Java中有三種注釋語(yǔ)法。272.1 使用雙斜杠的單行注釋前面內(nèi)容中已經(jīng)使用過使用雙斜杠向源代碼中添加一行注釋。當(dāng)源代碼中出現(xiàn)了兩個(gè)連續(xù)的雙斜杠后(被雙引號(hào)括起來(lái)的不算),那么這兩個(gè)雙斜杠以及雙斜杠后面直到此行結(jié)束的所有內(nèi)容都是注

12、釋的內(nèi)容。282.2 多行注釋程序中有時(shí)候我們需要很多行注釋,這時(shí)候如果還使用雙斜杠就顯得太繁瑣了。我們可以使用下面的語(yǔ)法添加多行注釋:/* + 一行或多行注釋內(nèi)容 + */292.2 多行注釋如果Java源文件中出現(xiàn)了連續(xù)的“/*”,那么Java會(huì)認(rèn)為后面和下面的內(nèi)容全部都是注釋,空行也不會(huì)結(jié)束注釋,直到遇到一個(gè)連續(xù)的“*/”。302.2 多行注釋例程/*我們也可以使用這種語(yǔ)法寫單行注釋*/package comment;/*注釋從這里開始一直到這里結(jié)束*/public class ment /* 同樣的,這種注釋可以放在任何想要的地方 ,可以不比從一行的開頭*/312.2 多行注釋注意如果

13、(/*或*/)出現(xiàn)在雙引號(hào)中,那么同樣會(huì)被當(dāng)作是字符串的內(nèi)容而不會(huì)被當(dāng)作注釋。322.3 Javadoc注釋上述兩種注釋,目的在于在源代碼中添加說(shuō)明性文字。而對(duì)于Javadoc注釋,Java平臺(tái)提供專門工具來(lái)將注釋內(nèi)容從源代碼中抽取出來(lái),保存為專門文檔。332.3 Javadoc注釋格式/*+* 一行注釋內(nèi)容* +*/該注釋最大特點(diǎn)在于以/*開頭,并且之后每行注釋都以*開頭。342.3 Javadoc注釋Javadoc注釋本身格式?jīng)]有與眾不同,關(guān)鍵是Java平臺(tái)會(huì)為其自動(dòng)生成html格式的文本注釋。從而當(dāng)我們看這個(gè)程序時(shí),不需要看源程序就可以直接先看到注釋內(nèi)容,對(duì)該程序的組成和功能有一個(gè)大概的

14、了解。Javadoc注釋在商業(yè)上有很重要的應(yīng)用(類似于商品的說(shuō)明書);我們來(lái)看一個(gè)例程。352.3 Javadoc注釋為了演示這種注釋格式與普通多行注釋的不同,我們來(lái)使用Eclipse中的Javadoc視圖。(1)如果Javadoc視圖沒有出現(xiàn)在Eclipse的右下部分,我們可以單擊菜單中的【W(wǎng)indow】|【Show View】|【Javadoc】菜單項(xiàng)(或者在【other】菜單項(xiàng)中找到Javadoc),來(lái)讓Javadoc視圖出現(xiàn)。362.3 Javadoc注釋(2)然后,我們將光標(biāo)移動(dòng)到方法名“ ment”上,這時(shí)候我們會(huì)發(fā)現(xiàn)Javadoc視圖中出現(xiàn)了方法名字,然后還出現(xiàn)了我們添加的注釋的

15、內(nèi)容。37Contents4Java 中的包123Java中的注釋再次認(rèn)識(shí)數(shù)組和字符串作 業(yè)383 數(shù)組、字符串和main()方法前面我們學(xué)習(xí)的Java語(yǔ)法就是Java這個(gè)世界的規(guī)則。但是只有規(guī)則是沒用的,我們必須借助外部資源來(lái)構(gòu)建自己想要的東西。這里說(shuō)的資源就是Java類庫(kù)中的類。我們一直使用的向控制臺(tái)輸出內(nèi)容的“System.out.println”也是屬于Java類。這里我們將學(xué)習(xí)最基本的Java類,熟練使用這些類是構(gòu)建一個(gè)Java程序的基礎(chǔ)。首先,我們來(lái)看看之前接觸過的類有哪些誘人的方法。393.1 數(shù)組也是類在Java中數(shù)組也是類,只不過是一種特殊的類。它特殊并不是因?yàn)樗鼜?fù)雜,而是因

16、為它簡(jiǎn)單。簡(jiǎn)單到我們不用自己去定義數(shù)組類而是由Java自己提供數(shù)組類的定義。從學(xué)習(xí)使用一門編程語(yǔ)言的角度來(lái)看,我們無(wú)需去深究Java是如何定義數(shù)組類的。我們主要關(guān)注數(shù)組類中有什么需要關(guān)心的屬性和方法。403.1.1 數(shù)組的長(zhǎng)度 之前關(guān)于數(shù)組的例程中,我們總是在程序中用一個(gè)變量保存數(shù)組的長(zhǎng)度,如下:int len = 9;int arr = new int9;413.1.1 數(shù)組的長(zhǎng)度 當(dāng)需要遍歷數(shù)組arr時(shí),我們就使用變量len作為其長(zhǎng)度。其實(shí)這是完全不必要的。對(duì)象arr本身就有一個(gè)屬性length來(lái)保存數(shù)組的長(zhǎng)度。數(shù)組對(duì)象本身就有一個(gè)屬性length來(lái)代表了數(shù)組中元素的個(gè)數(shù)。423.1.1

17、數(shù)組的長(zhǎng)度 例程package com.javaeasy.learnarray;public class LengthOfArray public static void main(String args) int arr = new int9; / 創(chuàng)建一個(gè)長(zhǎng)度為9的數(shù)組int len = arr.length; / 使用數(shù)組對(duì)象的length屬性給變量len賦值System.out.println(數(shù)組的長(zhǎng)度為: + len);/ 將len的值輸出Results:數(shù)組的長(zhǎng)度為:9433.1.1 數(shù)組的長(zhǎng)度 數(shù)組對(duì)象的length屬性代表了數(shù)組中元素的個(gè)數(shù)443.1.2 final變量我們?cè)?/p>

18、前面學(xué)習(xí)過,數(shù)組對(duì)象一旦創(chuàng)建出來(lái)以后,其中包含的元素的個(gè)數(shù)是不能夠增減的。也就是說(shuō),如果我們想要數(shù)組對(duì)象的length變量的值可以代表數(shù)組中元素的個(gè)數(shù),那么這個(gè)變量的值是不可改變的。453.1.2 final變量如果我們希望一個(gè)變量也擁有這種性質(zhì),就需要使用java中的final關(guān)鍵字。例程package com.javaeasy.usefinal;public class UseFinalVariable public static void main(String args) final int unchangeable = 9; / final修飾的變量必須賦初始值 unchangeab

19、le = 8;/ 錯(cuò)誤,final修飾的變量不可再次賦值463.1.2 final變量123使用final關(guān)鍵字修飾的變量,必須在創(chuàng)建/聲明的時(shí)候賦初始值。且這個(gè)初始值必須是確定的值(等同case語(yǔ)句)使用final關(guān)鍵字修飾的變量,在賦初始值之后不能再次賦值。數(shù)組的length屬性也是用final修飾的,故無(wú)法改變其值473.1.3 多維數(shù)組的長(zhǎng)度對(duì)于多維數(shù)組,length屬性同樣代表數(shù)組對(duì)象的長(zhǎng)度。這個(gè)長(zhǎng)度是對(duì)應(yīng)維度的長(zhǎng)度,而不是所有元素的長(zhǎng)度。483.1.3 多維數(shù)組的長(zhǎng)度例程package com.javaeasy.learnarray;public class LenOfMutiDA

20、rray public static void main(String args) int multiDArr = new int919;System.out.println(第一維的長(zhǎng)度為: + multiDArr.length);System.out.println(第二維的長(zhǎng)度為: + multiDArr3.length);Results:第一維的長(zhǎng)度為:9第二維度長(zhǎng)度為:19493.1.3 多維數(shù)組的長(zhǎng)度multiDArr是一個(gè)二維數(shù)組的引用,其指向的是一個(gè)長(zhǎng)度為9的數(shù)組。此數(shù)組中的每一個(gè)元素均是一個(gè)指向一維數(shù)組的引用。類比:引用相當(dāng)于鑰匙;二維數(shù)組的引用相當(dāng)于鑰匙串。503.1.3

21、多維數(shù)組的長(zhǎng)度multiDArrn是一個(gè)指向一維數(shù)組的引用,其所指向的數(shù)組有19個(gè)元素。故multiDArrn.length的值是19.513.1.4 一維數(shù)組的clone()方法之前學(xué)習(xí)的是數(shù)組中的length屬性。這里學(xué)習(xí)數(shù)組類中的一個(gè)方法clone()方法。clone的意思就是“克隆”。方法的返回值 就是數(shù)組的中內(nèi)容的復(fù)制。523.1.4 一維數(shù)組的clone()方法我們還是通過例程來(lái)學(xué)習(xí)package com.javaeasy.learnarray.clone;public class PrimerArrClone public static void main(String args

22、) int arr = 7, 8, 9 ; / 1)創(chuàng)建一個(gè)int類型一維數(shù)組int clonedArr = arr.clone(); / 2)調(diào)用此數(shù)組的clone方法。arr2 = 777; / 3)給原數(shù)組第三個(gè)元素賦值clonedArr2 = 888; / 4)給clone出的數(shù)組第三個(gè)元素賦值System.out.println(arr的第三個(gè)元素的值是: + arr2); / 5)輸出兩個(gè)數(shù)組的第三個(gè)元素的值System.out.println(clonedArr的第三個(gè)元素的值是: + clonedArr2);533.1.4 一維數(shù)組的clone()方法分析例程創(chuàng)建一個(gè)一維int

23、數(shù)組,并為其賦初值。543.1.4 一維數(shù)組的clone()方法調(diào)用數(shù)組clone()方法,將數(shù)組復(fù)制一份,并讓cloneArr指向復(fù)制后的數(shù)組。復(fù)制的數(shù)組中元素和原數(shù)組相同。553.1.4 一維數(shù)組的clone()方法使用arr引用給原數(shù)組第三個(gè)元素賦值777.注意:原數(shù)組與clone()復(fù)制的數(shù)組是不同的數(shù)組對(duì)象,故改變的僅是原數(shù)組元素。563.1.4 一維數(shù)組的clone()方法使用cloneArr引用給復(fù)制出的數(shù)組中第三個(gè)元素賦值888,同樣,該操作不會(huì)影響原數(shù)組對(duì)象。573.1.4 一維數(shù)組的clone()方法最后將兩個(gè)數(shù)組的第三個(gè)元素值輸出。arr的第三個(gè)元素的值是:777clon

24、eArr的第三個(gè)元素的值是:888583.1.5 數(shù)組類型不是基本數(shù)據(jù)類型當(dāng)數(shù)組元素的類型不是基本數(shù)據(jù)類型時(shí),clone方法的行為有可能會(huì)讓我們吃驚。我們先創(chuàng)建一個(gè)類TestClonepackage com.javaeasy.learnarray.clone;public class TestClone int value=9;593.1.5 數(shù)組類型不是基本數(shù)據(jù)類型我們接著創(chuàng)建TestClone類型的數(shù)組,并調(diào)用clone()方法。注意:對(duì)于非基本類型的數(shù)組,clone()方法復(fù)制的數(shù)組的內(nèi)容是指向?qū)ο蟮囊枚菍?duì)象本身。故數(shù)組的clone并沒有產(chǎn)生新的元素對(duì)象。603.1.5 數(shù)組類型不是

25、基本數(shù)據(jù)類型例程非基本數(shù)據(jù)類型clone()方法613.1.5 數(shù)組類型不是基本數(shù)據(jù)類型解析例程此處比較簡(jiǎn)單,創(chuàng)建TestClone類型的一維數(shù)組,并給第二個(gè)元素賦值。注意:由于一維數(shù)組中是對(duì)象的引用,故賦值過程就是創(chuàng)建對(duì)象實(shí)例的過程!623.1.5 數(shù)組類型不是基本數(shù)據(jù)類型對(duì)數(shù)組Arr調(diào)用clone()方法。因?yàn)閿?shù)組中內(nèi)容是指向?qū)ο蟮囊?,故賦值過程并沒有產(chǎn)生新的TestClone類對(duì)象。633.1.5 數(shù)組類型不是基本數(shù)據(jù)類型給arr第二個(gè)元素賦值。643.1.5 數(shù)組類型不是基本數(shù)據(jù)類型給cloneArr的第二個(gè)元素賦值。注意:cloneArr和arr數(shù)組中的引用指向的是同一對(duì)象。故此處

26、賦值將會(huì)覆蓋之前的賦值。653.1.5 數(shù)組類型不是基本數(shù)據(jù)類型輸出arr1和cloneArr1的值。由于它們指向的是同一對(duì)象,故此處值均為999.663.1.5 數(shù)組類型不是基本數(shù)據(jù)類型創(chuàng)建一個(gè)新的TestClone對(duì)象,并讓cloneArr的第二個(gè)元素指向這個(gè)對(duì)象。注意:這時(shí)arr和cloneArr的第二個(gè)元素指向的對(duì)象不同了。673.1.5 數(shù)組類型不是基本數(shù)據(jù)類型再次向兩個(gè)數(shù)組的第二個(gè)元素賦值。683.1.5 數(shù)組類型不是基本數(shù)據(jù)類型程序結(jié)果arr的第二個(gè)元素的value屬性的值是:999cloneArr的第二個(gè)元素的value屬性的值是:999arr的第二個(gè)元素的value屬性的值是

27、:777cloneArr的第二個(gè)元素的value屬性的值是:999693.1.6 多維數(shù)組的clone()方法其實(shí)明白了一維數(shù)組的clone()方法,再去理解多維數(shù)組的clone()方法就不是問題了。clone()方法的實(shí)質(zhì)就是賦值了數(shù)組的內(nèi)容。703.1.6 多維數(shù)組的clone()方法我們還是通過例程來(lái)學(xué)習(xí)多維數(shù)組的clone()方法713.1.6 多維數(shù)組的clone()方法解析例程1. 此處創(chuàng)建一個(gè)int型的二維數(shù)組,如下圖。723.1.6 多維數(shù)組的clone()方法2. 此處調(diào)用數(shù)組的clone()方法。使用cloneMultiArr指向復(fù)制出來(lái)的數(shù)組。733.1.6 多維數(shù)組的c

28、lone()方法3. 此處,給數(shù)組cloneMultiArr12賦值999.743.1.6 多維數(shù)組的clone()方法4. 通過控制臺(tái)輸出MultiArr12和cloneMultiArr12的值。由于二者指向同一實(shí)體,故其值均為999.753.1.6 多維數(shù)組的clone()方法5. 使用multiArr1來(lái)調(diào)用clone()方法,并賦值給cloneMultiArr1 。注意:此時(shí)multiArr1指向的是一個(gè)int類實(shí)體。763.1.6 多維數(shù)組的clone()方法6. 此處,再次給multiArr12和cloneMultiArr12賦值。注意:此時(shí)multiArr1和cloneMulti

29、Arr1指向不同的實(shí)體。773.1.6 多維數(shù)組的clone()方法7. 輸出結(jié)果multiArr12的值為:999cloneMultiArr12的值為:999multiArr12的值為:999cloneMultiArr12的值為:777783.2 String類我們一直在使用String類,但對(duì)其認(rèn)識(shí)遠(yuǎn)遠(yuǎn)不夠。一直以來(lái)String類都被當(dāng)作是一個(gè)字符串來(lái)使用,其實(shí)String類有很多方法供我們使用。學(xué)習(xí)使用這些方法可以讓我們靈活的操作字符串和其中的字符。793.2 String類我們先來(lái)糾正一個(gè)可能的錯(cuò)誤觀點(diǎn)。方法屬性類803.2 String類在前面介紹類時(shí),我們對(duì)類的屬性有很大的依賴,仿

30、佛一個(gè)類就是讓我們使用它的屬性的。這是一種錯(cuò)誤的觀點(diǎn)!當(dāng)我們說(shuō)到一個(gè)類的時(shí)候,最應(yīng)該關(guān)心的是它有哪些方法,而不是它有那些屬性。其實(shí)一個(gè)類的屬性在大多數(shù)情況下是不應(yīng)該(不應(yīng)該不是不能夠)被使用的,應(yīng)該被使用的是類中的方法。這是“面向?qū)ο缶幊趟枷搿钡囊环N體現(xiàn)。813.2.1 遍歷String中字符String類實(shí)際上是用來(lái)表示0個(gè)或多個(gè)字符的類。為了遍歷整個(gè)字符串,我們需要用到String類提供的兩個(gè)常用方法。823.2.1 遍歷String中字符1. int length()方法此方法的返回值是字符串的長(zhǎng)度,即字符串包含字符的個(gè)數(shù)。例程:String str=“abc”;int len=str.

31、length();result:len=3833.2.1 遍歷String中字符2. char charAt(int index)此方法返回指定位置的字符。其參數(shù)是想要得到的字符的所在位置。注意:首字符位置為0!例程:String str=“abc”;char ch=str.charAt(2);result:c843.2.1 遍歷String中字符例程:遍歷一個(gè)字符串,找出里面含有幾個(gè)字符spackage com.javaeasy.learnstring;public class IterateChars public static void main(String args) String

32、str = This is a simple string. We will check how many s chars in this.;char target = s;int len = str.length();int count = 0;for (int i = 0; i len; i+) char ch = str.charAt(i);if (ch = target) count+;System.out.println(字符串: + str + 中包含 + count + 個(gè) + target+ 個(gè)字符); results:字符串:“This is a simple string.

33、 We will check how many s chars in this.”中包含7個(gè)s字符853.2.1 遍歷String中字符123String類中l(wèi)ength()方法的返回值是String對(duì)象中字符數(shù)。不要與數(shù)值中的length屬性混淆對(duì)于String對(duì)象charAt()方法能接受的參數(shù)最小值為0,最大值為length()方法返回值減1使用“=”來(lái)判斷兩個(gè)char變量是否相等863.2.2 獲取字符串中一部分有時(shí)候我們需要截取一個(gè)String對(duì)象的一部分。String類提供了現(xiàn)成的方法來(lái)完成這個(gè)功能。這個(gè)方法叫做substring,它有兩個(gè)重載。873.2.2 獲取字符串中一部分S

34、tring substring(int beginIndex, int endIndex)substringStringsubstring(int beginIndex)883.2.2 獲取字符串中一部分例程我們有一個(gè)字符串和一個(gè)字符,設(shè)計(jì)一個(gè)程序讓其輸出此字符串第一次出現(xiàn)該字符后的內(nèi)容。注意:不包括該字符。893.2.2 獲取字符串中一部分package com.javaeasy.learnstring;public class SubString public static void main(String args) String str = ABCDEFGH;char target =

35、 C;int len = str.length();String result = null;for (int i = 0; i len; i+) if (target = str.charAt(i) result = str.substring(i + 1);break;if (result != null) System.out.println(結(jié)果為: + result); else System.out.println(沒有在字符串中找到目標(biāo)字符);Result:DEFGH903.2.3 比較兩個(gè)字符串是否相等對(duì)于類型相同的基本類型變量,可以使用“=”來(lái)比較。那么對(duì)于String類型,

36、乃至延伸到對(duì)于“兩個(gè)對(duì)象”,如何判斷其是否相等呢??jī)蓚€(gè)對(duì)象是否相等本質(zhì)上是一個(gè)邏輯判斷過程!913.2.3 比較兩個(gè)字符串是否相等equals()方法String類中提供一個(gè)equals()方法,其返回值是一個(gè)boolean變量。 equals()方法會(huì)比較兩個(gè)String類型字符串的每一個(gè)字符(區(qū)分大小寫),若完全相同,則返回true,否則false。923.2.3 比較兩個(gè)字符串是否相等例程package com.javaeasy.learnstring;public class StringEquals public static void main(String args) int v

37、alue = 1;String str1 = ABC + value;String str2 = abc + value;String str3 = ABC + value;boolean equals12 = str1.equals(str2);boolean equals13 = str1.equals(str3);System.out.println(字符串str1和字符串str2相等: + equals12);System.out.println(字符串str1和字符串str3相等: + equals13);Results:字符串str1和字符串str2相等: false字符串str1

38、和字符串str3相等: true933.2.3 比較兩個(gè)字符串是否相等注意兩個(gè)引用之間也可以使用“=”來(lái)進(jìn)行判斷。若它們指向的是同一對(duì)象或都是null,則返回true;否則返回false。943.2.3 比較兩個(gè)字符串是否相等例程package com.javaeasy.learnstring;public class StringRefEquals public static void main(String args) int value = 1;String str1 = ABC + value;String str2 = ABC + value;String str3 = str1;/

39、 (1) 字符串的復(fù)制boolean equals12 = (str1 = str2);boolean equals13 = (str1 = str3);System.out.println(引用str1和引用str2相等: + equals12);System.out.println(引用str1和引用str3相等: + equals13);Results:引用str1和引用str2相等:false引用str1和引用str3相等:true953.2.3 比較兩個(gè)字符串是否相等在例程(1)處,str1和str2指向不同的對(duì)象,雖然對(duì)象內(nèi)容相同;而str1和str3指向同一對(duì)象。963.2.3

40、比較兩個(gè)字符串是否相等123String類中equals()方法可以判斷兩個(gè)String對(duì)象是否相等對(duì)象只存在邏輯上的相等,這中判斷需要借助方法來(lái)實(shí)現(xiàn)使用“=”可以用來(lái)判斷兩個(gè)引用是否指向同一個(gè)對(duì)象973.2.4 判斷字符串開頭和結(jié)尾有時(shí)我們需要判斷一個(gè)字符串是不是以另一個(gè)字符串開頭或者結(jié)束,這時(shí)候我們就要用到String類的如下兩個(gè)方法了。String startsWith(String prefix)String endsWith(String suffix)983.2.5 分割字符串String類提供一個(gè)split()方法,它可以將一個(gè)字符串以另一個(gè)字符串為分隔符將字符串分割為1到多個(gè)字

41、符串對(duì)象,它的返回值就是這些字符串對(duì)象的數(shù)組。993.2.5 分割字符串例程package com.javaeasy.learnstring;public class SplitString public static void main(String args) String str = AAA#BBB#CCC;String pieces = str.split(#);int len = pieces.length;System.out.println(將str按照#分割后得到的結(jié)果:);for (int i = 0; i len; i+) System.out.println(pieces

42、i);Results:將str按照“#”分割后得到的結(jié)果:AAABBBCCC1003.2.6 其它有用方法1. int indexOf()當(dāng)我們希望在字符串對(duì)象中查找特定字符代碼時(shí),String類提供了現(xiàn)成的indexOf()方法來(lái)完成這個(gè)功能。例程:String str=“ABCDE”;int index1=str.indexOf(C);int index2=str.indexOf(F);rusult:index1的值為 2,index2的值為-11013.2.6 其它有用方法2. String replace(char oldChar, char newChar)String類提供一個(gè)叫做

43、replace的方法用來(lái)將字符串中的字符/字符串替換成另一個(gè)字符串。使用這個(gè)方法我們可以方便的實(shí)現(xiàn)替換功能。例程:String str=“ABCDE”;String str1=str.replace(“CD”, “cd”);result:str1的內(nèi)容是:ABcdE1023.2.7 String對(duì)象String類常用的方法已經(jīng)介紹的不少了。現(xiàn)在我們學(xué)習(xí)一個(gè)String對(duì)象的特性:String對(duì)象的內(nèi)容是不可改變的。也就是說(shuō),String對(duì)象在創(chuàng)建出來(lái)以后,其中的內(nèi)容就不可改變了。1033.2.7 String對(duì)象對(duì)于replace方法,很容易讓人誤以為它修改了原始String對(duì)象的內(nèi)容,其實(shí)不是這樣的。它是創(chuàng)建了一個(gè)新的String對(duì)象保存替換后的結(jié)果。對(duì)于字符串的拼接,其實(shí)也是創(chuàng)建了新的字符串對(duì)象。1043.2.7 Str

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論