java的基本介紹_第1頁
java的基本介紹_第2頁
java的基本介紹_第3頁
java的基本介紹_第4頁
java的基本介紹_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Java語言主要由以下五種元素組成:標(biāo)識(shí)符、關(guān)鍵字、文字、運(yùn)算符和分隔符。這五種元素有著不同的語法含義和組成規(guī)則,它們互相配合,共同完成Java語言的語意表達(dá)。 1標(biāo)識(shí)符 變量,以及我們后面將要講到的類和方法都需要一定的名稱,我們將這種名稱叫做標(biāo)識(shí)符。佬是一個(gè)有效的標(biāo)識(shí)符呢?在Java中,所有的標(biāo)識(shí)符都必須以一個(gè)字母、下劃線或美元符¥作開頭。后面的字符包括數(shù)字(0-9),所有從A-Z的大寫字母和a-z的小寫字母,以及所有在十六進(jìn)制0xc0前的ASCII碼。以上只是標(biāo)識(shí)符命名的基本規(guī)則,以下是一個(gè)正誤對(duì)照表,通過它會(huì)對(duì)標(biāo)識(shí)符的命名規(guī)則有一個(gè)具體的了解: 合法標(biāo)識(shí)符非法標(biāo)識(shí)符try try#gro

2、up_7 7groupopendooropen-doorboolean_1 boolean 表4-11注:boolean 為關(guān)鍵字 2關(guān)鍵字 關(guān)鍵字是Java語言本身使用的標(biāo)識(shí)符,它有其特定的語法含義。所有的Java關(guān)鍵字將不能被用作標(biāo)識(shí)符,如:for、while、boolean等都是Java語言的關(guān)鍵字。本書后附有Java語言關(guān)鍵字列表。 3文字 文字,其實(shí)就是我們通常所說的數(shù)據(jù)。文字的不同表現(xiàn)形式,也就是不同的數(shù)據(jù)類型,Java的數(shù)據(jù)類型有:整型、浮點(diǎn)型、布爾型、字符型、字符串型。整型數(shù)據(jù)是最普通的數(shù)據(jù)類型,它的表現(xiàn)方式有:十進(jìn)制、十六進(jìn)制和八進(jìn)制?;鶖?shù)為10的十進(jìn)制是我們最熟悉的?;鶌錇?/p>

3、16的十六進(jìn)制表示法,也是程序設(shè)計(jì)中常常用到的,在十六進(jìn)制中,每一位數(shù)字相當(dāng)于4個(gè)二進(jìn)制0和1的組合。十六進(jìn)制整數(shù)用0-9的10個(gè)數(shù)字和字母A-F代表10-15這些整數(shù),十六進(jìn)制整數(shù)必須以0X作為開頭。每一個(gè)整型數(shù)據(jù)占有32位的存儲(chǔ)空間,即四個(gè)字節(jié)。這意味著整型數(shù)據(jù)所表示,的范圍在-2,147,483,648和2,147,483,648之間,假如由于某些原因,你必須表示一個(gè)更大的數(shù),64位的長(zhǎng)整型應(yīng)該是足夠的。如果你想把一個(gè)整數(shù)強(qiáng)制存為一個(gè)長(zhǎng)型(long),你可以在數(shù)字后面加字母l。浮點(diǎn)數(shù)據(jù)用來代表一個(gè)帶小數(shù)的十進(jìn)制數(shù)。例如1.5或43.7。它父或者是標(biāo)準(zhǔn)形式,或者是用科學(xué)計(jì)數(shù)法的形式,下面是

4、一些例子:3.1415 0.1 .6 .02243 2.997E8標(biāo)準(zhǔn)的浮點(diǎn)數(shù)叫做單精度浮點(diǎn)數(shù),它的存儲(chǔ)空間為32位,也就是四個(gè)字節(jié)。也有64位的雙精度浮點(diǎn)數(shù)。你可以用D后綴確定你想使用這種雙精度浮點(diǎn)數(shù)。布爾類型是最簡(jiǎn)單的一種數(shù)據(jù)類型,布爾數(shù)據(jù)只有兩種狀態(tài):真和假,通常用關(guān)鍵字true和false來表示這兩種狀態(tài)。字符型數(shù)據(jù)是由一對(duì)單引號(hào)括起來的單個(gè)字符。它可以是字符集中的任意一個(gè)字符,如:a,b。字符串?dāng)?shù)據(jù)類型是用一對(duì)雙引號(hào)括起來的字符序列,字符串?dāng)?shù)據(jù)實(shí)際上是由String類所實(shí)現(xiàn)(類這個(gè)概念我們將在后續(xù)章節(jié)中詳細(xì)講解),而不是語言中所用的字符數(shù)組。每一個(gè)字符串?dāng)?shù)據(jù)將產(chǎn)生一個(gè)String類的

5、新的實(shí)例,讀者不必對(duì)字符串與類這個(gè)概念發(fā)生關(guān)系而感到擔(dān)心,由于類的特性,你不必?fù)?dān)心如何去實(shí)現(xiàn)它們,它們會(huì)自己照顧好自己,需要說明的是字符串在Java里作為類只是出于安全的考慮。表4-2給出了幾個(gè)字符串的例子。字符串描述對(duì)應(yīng)值 Lets goLets goTwoTwoLines表 4-2 幾個(gè)例子注:在這里表示回車換行。 4運(yùn)算符 任何語言都有自己的運(yùn)算符,Java語言也不例外,如、等都是運(yùn)算符,運(yùn)算符的作用是與一定的運(yùn)算數(shù)據(jù)組成表達(dá)式來完成相應(yīng)的運(yùn)算。對(duì)不同的數(shù)據(jù)類型,有著不同的運(yùn)算符,我們將在下一節(jié)中對(duì)不同類型的運(yùn)算符分別討論。 5分隔符 分隔符用來使編譯器確認(rèn)代碼在何處分隔。;:都是Jav

6、a語言的分隔符。 為了在Java中存儲(chǔ)一個(gè)數(shù)據(jù),必須將它容納在一個(gè)變量之中。定義一個(gè)變量的兩個(gè)基本要素是:類型和標(biāo)識(shí)符,通常你可以用如下語法去說明變量:type identifer,identifer; 該語句告訴編譯器用“type”的類型和以“identifer”為名字建立一個(gè)變量,這里的分號(hào)將告訴編譯器這是一個(gè)說明語句的結(jié)束;方格中的逗號(hào)和標(biāo)識(shí)符表示你可以把幾個(gè)類型相同的變量放在同一語句進(jìn)行說明,變量名中間用逗號(hào)分隔。在你創(chuàng)建了一個(gè)變量以后,你可以給它賦值,或者用運(yùn)算符對(duì)它進(jìn)行一些運(yùn)算。如同上一節(jié)內(nèi)容中所提到的一樣,類型將決定變量所代表的不同種類的數(shù)據(jù),在Java語言中有兩種變量。最基本的

7、是簡(jiǎn)單類型變量,他們不建立在任何其他類型上,整數(shù)、浮點(diǎn)、布爾和字符類型都是這類型;另外Java可以定義構(gòu)造另一種變量類型:類,這些類型建立在簡(jiǎn)單類型之上,它包括數(shù)值、變量和方法,是一種數(shù)據(jù)與代碼相結(jié)合的復(fù)合結(jié)構(gòu)。 1 整型變量的說明 整型變量按所占內(nèi)存大小的不同可分為四種不同的類型,最短的整型是byte,它只有八位長(zhǎng),然后是短整型short,它有16位,int類型有32位,長(zhǎng)整型long是64位,下面是這些整型變量的說明示例。byte a;short row;int numberOfSportor;long treeCount;int x,y,z; 2浮點(diǎn)變量的說明 浮點(diǎn)類型可用關(guān)鍵字floa

8、t或double來說明,float型的浮點(diǎn)變量用來表示一個(gè)32位的單精度浮點(diǎn)數(shù),而double型的浮點(diǎn)變量用來表示一個(gè)64位的雙精度浮點(diǎn)數(shù)。double型所表示的浮點(diǎn)數(shù)比float型更精確。float alpha;double speed; 3字符變量說明 Java使用16位的Unicode字符集。因此Java字符是一個(gè)16位的無符號(hào)整數(shù),字符變量用來存放單個(gè)字符,它不是完整的字符串。示例如下:char a;a=c; 4 布爾變量說明 布爾型有真和假兩個(gè)邏輯值,另外,邏輯運(yùn)算符也將返回布爾類型的值,示例如下:boolean mouseOn;mouseOn=true;布爾型是一個(gè)獨(dú)立的類型,它不

9、像C語言中的布爾型代表0和1兩個(gè)整數(shù),由于這個(gè)原因,Java中的布爾類型不能轉(zhuǎn)換成數(shù)字。 5 變量的使用范圍 當(dāng)你說明了一個(gè)變量后,它將被引入到一個(gè)范圍當(dāng)中,也就是說,該名字只能在程序的特定范圍內(nèi)使用。變量的使用范圍是從它被說明的地方到它所在那個(gè)塊的結(jié)束處,塊是由兩個(gè)大括號(hào)所定義的,例如:class Example public static void main(String args) int i;. public void function() char c;.整型變量i在方法main中說明,因?yàn)閙ain的塊不包括function塊,所以任何在function塊中對(duì)i的引用都是錯(cuò)誤的。對(duì)字

10、符型變量c也同樣如此。在某一個(gè)特定情形中,變量能被別的變量所隱藏,如:在一個(gè)塊中說明一個(gè)變量,而在這個(gè)塊中建立一個(gè)新塊并且在其中定義相同名字的變量,這樣在第二個(gè)塊中,程序?qū)υ撟兞康氖褂镁侵傅诙味x的那個(gè)變量。這樣我們說,第一個(gè)變量被隱藏了。變量隱藏的示例如下:class Example public static void main(String args) int i; /* * * boolean try=true; while(try) int i;/以下對(duì)變量i的引用均指這里定義的i. /以下對(duì)變量i的引用均指* * *處定義的i. 當(dāng)你定義一個(gè)變量時(shí),首先必須明確它的活動(dòng)范圍,并

11、根據(jù)它的實(shí)際功能來命名,此外還應(yīng)盡量使用詳細(xì)的注釋,這些辦法可以使你能夠清晰地區(qū)分變量,變量被隱藏的問題也會(huì)大大減少。 6 類型轉(zhuǎn)換 系統(tǒng)方法System.in.read返回一個(gè)整型數(shù)值,但你卻常常想要把它當(dāng)作一個(gè)字符來使用?,F(xiàn)在的問題是,當(dāng)有一個(gè)整數(shù)而你需要把變成一個(gè)字符時(shí)應(yīng)當(dāng)去做些什么呢?你需要去做一個(gè)類型轉(zhuǎn)換為一個(gè)字符。從一種類型轉(zhuǎn)換到另一種類型可以使用下面的語句:int a;char b;a=(int)b;加括號(hào)的int告訴編譯器你想把字符變成整型并把它放在a里,另一方面,如果你想做相反的轉(zhuǎn)換,你可以使用:b=(char)a;記住整型和字符型變量位長(zhǎng)不同是非常重要的,整型是32位長(zhǎng),字

12、符型是16長(zhǎng),所以當(dāng)你從整型轉(zhuǎn)換到字符型可能會(huì)丟失信息。同樣,當(dāng)你把64位的長(zhǎng)整型數(shù)轉(zhuǎn)換為整型時(shí),由于長(zhǎng)整型可能有比32位更多的信息,你也很可能會(huì)丟失信息。即使兩個(gè)量具有相同的位數(shù),比如整和浮點(diǎn)型(都是32位),你在轉(zhuǎn)換小數(shù)時(shí)也會(huì)丟失信息,Java不象c/c+那樣允許自動(dòng)類型轉(zhuǎn)換,當(dāng)你進(jìn)行類型轉(zhuǎn)換要注意使目標(biāo)類型能夠容納原類型的所有信息,不會(huì)丟失信息的類型轉(zhuǎn)換有:原始類型目標(biāo)類型byteshort,char,int,long,float,doubleshort int,long,float,doublecharint,long,float,doubleint long,float,double

13、longfloat,doublefloat double 表3-3不會(huì)丟失信息的類型轉(zhuǎn)換列表需要說明的是,當(dāng)你執(zhí)行一個(gè)這里并未列出的類型轉(zhuǎn)換時(shí)可能并不總會(huì)丟失信息,不過進(jìn)行這樣一個(gè)理論上并不安全的轉(zhuǎn)換總是很危險(xiǎn)的。 1 類的基本概念 Java程序的基本單位是類。類的定義可以看作是建立對(duì)象的原形。你建立類之后,就可用它來建立許多你需要的對(duì)象。Java把每一個(gè)可執(zhí)行的成分都變成類,使面向?qū)ο蟀l(fā)展到極點(diǎn)。類的基本定義成員函數(shù)如下:class name /Class information在類定義的開始與結(jié)束處必須使用花括號(hào)。你也許想建立一個(gè)矩形類,那么可以用如下代碼:public class Rec

14、tangle . 2 類的基本組成一個(gè)類中通常都包含數(shù)據(jù)與函數(shù)兩種類型的元素,我們一般把它叫作屬性和成員函數(shù),在很多時(shí)候我們也把成員函數(shù)稱為方法(method)。將數(shù)據(jù)與代碼通過類緊密結(jié)合在一起,就形成了現(xiàn)在非常流行的封裝的概念。自然,類的定義也要包括以上兩個(gè)部分。class 3 類的實(shí)例創(chuàng)建 矩形類Rectangle中,也許你想把矩形的相關(guān)信息寫入類,如:int width,height;當(dāng)然你還可以寫入其它信息,但或許長(zhǎng)和寬對(duì)簡(jiǎn)單的矩形來說已足夠了。現(xiàn)在,類的定義如下所示:public class Retangleint width,height;當(dāng)你創(chuàng)建了自己的類之后,通常需要使用它來完

15、成某種工作。你可以通過定義類的實(shí)例對(duì)象來實(shí)現(xiàn)這種需求。new運(yùn)算符可以用來創(chuàng)建對(duì)象,實(shí)現(xiàn)成員函數(shù)如下:Rectangle myrect=new Rectangle;當(dāng)然,此時(shí)對(duì)象myrect并沒有做任何什么事;它只保存了矩形的長(zhǎng)和寬的信息。有了對(duì)象以后,我們?cè)鯓邮褂脤?duì)象內(nèi)部的數(shù)據(jù)呢?下面是幾個(gè)例子:myrect.width=10;myrect.height=20;同樣,類的成員函數(shù)也是用“.”運(yùn)算符來被引用的。 在你定義了的變量之后,通常都要對(duì)變量賦值、改變變量的值和使用變量進(jìn)行計(jì)算,這都是運(yùn)算符的作用。 1優(yōu)先級(jí) 表3-4按從高到低的優(yōu)先級(jí)列出了運(yùn)算符。同一行中的運(yùn)算符優(yōu)先級(jí)相同。.() +

16、- ! * / %+ - = =!= & & | ?: =表3-4 運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)是指同一式子中多個(gè)運(yùn)算符被執(zhí)行和次序,同一級(jí)里的操作符具有相同的優(yōu)先級(jí),例如對(duì)于表達(dá)式:a=b+c*d/(cd)Java處理時(shí)將會(huì)按照表3-4從最高優(yōu)先級(jí)到最低的次序進(jìn)行,在本例中,因?yàn)槔ㄌ?hào)優(yōu)先級(jí)最高,所以先計(jì)算cd,接著是c*d,然后除以cd,最后,把上述結(jié)果與b的和存儲(chǔ)到變量a中,不論任何時(shí)候,當(dāng)你一時(shí)無法確定某種計(jì)算的執(zhí)行次序時(shí),可以使用加括號(hào)的方法明確為編譯器指定運(yùn)算順序,這也是提高程序可讀性的一個(gè)重要方法。 2 整型運(yùn)算符 整型運(yùn)算符按操作數(shù)的多少可分為一元和二元兩類,一元運(yùn)算符一次對(duì)一個(gè)變量進(jìn)行

17、操作,二元運(yùn)算符一次對(duì)兩個(gè)變量進(jìn)行操作。對(duì)于運(yùn)算來說,如果有一個(gè)變量或操作數(shù)是長(zhǎng)整型的,那么結(jié)果就肯定是長(zhǎng)整型的,否則即使操作數(shù)還沒有確定是字節(jié)型、短整型或字符型,運(yùn)算結(jié)果都是整型,表3-5是一元運(yùn)算符的列表。運(yùn)算符實(shí)際操作例子 - 改變整型數(shù)符號(hào) -i 位運(yùn)算:非i + 加1 i+ - 減1 i-表3-5一元運(yùn)算符列表注:一元取反運(yùn)算符()用來改變整數(shù)的正負(fù)號(hào),逐位求反把所變量所有是1的位變成0,是0的位變成1,加加和減減(,)把變量的值加1或減1。以下是一個(gè)具體例子:int i=0;int j=1=;for (i=1;i10;i+) j-; System.out.println(i+j+)

18、;這個(gè)程序的一行執(zhí)行加運(yùn)算,另一行執(zhí)行減運(yùn)算,注意“”和“”的使用,每次遇到“”或“”的時(shí)候,系統(tǒng)就把操作數(shù)的值相應(yīng)地加1或減1,一元運(yùn)算符執(zhí)行的方式是改變它們所作用的變量的值,對(duì)一元取反和逐位求反來說,變量的值并不改變,而對(duì)加和減運(yùn)算(,)來說,就量的值被改變了,下面的代碼給出了這種工作方式的一個(gè)例子:int i=10,j=10,k=10,l=10;System.out.println(i+j+k+l+);j+;i-;k;-l;System.out.println(i+j+k+l+);注意j和i被改變并打印出它們的新值,可是k和l仍然為原來的數(shù)值,當(dāng)在復(fù)合表達(dá)式中使用一元取反和逐位求余運(yùn)算時(shí)

19、,你實(shí)際上是在用一個(gè)臨時(shí)存貯操作數(shù)的新值。和既是前置運(yùn)算符也是后置運(yùn)算符,這就是說,它們既可以放在操作數(shù)前面(x),也可以放在后面(x),如果它們被用在復(fù)合語句中如:i=x+; 或 i=+x;那么第一個(gè)語句中x把值賦給i以后再加1,而第二個(gè)語句先把x加1,再把新的x值賦給i。整型運(yùn)算符的第二種類型是二元運(yùn)算符,這種運(yùn)算并不改變操作數(shù)的值,而是返回一個(gè)必須賦給變量的值,表3-6列出了二元運(yùn)算符。運(yùn)算符實(shí)際操作例子+ 加運(yùn)算a+b- 減運(yùn)算a-b* 乘運(yùn)算a*b/ 除運(yùn)算a/b% 取模運(yùn)算a%b& 與運(yùn)算a&b| 或運(yùn)算a|b 異或運(yùn)算ab左移a右移ab 右移ab 表3-6 二元運(yùn)算符列表注意:與

20、的基本功能都是右移,但是用符號(hào)位來填充右移后所留下的空位,而則是用零來填充右移后所留下的空位。還有一類運(yùn)算,它們形如:j-=i,這里-=是二元運(yùn)算-和賦值運(yùn)算=的復(fù)合運(yùn)算,它等價(jià)于j=j-i,這種復(fù)合方式適用于所有的二元運(yùn)算符。這里有幾點(diǎn)關(guān)于整型運(yùn)算進(jìn)一步說明,首先,整數(shù)除法向靠近0的方向取整;其次,如果你除以0或者對(duì)0取模,程序就會(huì)在運(yùn)行時(shí)被強(qiáng)行中止,如果你的運(yùn)算結(jié)果超出最小極限,或者說是下溢,結(jié)果將為0,如果超出了最大極限,就將會(huì)導(dǎo)致結(jié)果的回繞。 3 布爾運(yùn)算符 另外還有一些運(yùn)算符能產(chǎn)生布爾類型的結(jié)果,我們把它們稱為布爾運(yùn)算符,表4-7列出了這些運(yùn)算符。運(yùn)算符實(shí)際操作例子 小于a 大于ab

21、=小于等于a 大于等于a=b=等于a=b!=不等于a!=b 表3-7產(chǎn)生布爾類型結(jié)果的運(yùn)算符在這里要指出的是相等運(yùn)算符=可能會(huì)給你帶來許多麻煩,很多人在比較兩個(gè)值時(shí)往往錯(cuò)用了等號(hào)=,以致于變成了賦值操作,所以在編程中一定要注意你在比較數(shù)值時(shí)用的是=。布爾類型本身還有幾個(gè)邏輯運(yùn)算符,它們可以對(duì)布爾類型的數(shù)據(jù)進(jìn)行運(yùn)算:!,&,/其實(shí)如果你把布爾類型的值true等效地看成1,false看成0,那么對(duì)于相同的運(yùn)算符,整型運(yùn)算的法則對(duì)布爾類型也是適用的。布爾運(yùn)算符中還有一種三元運(yùn)算符,它的格式如下:Operand ? Statement1:Statement2在這個(gè)式子中,先計(jì)算Operand的真假,若

22、為真,則執(zhí)行Statement1,若為假,則執(zhí)行Statement2。下面的代碼給出了這種運(yùn)算的一個(gè)例子:(ab)?a:b;這個(gè)表達(dá)式將返回a和b中較大的那個(gè)數(shù)值。 4 浮點(diǎn)型運(yùn)算符 傳統(tǒng)的浮點(diǎn)型二元運(yùn)算除了賦值運(yùn)算符(+=,-=.*=./)取模(%)和取模賦值(%=0)使浮點(diǎn)數(shù)值等價(jià)于整數(shù)除法,同樣,+和-使變量的值增加或減小1。同整型變量相似,結(jié)果被放在最大長(zhǎng)度的類型里,如果運(yùn)算包括兩個(gè)浮點(diǎn)類型,結(jié)果也是個(gè)浮點(diǎn)類型,如果有一個(gè)或幾個(gè)是雙精度浮點(diǎn)型,結(jié)果就是雙精度浮點(diǎn)型,當(dāng)你使用關(guān)系運(yùn)算符:、=、=、=和!=時(shí),注意浮點(diǎn)變量與整型的不同,只有a=b成立并不能說明ab不成立,這是因?yàn)楦↑c(diǎn)類型數(shù)

23、值次序同整型不同,當(dāng)你寫程序,對(duì)浮點(diǎn)型數(shù)值進(jìn)行假設(shè)時(shí)要小心,浮點(diǎn)型數(shù)值也包括inf,代表無窮大,溢出產(chǎn)生無窮大inf,下溢產(chǎn)生0。 5 字符串運(yùn)算符 +運(yùn)算符可以把字符串并置起來,如果哪一個(gè)操作數(shù)不是字符串,在并置之前它會(huì)被轉(zhuǎn)換成字符串,另外,+=運(yùn)算符把兩個(gè)字符串并置的結(jié)果放進(jìn)第一個(gè)字符串里,在前面的例子里,當(dāng)你想把幾項(xiàng)打印在同一行里時(shí)使用的是+運(yùn)算符,試著在解釋器里用System.out.println和+運(yùn)算符來造成不同的組合輸出。1 成員函數(shù)相當(dāng)于C或C+中的函數(shù)。你應(yīng)該用如下的方式說明一個(gè)成員函數(shù):Type name (Parameter)/function body注意:每一個(gè)成員

24、函數(shù)必須返回一個(gè)值或聲明返回為空(void)。它返回類型的說明告訴編譯器它將返回什么類型的值。在某些情況下,成員函數(shù)需要表示它是否成功的完成了它的工作,此時(shí)返回類型通常為布爾型的。參數(shù)表是用逗號(hào)分開的一組變量,它將為成員函數(shù)提供所需信息。下面例子中定義了一個(gè)成員函數(shù)。通過它,你的矩形類可以計(jì)算自己的面積了:int getArea(int w,int h) int a; a=w*h; return a;當(dāng)成員函數(shù)被調(diào)用時(shí),它將返回矩形的面積值。另外,矩形還需要對(duì)自己進(jìn)行描繪,因此它需要成員函數(shù)drawRect(),此時(shí),你的矩形類的定義將如下所示:public class Rectangle i

25、nt width,height; private int getArea(int w,int h) int a;a=w*h;return a; public void drawRect() for(int i=width;i0;i-) System.out.print(#);System.out.print();for (i=height-2;i0;i=) System.out.print(#); for(int j=width-2;i0;i-) System.out.print(); System.out.print(#);for(int i=width;i0;i-) System.out.

26、print(#);System.out.print();上例中最后一個(gè)“#”號(hào)后面還有一個(gè)System.out.print()這是由于這個(gè)成員函數(shù)在上一行沒有結(jié)束而且緩沖區(qū)沒有溢出時(shí)將不把輸出結(jié)果寫屏。若你使用print成員函數(shù),卻沒有得到輸出,這時(shí)仔細(xì)確認(rèn)一下你是否以來結(jié)束你的輸出流。2不同類型的成員函數(shù)在上例的成員函數(shù)聲明中你需要注意兩點(diǎn):getArea()定義為private型,drawRect()定義為public型。public型意味著任何類都可以調(diào)用它。private型,它只能被所聲明的類內(nèi)部調(diào)用。這些說明類型同樣適用于數(shù)據(jù)變量。若有人想改變一個(gè)私有變量,通常要引用下面的成員函數(shù):

27、public void setWidth(int w)width=w;在C+中,還有一種類型被黍?yàn)閜rotected,它意味著成員函數(shù)或數(shù)據(jù)只能被所在類和子類引用。在一些Java資料中,也對(duì)此作了說明,但實(shí)際上,在Java的1.0,1.01和1.02版本中均沒有protected的相應(yīng)功能,而只是保留了該關(guān)鍵字,希望讀者注意。 3 成員函數(shù)的重載假如你必須在不同情況下發(fā)送不同的信息給同一個(gè)成員函數(shù)的話,該怎么辦呢?你可以通過對(duì)此成員函數(shù)說明多個(gè)版本(version)的方法來實(shí)現(xiàn)重載。重載的本質(zhì)是創(chuàng)建了一個(gè)新的成員函數(shù):你只需給它一個(gè)不同的參數(shù)列表(parameterlist),如下例所示:vo

28、id get Area(int w,int h);void get Area(float w,float h);在第二種情況下,成員函數(shù)get Area()接受兩個(gè)浮點(diǎn)變量作為它的參數(shù),編譯器根據(jù)調(diào)用時(shí)的不同參數(shù)來決定該調(diào)用哪一種成員函數(shù),假如你把兩個(gè)整數(shù)提供給成員函數(shù),你就調(diào)用第一個(gè)成員函數(shù);假如你把兩個(gè)浮點(diǎn)數(shù)提供給成員函數(shù),第二個(gè)成員函數(shù)就被調(diào)用。 4靜態(tài)成員除了public、private和protected以外,你還可以把成員說明為static(靜態(tài))。static修飾符表明一個(gè)變量或成員函數(shù)對(duì)所有類的實(shí)例都是相同的,你也許想使用一個(gè)所有Rectangle類都可以使用的變量,來說明該類

29、的版本(version),假如你把它說明成一個(gè)static,那么該變量將對(duì)該類的所有實(shí)例都是一樣的,如: static int version=1;靜態(tài)成員函數(shù)和靜態(tài)變量的優(yōu)點(diǎn)就在于他們能在沒有創(chuàng)建類的任何一個(gè)實(shí)例的情況下被引用,引用時(shí)在“.”域前,可直接使用類名而無須使用對(duì)象名。例如,drawRect成員函數(shù)使用了System.out.println成員函數(shù),但實(shí)際上你卻未曾創(chuàng)建一個(gè)某個(gè)System類的對(duì)象,這正是因?yàn)閛ut是System類的一個(gè)靜態(tài)變量,所以你可以直接使用這個(gè)成員函數(shù)而無須定義一個(gè)System對(duì)象。 5構(gòu)造和析構(gòu)成員函數(shù)類有一個(gè)特殊的成員函數(shù)叫做構(gòu)造成員函數(shù),它通常用于初始

30、化類的數(shù)據(jù)成員。在創(chuàng)建對(duì)象時(shí),會(huì)自動(dòng)調(diào)用類的構(gòu)造成員函數(shù)。Java中的構(gòu)造成員函數(shù)必須與該類具有相同的名字,另外,構(gòu)造成員函數(shù)一般都應(yīng)用public類型來說明,這樣才能在程序任意的位置創(chuàng)建類的實(shí)例對(duì)象。下面是一個(gè)Rectangle類的構(gòu)造成員函數(shù),它帶有兩個(gè)參數(shù),分別表示矩形的長(zhǎng)和寬:public Rectangle(int w,int h) width=w; height=h; area=getArea(w,h);除了構(gòu)造成員函數(shù)以外,類還提供了析構(gòu)成員函數(shù),當(dāng)對(duì)象被從內(nèi)存中刪除時(shí),該成員函數(shù)將會(huì)被自動(dòng)調(diào)用。通常,在析構(gòu)成員函數(shù)內(nèi),你可以填寫用來回收對(duì)象內(nèi)部的動(dòng)態(tài)空間的代碼。 1, Java

31、的普通應(yīng)用程序中,必須含有一個(gè)可被外界(通常是java解釋器)所直接調(diào)用的類,我們可以把這個(gè)類稱為該應(yīng)用程序的主類,而這個(gè)主類必須含有main成員函數(shù),整個(gè)應(yīng)用程序就是從這個(gè)成員函數(shù)開始執(zhí)行的,這與C程序有一定的類似之處。 main成員函數(shù)的說明如下: public static void main(String args); 2 命令行參數(shù) 我們把main成員函數(shù)的參數(shù)args稱為命令行參數(shù),args可以用來接收外界傳給Java應(yīng)用程序的參數(shù),下面我們舉一個(gè)例子來看看參數(shù)傳遞的具體過程:class doRect public static void main(String args) int

32、 w=Integer.valueOf(args0).intValue();int h=Integer.valueOf(args1).intValue();Rectangle myrect=new Rectangle(w,h);myrect.drawRect(); class Rectangle int width,height,area; public Rectangle(int w,int h) width=w;height=h;area=getArea(w,h); protected int getArea(int w,int h) int a;a=w*h;return a; public

33、 void drawRect() int i,j;for(i=width;i0;i-) System.out.print(#);System.out.print()for(i=height-2;i0;i-)System.out.print(#);for(j=width-2;i0;j-) System.out.print();System.out.print(#);for(i=width;i0;i-) System.out.print(#);System.out.print(); 用Javac編譯該程序后,可以用java解釋器來執(zhí)行它,具體過程如下: javac doRect.java java

34、 doRect 10 15注意這里的“10 15”就是命令行參數(shù),它將被賦給doRect的main成員函數(shù)的args變量。其中args0的值為“10”,args1的值為“15”,Integer.valueOf(Stringstring).intValue的功能是把string中的數(shù)字轉(zhuǎn)化為一個(gè)整型值。 1 理解包(package)的基本概念 一旦你創(chuàng)建了一個(gè)類,并想重復(fù)地使用它,那么把它放在一個(gè)包中將是非常有效的,包(package)是一組類的集合,例如,Java本身提供了許多包,如java.jo和java.lang,它們存放了一些基本類,如System和String。你可以為自己的幾個(gè)相關(guān)的

35、類創(chuàng)建一個(gè)包。 把類放入一個(gè)包內(nèi)后,對(duì)包的引用可以替代對(duì)類的引用。此外,包這個(gè)概念也為使用類的數(shù)據(jù)與成員函數(shù)提供了許多方便。沒有被public、private修飾的類成員也可以被同一個(gè)包中的其它類所使用。這就使得相似的類能夠訪問彼此的數(shù)據(jù)和成員函數(shù),而不用專門去做一些說明。下表列出了Java自帶的一些常用包:包名稱 包的內(nèi)容描述基本語言類為Java語言的基本結(jié)構(gòu)(如字符串類、數(shù)組類)提供了基本的類描述實(shí)用類提供了一些諸如編碼、解碼、哈西表、向量、堆棧之類的實(shí)用例程I/O類 提供了標(biāo)準(zhǔn)的輸入/輸出及文件例程applet類提供了與支持Java的瀏覽器進(jìn)行交互的例程另一個(gè)窗口AWT提供了一些諸如字體

36、、控制、按鈕、滾動(dòng)條工具集類(AWT類) 之類的圖形接口網(wǎng)絡(luò)類為通過諸如telnet、ftp、www之類的協(xié)議訪問網(wǎng)絡(luò)提供了例程表Java基本包一覽 2 定義一個(gè)包 你可以用下機(jī)的成員函數(shù)去說明一個(gè)包: package PackageName;比如,你可以把Rectangle類放入一個(gè)名為shapes的包中: package shapes 此后,當(dāng)你用javac來編譯這個(gè)文件時(shí),將會(huì)在當(dāng)前路徑下得到一個(gè)字節(jié)代碼文件Rectangle.class。但你還需要將它移至java類庫(kù)所在路徑的shapes子目錄下(在此之前,你必須建立一個(gè)名為shapes的子目錄),這樣以后才能應(yīng)用shapes包中的R

37、ectangle類。當(dāng)然你可以用-d選項(xiàng)來直接指定文件的目的路徑,這樣就無需編譯后再移動(dòng)。包的名稱將決定它應(yīng)放的不同路徑。例如用下面的方式來構(gòu)造一個(gè)包。 package myclass.Shapes; 歸入該包的類的字節(jié)代碼文件應(yīng)放在java的類庫(kù)所在路徑的myclass子目錄下?,F(xiàn)在包的相對(duì)位置已經(jīng)決定了,但java類庫(kù)的路徑還是不定的。事實(shí)上,java可以有多個(gè)存放類庫(kù)的目錄,其中的缺省路徑為java目錄下的lib子目錄,你可以通過使用classpath選項(xiàng)來確定你當(dāng)前想選擇的類庫(kù)路徑,具體成員函數(shù)可參考第三章的內(nèi)容。除此之外,你還可以在CLASSPATH環(huán)境變量中設(shè)置類庫(kù)路徑。 3 引用

38、已定義過的包 為了使用已定義過的包,你必須使用引用命令import,你可以用以下三種方式引用包中的一個(gè)類: 1.在每一個(gè)類名前給出個(gè)包名: Shapes.Rectangle REET=new Shapes.Rectangle(10,20) 2.引用類本身: import Shapes.Reckargle; 3.引用整外包: import Shapes; 1 在Java中使用繼承 也許在面向?qū)ο蟮某绦蛟O(shè)計(jì)中最為強(qiáng)大的工具是類的繼承,類的繼承允許你在一個(gè)已經(jīng)存在的類之上編寫新的程序,例如,你想建立一個(gè)可在屏幕上顯示并能填充它的矩形類,你可以從頭開始或者利用舊的矩形類,下面的部分將向你介紹如何繼承已

39、存在的Rectangle類,而不需重寫其中的代碼。 使用extands關(guān)鍵字讓Java程序員能夠繼承已有類的成員函數(shù),為了告訴編譯器和解釋器你正在繼承Rectangle類,你必須引用舊的Rectangle類,并且在新類的說明中引用它: import Shapes.Rectangle; class fillRect extands Rectangle /new code here 這樣,fillRect類將可以使用Rectangle類中所有已定義的數(shù)據(jù)和成員函數(shù),如:width、height等數(shù)據(jù)和getArea等成員函數(shù)。 2 成員函數(shù)的重載 在繼承之后有所提高,這是人類進(jìn)步的一個(gè)重要方式。

40、那么,如何使fillRect類比Rectangle類有所提高呢?我們可以用如下代碼來實(shí)現(xiàn)一個(gè)新的drawRect成員函數(shù),它將大大縮短代碼,并能填充矩形,而不是僅僅畫出矩形的輪廓:private String makeString(chr ch,int num) StringBuffer str=new StringBuffer(); for(int i=num;i0;i-) str.append(ch); return str.toString(); public void drawRect() for(int i=height;i0;i-) System.out.println(makeS

41、tring(#,width); 注意這里我們使用了StringBuffer類。之所以使用StringBuffer是因?yàn)镾tring只能產(chǎn)生一個(gè)靜態(tài)類型它的大小是不能改變的,而StringBuffer能夠產(chǎn)生一個(gè)可變長(zhǎng)度的字符串類型。 在這里,drawRect成員函數(shù)被重載了,通過使用相同的成員函數(shù)名字,你可以用新的成員函數(shù)來代替舊的成員函數(shù)。不過,那些被說明為final的成員函數(shù)是不能被重載的。 注意,你不必在新的類中包含那些與被繼承類相同的代碼,而只需要加入你想要的東西,但你必須建立一個(gè)新的構(gòu)造成員函數(shù),以區(qū)分這兩個(gè)不同的類。新類的全貌如下所示,你可以發(fā)現(xiàn)通過繼承Rectangle類,代碼變

42、得非常簡(jiǎn)單明了。class fillRect extands Rectangle public fillRect(int w,int h) supper(w,h); private String makeString(char ch,int num) StringBuffer str=new StringBuffer();for(int i=num;i0;i-) str.append(ch);return str.toString();public void drawRect()for(int i=height;i0;i-) System.out.printlm(makeString(#,width); 3 使用接口 Java可以創(chuàng)建一種稱作接口(interface)的類,在這個(gè)類中,所有的成員函數(shù)都是抽象的,也就是說它們都只有說明沒有定義,你可以如下所示來說明一個(gè)接口。 public interface interfaceName /成員函數(shù)說明 接口中成員函數(shù)的缺省引用類型是private,接口(interface)的內(nèi)部變量是不可更改的,并且總是static和final。 通過使用關(guān)鍵字implement,你可以在定義

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論