第二章開(kāi)始學(xué)Java語(yǔ)法_第1頁(yè)
第二章開(kāi)始學(xué)Java語(yǔ)法_第2頁(yè)
第二章開(kāi)始學(xué)Java語(yǔ)法_第3頁(yè)
已閱讀5頁(yè),還剩39頁(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、第二章 開(kāi)始學(xué) Java 語(yǔ)法任何一種程序語(yǔ)言,都有一些最基礎(chǔ)的東西,這就是這門(mén)語(yǔ)言要處理什么樣的數(shù)據(jù),以及如何按著 相應(yīng)的規(guī)則組織和處理這些數(shù)據(jù)。千里之行,始于足下,本章將通過(guò)實(shí)例,用通俗的語(yǔ)言來(lái)講述蘊(yùn)涵在 Java 里的面向?qū)ο笏枷耄ㄟ^(guò) 學(xué)習(xí)我們可以發(fā)現(xiàn): 面向?qū)ο笏枷氩皇强菰锘逎慕虠l, 而是可以幫助我們更有效開(kāi)發(fā)代碼的指導(dǎo)工具。音樂(lè)家可以通過(guò)駕馭復(fù)雜的和聲等技巧來(lái)創(chuàng)作優(yōu)美動(dòng)聽(tīng)的旋律,作家也從沒(méi)有把把復(fù)雜浩瀚的語(yǔ)法 條目當(dāng)成他們創(chuàng)作的障礙,同樣地, Java 的語(yǔ)法細(xì)節(jié)也僅僅是開(kāi)發(fā)項(xiàng)目的工具,希望大家在掌握初步的 語(yǔ)法后,立即從面向?qū)ο笏枷牒晚?xiàng)目開(kāi)發(fā)的需求的角度來(lái)觀察語(yǔ)法定義的動(dòng)機(jī),學(xué)

2、以致用,而不應(yīng)該過(guò) 多地“從故紙堆中找學(xué)問(wèn)”,刨根問(wèn)底地研究“這個(gè)類(lèi)有多少方法”等類(lèi)的細(xì)節(jié)性的問(wèn)題。2.1 基本數(shù)據(jù)類(lèi)型與操作符基本數(shù)據(jù)類(lèi)型的數(shù)據(jù)是構(gòu)建 Java 程序大廈的磚瓦,我們?cè)谛蕾p蘊(yùn)涵 Java 大型項(xiàng)目里優(yōu)秀架構(gòu)和精 密的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)時(shí),不應(yīng)該忽略 Java 語(yǔ)言里的基本類(lèi)型數(shù)據(jù)。2.1.1 基本數(shù)據(jù)類(lèi)型Java的基本數(shù)據(jù)類(lèi)型分為 4 大類(lèi):整數(shù)、浮點(diǎn)數(shù)、字符型、布爾型。其中,整數(shù)包括 byte、int、short、long,浮點(diǎn)數(shù)包括 float 、 double 。由于用不同位數(shù)( bit )來(lái)存放, 它們所表示的精度和范圍也有所不同,同時(shí)也有各自相應(yīng)的默認(rèn)值。如表 2-1 所

3、示。表 2-1 Java 的基本數(shù)據(jù)類(lèi)型關(guān)鍵字位數(shù)范圍默認(rèn)值byte8-2727-10short16-215215-10int32-231231-10long64-263263-10float323.4e-0383.4e+0380.0fdouble641.7e-3081.7e+3080.0dchar8u0000uffffu0000boolean8true 或 falsefalse整數(shù)型: byte、int 、 short 、 long 。通常情況下整數(shù)型數(shù)據(jù)都是用十進(jìn)制來(lái)表示,同樣他們也可以表 示成十六進(jìn)制或八進(jìn)制。十六進(jìn)制以 0x 開(kāi)頭,如 0x1F 的十進(jìn)制數(shù)值為 31。八進(jìn)制以 0 開(kāi)頭

4、,如 017 的 十進(jìn)制數(shù)值為 15。請(qǐng)大家注意, 整數(shù)型變量在進(jìn)行賦值時(shí), 要注意有可能會(huì)發(fā)生因?yàn)榫炔粔蚨斐蓴?shù)據(jù)溢出的錯(cuò)誤, 例如:byte b;/ byte 類(lèi)型的數(shù)據(jù)最大為 127, 10000 由于數(shù)據(jù)溢出而不通過(guò)編譯b = 10000;在 Java 語(yǔ)言里, 浮點(diǎn)數(shù)型有 float 、double 。浮點(diǎn)型數(shù)據(jù)用于表示小數(shù)。 浮點(diǎn)型常量有兩種表示方式: 一般表示法和科學(xué)計(jì)數(shù)法。 如一般表示法 345.64 的科學(xué)計(jì)數(shù)法為 3.4564E2 。默認(rèn)情況下, 浮點(diǎn)數(shù)常量為 double ,我們也可以在相應(yīng)的數(shù)字后面添加相應(yīng)的字母,f 或 F 表示 float 類(lèi)型浮點(diǎn)數(shù), d 或 D

5、 表示 double類(lèi)型浮點(diǎn)數(shù),如 123.4f 和 123.4d 前者用 32 位空間存儲(chǔ)后者用 64 位存儲(chǔ)。這里需要強(qiáng)調(diào)的一點(diǎn)是,在我們使用整數(shù)型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)的過(guò)程中并不是用越大的數(shù)據(jù)類(lèi)型存 放數(shù)據(jù)就越好,因?yàn)檫@樣不僅有可能會(huì)造成一定的空間浪費(fèi)而且還會(huì)提高相應(yīng)得計(jì)算時(shí)間,因此我們應(yīng) 在確保不發(fā)生數(shù)據(jù)溢出的前提下選擇合適類(lèi)型來(lái)存放相應(yīng)的數(shù)據(jù)。在 Java 語(yǔ)言里,字符型用 char 表示。它用來(lái)表示單個(gè)字符,它有兩種賦值方式:?jiǎn)我?hào)(而不是 雙引號(hào))括起來(lái)的單個(gè)字符,用整數(shù)表示的 unicode 編碼值。例如:char c1 = ' a'/ 表示 97 所對(duì)應(yīng)的 uni

6、code 編碼 achar c2 = 97;Java 語(yǔ)言里,布爾型是 boolean 。用來(lái)表示真和假,它只有兩個(gè)值 true 和 false。2.1.2 基本操作符操作符就是用來(lái)計(jì)算數(shù)據(jù)的符號(hào),我們可以把數(shù)據(jù)通過(guò)操作符組合起來(lái)得到相應(yīng)的結(jié)果。按著操作 符所操作數(shù)據(jù)的個(gè)數(shù)可以分為:一元、二元、三元,這一點(diǎn)比較好理解。按著操作符的功能可以分為: 算術(shù)、賦值、關(guān)系、邏輯、位運(yùn)算等操作符。接下來(lái)我們?cè)敿?xì)為大家介紹各種操作符的功能:算術(shù)操作符是用來(lái)描述整數(shù)和浮點(diǎn)數(shù)類(lèi)型數(shù)據(jù)的運(yùn)算規(guī)則的一組操作符。單目運(yùn)算操作符包括“ -”,“+ ”,“-”,它們都只能對(duì)一個(gè)操作數(shù)進(jìn)行計(jì)算。“-”為求反符號(hào),它表示計(jì)算

7、操作數(shù)的相反數(shù)。“ + ”,“ -”分別是自增和自減符號(hào),它們會(huì)計(jì)算操作數(shù)的加一或減一 的值,在使用這兩個(gè)符號(hào)的時(shí)候需要大家注意操作符和操作數(shù)的位置對(duì)表達(dá)式結(jié)果的影響,例如:int i = 5;int j = 5;int k;/ i 的值為 6,表達(dá)式 i+ 的值為 6, k 的值為 18k=i+*3;/ i 的值為 6,但表達(dá)式 +i 的值為 5, k 的值為 15k=+j*3;注意: i+指表達(dá)式運(yùn)算完后再給 i加一,而 +j 指先給 j加一然后再運(yùn)算表達(dá)式的值。 雙目運(yùn)算操作符包括“ +”,“ -”,“ * ”,“ /”,“ %”,它們可以對(duì)兩個(gè)操作符進(jìn)行計(jì)算,分 別對(duì)應(yīng)于加,減,乘,除

8、,求余運(yùn)算。需要注意的是前四種符號(hào)可以在整數(shù)和浮點(diǎn)數(shù)之間進(jìn)行計(jì)算,而 求余運(yùn)算只能在整數(shù)之間運(yùn)算。賦值操作符包括“ =”和一些擴(kuò)展的賦值操作符,如:“+=”,“ -=”,“ *= ”,“ /=”,“ %=”。其中, ”=”表示把等號(hào)右邊表達(dá)式的值賦給等號(hào)的左邊,而一些擴(kuò)展的賦值操作符是一種簡(jiǎn)寫(xiě)形式, 它們 表示把左操作數(shù)按著相應(yīng)的運(yùn)算符號(hào)的規(guī)則與右操作計(jì)算所得到的結(jié)果又符給了左操作數(shù)的那個(gè)變量, 例如:int i = 5;/ 等同于 a=a+6,故最終 a 的值為 11a += 6;關(guān)系操作符用于比較兩個(gè)表達(dá)式的大小關(guān)系,計(jì)算的結(jié)果為布爾類(lèi)型數(shù)據(jù)的true 和 false 。如果表達(dá)式關(guān)系成立

9、則結(jié)果為 true,否則為 false。關(guān)系操作符包括“ = =”,“ != ”,“ >”,“ <”,“ >=”, “ <=”,分別表示等于,不等于,大于,小于,大于等于,小于等于。需要注意的是:關(guān)系操作符中的 “= =”表示的比較操作符兩邊的操作數(shù)是否相等,而賦值操作符“=”表示把左操作數(shù)的值賦到右操作數(shù)中去。這里, 值得注意的是用來(lái)判斷兩個(gè)操作對(duì)象是否相等的”= ”操作符, 它主要用在 if,while 和 for 循環(huán)里的條件判斷里。比如,有如下語(yǔ)句:int i = 10; int j = 10;if(i = j)/do action1 由于 i 和 j 相等,所

10、以在 if 語(yǔ)句里,會(huì)執(zhí)行 do action1 部分的代碼。邏輯操作符用于對(duì)布爾類(lèi)型數(shù)據(jù)的計(jì)算,得到的結(jié)果也是布爾類(lèi)型的數(shù)據(jù),包括“&”,“ && ”,“|”,“ |”,“ ”,“ ! ”,分別表示邏輯與,邏輯與,邏輯或,邏輯或,邏輯異或,邏輯非。除了“!”是一元操作符以外其余的都為二元操作符。邏輯與表示只有當(dāng)左右操作數(shù)都為 true 時(shí)表達(dá)式結(jié)果才為 true ,否則為 false;邏輯或表示左右操作數(shù)中只要有一個(gè)為true 時(shí)表達(dá)式結(jié)果就為 true,否則只有兩個(gè)操作數(shù)都為為 false 時(shí)表達(dá)式結(jié)果才為 false;邏輯異或表示當(dāng)左右操作數(shù)不同即相異時(shí)表達(dá)式結(jié)果

11、為 true , 否則如果左右操作數(shù)相同時(shí)表達(dá)式結(jié)果為false;邏輯非表示求操作數(shù)相反的值,即true 為 false, false為 true 。“&”與 “&& ”和 “|”和 “|”雖然名稱(chēng)相同,但是使用時(shí)卻有差別,例如:int i = 1;int j = 2;boolean b1;boolean b2;/ i>5 為 false, j>5 為 false ,表達(dá)式的值為 falseb1 = ( i > 5 ) & ( j > 5);/ 只要知道 i>5 為 false 就可以確定表達(dá)式的值為 falseb2 = ( i &

12、gt; 5 ) && ( j > 5);“&”與“ |”要根據(jù)左右操作數(shù)的最終結(jié)果計(jì)算表達(dá)式的值,而“&& ”與“ |”如果可以根據(jù)左操作數(shù)的值能確定表達(dá)式結(jié)果就不會(huì)繼續(xù)計(jì)算右操作數(shù)的值。位運(yùn)算操作符是以二進(jìn)制的方式操作數(shù)據(jù),并且操作數(shù)和結(jié)果都是整數(shù)類(lèi)型的數(shù)據(jù),包括“”,“ & ”,“ |”,“ ”,“ >>”,“ <<”,“ >>>”,分別表示位反,位與,位或,位異或,帶符號(hào)位右 移,左移,無(wú)符號(hào)位右移。位反,位與,位或,位異或表示把左右操作數(shù)按著其二進(jìn)制的表達(dá)形式對(duì)每 個(gè)位的 1或 0進(jìn)行相應(yīng)的

13、邏輯操作, 再把新得到二進(jìn)制數(shù)據(jù)轉(zhuǎn)化成十進(jìn)制數(shù)從而得到表達(dá)式的最終結(jié)果。 后三種操作符表示把左操作數(shù)轉(zhuǎn)化成二進(jìn)制數(shù)據(jù),然后按著右操作數(shù)的大小進(jìn)行相應(yīng)方向的移動(dòng),再把 新得到二進(jìn)制數(shù)據(jù)轉(zhuǎn)化成十進(jìn)制數(shù)從而得到表達(dá)式的最終結(jié)果,但需要注意的是同樣是向右移動(dòng)“ >> ” 表示帶著符號(hào)位即最高位的 1或 0 向右移動(dòng),而“ >>>”表示無(wú)論符號(hào)位是 1 還是 0,都用 0對(duì)最高位補(bǔ) 位,如表 2-2 所示。表 2-2 位移運(yùn)算i二進(jìn)制補(bǔ)碼i<<2i>>2i>>>27001000110000110000001000100010001-

14、1711101111101111001111101100111011其它的重要操作符有:1. 條件操作符“ (?:)”,它是唯一的一個(gè)三元操作符。使用方式如:i ? j : k ,其中 i 表達(dá)式的結(jié)果為布爾類(lèi)型,如果 i 為 true 表達(dá)式結(jié)果為 j ,否則為 k。2. 括號(hào)操作符“ ( )”,用于優(yōu)先表達(dá)式的計(jì)算順序。2.1.3 操作符優(yōu)先級(jí)操作符的優(yōu)先級(jí)決定了處理表達(dá)式計(jì)算的先后順序,還有一個(gè)重要的特性就是結(jié)合性,它們共同決定了表達(dá)式按著何種方式來(lái)進(jìn)行各種計(jì)算最終得到相應(yīng)的結(jié)果,對(duì)于初學(xué)者來(lái)說(shuō)建議使用括號(hào)來(lái)明確指 定運(yùn)算順序。各種操作符的優(yōu)先級(jí)和結(jié)合性如表2-3 所示。表 2-3 操作

15、符的優(yōu)先級(jí)和結(jié)合性操作符優(yōu)先級(jí)結(jié)合性 ,()12右,!,+ ,-3右*,/,%4左+,-5左>>,<< ,>>>6左,=,=7左= = , !=8左&9左10左|11左&&12左|13左?:14右=15右大家不必硬記這些優(yōu)先級(jí),可以通過(guò)針對(duì)容易混淆的地方加括號(hào)就可以了,比如有如下的表達(dá)式: !i=j ,首先是判斷兩個(gè)值是否一樣,然后是個(gè)取非的操作,我們可以改寫(xiě)成: !(i=j) ,雖然 !的優(yōu)先 級(jí)比 = 要低,加不加括號(hào)的效果是一樣的,但是如果我們加了括號(hào),看起來(lái)就更清除了。2.1.4 對(duì)象型的數(shù)據(jù)類(lèi)型在 Java 語(yǔ)言里,以

16、類(lèi)的形式,定義了一些對(duì)象類(lèi)型的數(shù)據(jù)類(lèi)型,并且在其中封裝了針對(duì)這種類(lèi)型數(shù) 據(jù)的一些操作方法,其中,我們經(jīng)常會(huì)用到的有:基本數(shù)據(jù)類(lèi)型的封裝類(lèi)和描述字符串的 String 類(lèi)。下 表 2-4 描述了基本數(shù)據(jù)類(lèi)型對(duì)應(yīng)的封裝類(lèi)。表 2-4 基本數(shù)據(jù)類(lèi)型對(duì)應(yīng)的封裝類(lèi)基本數(shù)據(jù)類(lèi)型對(duì)應(yīng)的封裝類(lèi)booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongdoubleDoublefloatFloat各數(shù)據(jù)類(lèi)型對(duì)應(yīng)的封裝類(lèi)里,不僅包括了基本數(shù)據(jù)類(lèi)型的數(shù)據(jù),由于它們更是類(lèi),所以會(huì)封裝了一 些實(shí)用的方法,比如我們?cè)谌缦碌拇a里,通過(guò) Integer 類(lèi)封

17、裝的 doubleValue 方法,把 Integer 類(lèi)型的數(shù) 據(jù)轉(zhuǎn)換成 double 。Integer k = new Integer(10);k.doubleValue(); 封裝類(lèi)等于基本數(shù)據(jù)類(lèi)型加針對(duì)基本數(shù)據(jù)類(lèi)型的操作,它們是對(duì)象,這點(diǎn)對(duì)我們來(lái)說(shuō)至關(guān)重要。 在 Java 語(yǔ)言里,描述字符串的 String 類(lèi)有著很重要的用途,在這個(gè)類(lèi)里,同樣是定義了針對(duì)字符串 的一些操作,通過(guò)下面的 StringTest.java 代碼,我們可以看到 String 類(lèi)的一些常用方法。public class StringTestpublic static void main(String args)

18、String s1 = "Hello World"String s2 = new String("Hello World"); /輸出字符串的長(zhǎng)度 System.out.println("the length of s1 is " + s1.length(); /得到第三個(gè)字符,索引位置從 0 開(kāi)始char index2 = s1.charAt(2);System.out.println(index2); /比較兩個(gè)字符串 錯(cuò)誤的做法 if(s1 = s2) System.out.println("The two Strin

19、g are equal!"); else System.out.println("The two String are not equal!"); /比較兩個(gè)字符串 正確的的做法 if(s1.equals(s2) System.out.println("The two String are equal!"); else System.out.println("The two String are not equal!"); /連接字符串 s1 = s1.concat("!"); System.out.pr

20、intln("After concat the s1 is " + s1); /查找字符串的位置System.out.println(s1.indexOf("!"); System.out.println(s1.indexOf("#"); 在上述的方法里,我們針對(duì)字符串做了如下的操作:1. 首先定義了兩個(gè)字符串,我們可以通過(guò)直接賦值,也可以通過(guò)以 new 的方式調(diào)用 String 的構(gòu)造 函數(shù)來(lái)創(chuàng)建 String 類(lèi)型的對(duì)象。2. 通過(guò) length 方法可得到字符串的長(zhǎng)度,執(zhí)行到這里,會(huì)輸出如下結(jié)果。the length of s1

21、 is 113. 通過(guò) charAt 方法可得到字符串里指定索引位置的 char 類(lèi)型變量,因?yàn)樗饕恢脧?0 開(kāi)始計(jì)算, 所以執(zhí)行到這里,會(huì)輸出 s1 對(duì)象的第三個(gè)索引位置的“ l”。4. 下面,我們將要比較 s1和 s2兩個(gè)字符竄是否相等,首先用的是 =的方式,這里我們可以發(fā)現(xiàn), 雖然兩個(gè)字符串的內(nèi)容完全相等,但是,從隨后輸出的內(nèi)容上來(lái)看, s1=s2 的結(jié)果是 false 。這是個(gè)初學(xué)者經(jīng)常會(huì)犯的錯(cuò)誤!因?yàn)閟1和 s2 都是對(duì)象,所以 =操作符是用來(lái)判斷這兩個(gè)對(duì)象的引用地址(即這兩個(gè)對(duì)象在內(nèi)存里的存儲(chǔ)首地址)是否相等,而不是判斷它們的內(nèi)容是否相等。所以,我 們要用 equals 方法來(lái)判

22、斷兩個(gè) String 類(lèi)型的對(duì)象里的值之否相等。5. 可以通過(guò) concat 方法,連接兩個(gè)字符串,代碼里我們是把! 加到了 Hello World 的后面,我們可以通過(guò)輸出看到 ”Hello World! ”的效果。6. 可以通過(guò) indexOf 方法,來(lái)查找指定字符的位置,如果找到,這個(gè)方法將返回這個(gè)字符的索引位置(索引位置同樣是從 0 開(kāi)始),如果沒(méi)有找到,則返回 -1。2.1.5 方法(函數(shù))的參數(shù)和返回值方法(也叫函數(shù))是 Java 語(yǔ)法的重要組成部分,它的語(yǔ)法比較簡(jiǎn)單,但用途比較廣泛,通過(guò)下面的 FunctionTest.java 代碼,我們一起來(lái)學(xué)習(xí)一下方法的用途。public

23、class FuncionTest/方法定義public static int add(int i,int j)return i+j;public static void main(String args)/方法調(diào)用int result = add(2,2);System.out.println(result); 首先我們定義了一個(gè) add 的方法,定義方法的基本語(yǔ)法是: 修飾符 返回類(lèi)型 方法名 (參數(shù)列表 )這里的修飾符是 public 和 static 表示公有的靜態(tài)方法,它的具體含義會(huì)在下文里描述,這里的返回 類(lèi)型是 int ,表示 add方法將要返回一個(gè) int 類(lèi)型的結(jié)果,返回類(lèi)型

24、可以是基本數(shù)據(jù)類(lèi)型,也可以是類(lèi), 如果這個(gè)方法沒(méi)有返回,則可以用 void 在表示。這里的方法名是 add,參數(shù)是兩個(gè) int 類(lèi)型的值。而在 add 的方法主體里,是針對(duì)了兩個(gè)輸入?yún)?shù),做了個(gè)加的操作,并且通過(guò)return 語(yǔ)句將結(jié)果返回。這里請(qǐng)大家注意,返回結(jié)果的類(lèi)型必須要和方法定義時(shí)聲明的返回類(lèi)型相一致。而在 main 函數(shù)里調(diào)用 add 方法時(shí),我們的做法是: int result = add(2,2); ,針對(duì) add 方法的參數(shù)列表, 我們傳入了兩個(gè) int 類(lèi)型的參數(shù),并且用了同樣是 int 類(lèi)型的 result 變量來(lái)接收 add 方法的返回值。如果我們?cè)?main 函數(shù)里有多

25、個(gè) add 操作, 那么可以把這些加法操作定義到方法體里,而不是直接在main 函數(shù)里執(zhí)行操作,這樣可以減少代碼的冗余程度。2.2 程序流程控制 流程控制的語(yǔ)句起著控制代碼執(zhí)行順序的作用,它由順序、選擇、循環(huán)這 3 種最基本的結(jié)構(gòu)組成。 通過(guò)這種方式得到的代碼,結(jié)構(gòu)清楚,層次分明,易于閱讀與維護(hù)。在這里需要強(qiáng)調(diào)的一點(diǎn)是,雖然 Java 是一種面向?qū)ο蟮恼Z(yǔ)言, 我們可以把它的結(jié)構(gòu)模塊化, 但是模塊內(nèi)部最基礎(chǔ)的結(jié)構(gòu)仍是這種面向 過(guò)程的方式,只不過(guò)在整體的設(shè)計(jì)上我們運(yùn)用了面向?qū)ο蟮睦砟睢?.2.1 順序與分支順序結(jié)構(gòu)是最基本最簡(jiǎn)單的結(jié)構(gòu),它按著從上到下的流程順序的組織代碼,在編程的時(shí)候我們一般 會(huì)基

26、于這種順序結(jié)構(gòu)與分支和循環(huán)進(jìn)行一定的嵌套,從而使代碼進(jìn)行有效地運(yùn)作。 分支結(jié)構(gòu)由 if 和 switch 兩個(gè)關(guān)鍵字引出。前者用于二選一后者用于多種分支情況的選擇。 if else 結(jié)構(gòu): if( 條件語(yǔ)句 )分支語(yǔ)句 1;else分支語(yǔ)句 2;如果條件語(yǔ)句值為 true 時(shí),執(zhí)行分支語(yǔ)句 1,否則執(zhí)行分支語(yǔ)句 2。如果需要滿足條件時(shí)同時(shí)執(zhí)行 多條語(yǔ)句,只需把這些語(yǔ)句用“ ”括起即可。if 結(jié)構(gòu): if( 條件語(yǔ)句 )語(yǔ)句 ;如果條件語(yǔ)句值為 true 時(shí),執(zhí)行語(yǔ)句,否則忽略該語(yǔ)句。同樣,如果需要滿足條件時(shí)同時(shí)執(zhí)行多條 語(yǔ)句,只需把這些語(yǔ)句用“ ”括起即可。else if 結(jié)構(gòu):if( 條件語(yǔ)

27、句 1)分支語(yǔ)句 1;else if( 條件語(yǔ)句 2)分支語(yǔ)句 2;else if( 條件語(yǔ)句 n)分支語(yǔ)句 n;else分支語(yǔ)句 n+1;如果條件語(yǔ)句 1 為 true 時(shí),執(zhí)行分支語(yǔ)句 1,否則如果條件語(yǔ)句 2 為 true 時(shí),執(zhí)行分支語(yǔ)句 2, 否則如果條件語(yǔ)句 n 為 true 時(shí),執(zhí)行分支語(yǔ)句 n,否則執(zhí)行分支語(yǔ)句 n+1。通過(guò)這種 if else 語(yǔ)句嵌套的 方式達(dá)到了多分支語(yǔ)句只執(zhí)行其中一個(gè)分支語(yǔ)句的效果,由于if else 在本章里使用最為廣泛,所以在這 里不再單獨(dú)舉例。switch 結(jié)構(gòu),它的語(yǔ)法是:switch( 條件語(yǔ)句 )case 值 1 : 語(yǔ)句 1;case 值

28、2 : 語(yǔ)句 2;case 值 n : 語(yǔ)句 n; default : 語(yǔ)句 default;先計(jì)算條件語(yǔ)句的值,該值必須為整數(shù)型或者字符型,如果值為1,執(zhí)行語(yǔ)句 1,如果值為 2,執(zhí)行語(yǔ)句 2 ,如果值為 n,執(zhí)行語(yǔ)句 n,如果所有的值都不匹配就執(zhí)行語(yǔ)句default ,default 段也可以省略掉。需要注意的是條件語(yǔ)句的值在與某一個(gè)值匹配執(zhí)行了相應(yīng)的語(yǔ)句之后,如果沒(méi)有 break 語(yǔ)句打斷, 則程序會(huì)繼續(xù)執(zhí)行下去直到遇到了一個(gè) break 語(yǔ)句或者 switch 結(jié)束。例如:char flag = b'int i=1;switch(flag)case a' : i = 1

29、;case b' : i = 2;break;case c ' : i = 3;default : i = 4;上述代碼的業(yè)務(wù)邏輯是,如果flag 的值為 a,'則先執(zhí)行 i = 1,然后是 i = 2 ,此時(shí)遇到了 break 才會(huì)跳出 switch 語(yǔ)句。如果 flag 的值為 b',則執(zhí)行 i = 2 ,此時(shí)遇到了 break 跳出 switch 。如果 flag 的值為 c',則執(zhí)行 i = 3 , 然后執(zhí)行 i = 4 ,最后跳出 switch 。如果 flag 不是其中的任何一個(gè)則執(zhí)行i = 4 ,然后跳出。2.2.2 循環(huán)流程循環(huán)流程實(shí)現(xiàn)了

30、一種反復(fù)執(zhí)行某段程序的流程結(jié)構(gòu)。它是由循環(huán)語(yǔ)句和跳轉(zhuǎn)語(yǔ)句共同實(shí)現(xiàn)的。循環(huán) 語(yǔ)句包括 for 、 while 、 do-while 語(yǔ)句,跳轉(zhuǎn)語(yǔ)句包括 break 、 continue 語(yǔ)句。for 語(yǔ)句:for( 初始化語(yǔ)句 ;條件語(yǔ)句 ;遞歸語(yǔ)句 )循環(huán)體 ; 程序先執(zhí)行初始化語(yǔ)句,它的作用是初始化循環(huán)變量,如果有多個(gè)語(yǔ)句就逗號(hào)隔開(kāi),然后判斷條件 語(yǔ)句的值,如果為 true 執(zhí)行循環(huán)體和遞歸語(yǔ)句,再判斷此刻的條件語(yǔ)句的值,重復(fù)以上步驟,直到某次 遞歸之后,條件語(yǔ)句的值為 false ,跳出當(dāng)前 for 語(yǔ)句。例如:while 語(yǔ)句:while( 條件語(yǔ)句 )循環(huán)體 ;判斷條件語(yǔ)句的值如果為

31、true,執(zhí)行循環(huán)體,再判斷此刻的條件語(yǔ)句的值,重復(fù)以上步驟,直到條 件語(yǔ)句的值為 false,跳出當(dāng)前 while 語(yǔ)句。do-while 語(yǔ)句:do循環(huán)體 ;while( 條件語(yǔ)句 )先執(zhí)行循環(huán)體,然后判斷條件語(yǔ)句的值如果為 true 繼續(xù)執(zhí)行循環(huán)體,再判斷條件語(yǔ)句的值,重復(fù)以 上步驟,直到條件語(yǔ)句的值為 false ,跳出當(dāng)前 do-while 語(yǔ)句。break 語(yǔ)句:可以用于 switch 語(yǔ)句和以上 3 種循環(huán)語(yǔ)句,目的是跳出整個(gè)循環(huán)語(yǔ)句。continue 語(yǔ)句:用于以上 3 種循環(huán)語(yǔ)句,目的是跳出當(dāng)前的一次迭代,而不是跳出整個(gè)循環(huán)語(yǔ)句,這是它與 break 最大的區(qū)別。2.2.3

32、有爭(zhēng)議的 goto 語(yǔ)句做過(guò) BASIC 或 C 語(yǔ)言編程的人都知道 goto 語(yǔ)句是一個(gè)臭名昭著語(yǔ)句,它可以讓代碼跳轉(zhuǎn)到任何的 位置,它增加了代碼的復(fù)雜度,嚴(yán)重影響了程序的可讀性,因此使用的時(shí)候應(yīng)該謹(jǐn)慎。在 Java 里面 goto 作為一個(gè)保留字存在,但沒(méi)有拿來(lái)做任何用途但是 Java 里面的 break、 continue 結(jié)合循環(huán)語(yǔ)句中的 label 實(shí)現(xiàn)了部分的 goto 跳轉(zhuǎn)功能。在多層循環(huán)的嵌套中怎樣從內(nèi)層循環(huán)直接跳出外層循環(huán)的迭代哪,讓我們看一下下面的代碼Lable.java 。 public class Label public static void main(String

33、 args) int i = 0;outer: while (true)System.out.println("in while loop");while (true)i+;System.out.println("i = " + i);if (i = 2)System.out.println("continue outer"); continue outer;if (i = 4)System.out.println("break outer");break outer;在 Eclipse 中運(yùn)行該程序得到如下輸出:

34、in while loopi = 1i = 2continue outerin while loopi = 3i = 4break outer該程序先初始化變量 i 值為 0,然后進(jìn)入了最外層循環(huán),并且在該循環(huán)的前面加入了一個(gè)名字叫做 outer 的標(biāo)簽,然后打印“ in while loop ”,進(jìn)入內(nèi)循環(huán), i值加一變?yōu)?1,然后內(nèi)部循化迭代 i 值加一變 為 2 ,此時(shí)滿足 if 條件語(yǔ)句打印“ continue outer ”并執(zhí)行 continue outer 語(yǔ)句,從內(nèi)層的一次迭代跳到了 外層循環(huán)的迭代,注意這種方式只有通過(guò)標(biāo)簽才能實(shí)現(xiàn),然后繼續(xù)進(jìn)入內(nèi)層循化,當(dāng) i 值變?yōu)?4 時(shí)

35、打印 “ break outer ”并執(zhí)行 break outer 語(yǔ)句,曾內(nèi)層的一次迭代跳出了整個(gè)外層循環(huán),程序執(zhí)行結(jié)束,這種 直接跳出的方式也只有標(biāo)簽可以實(shí)現(xiàn)。2.2.4 使用 If 語(yǔ)句判定是否是閏年計(jì)算機(jī)之所以如此流行,最主要的原因就是它給人們的日常生活帶來(lái)的極大的方便。下面給大家展 現(xiàn)一個(gè)比較有趣的例子 : 如何用 if 語(yǔ)句判斷某一年是否是閏年,請(qǐng)看代碼 LeapYear.java 。public class LeapYearpublic static void main(String args)int year = 2008;if (year % 4 = 0 &&

36、 year % 100 != 0) | (year % 400 = 0) System.out.println(year + " is a leap year.");elseSystem.out.println(year + " is not a leap year.");在 Eclipse 中運(yùn)行該程序得到如下輸出:2008 is a leap year.這段代碼的業(yè)務(wù)邏輯是:如果輸入年份能夠被 4 整除并且不被 100 整除或者能被 400 整除,該年份 就是閏年,否則不是。在 LeapYear.java 代碼中我們通過(guò) if 語(yǔ)句和算術(shù)運(yùn)算、邏輯運(yùn)

37、算結(jié)合在一起非常方便的實(shí)現(xiàn)了該功2.2.5 使用循環(huán)語(yǔ)句計(jì)算階乘計(jì)算機(jī)語(yǔ)言在數(shù)學(xué)領(lǐng)域也發(fā)揮著舉足輕重的作用,比如說(shuō)如何快速的計(jì)算整數(shù)n 的階乘,請(qǐng)看代碼Factorial.java 。public class Factorialpublic static void main(String args)int f = 1;for (int n = 10; n > 1; n-)f = f * n;System.out.println("The result is " + f);在 Eclipse 中運(yùn)行該程序得到如下輸出:The result is 3628800 程序里,

38、我們可以通過(guò) for 語(yǔ)句實(shí)現(xiàn)計(jì)算了 n 的階乘,從 n 開(kāi)始循環(huán)每次都與當(dāng)前的 n 相乘把值存 放到變量 f 中,直到 n 的值減到 1 為止,這樣就達(dá)到了計(jì)算整數(shù) n 的階乘的目的。2.2.6 使用 Switch 語(yǔ)句控制輸出switch 語(yǔ)句,比如根據(jù)成績(jī)的等級(jí)判斷具體的分?jǐn)?shù)段,如果我們有多分支選擇的需求就可以考慮使用請(qǐng)看代碼 GradeLevel.javapublic class GradeLevelpublic static void main(String args)char grade = 'C'switch (grade)case 'A':Sys

39、tem.out.println(grade + " is 85 100"); break; case 'B': System.out.println(grade + " is 70 84"); break; case 'C': System.out.println(grade + " is 60 69"); break; case 'D': System.out.println(grade + " is < 60"); break; default: Syste

40、m.out.println("inputerror");在 Eclipse 中運(yùn)行該程序得到如下輸出:C is 60 69 考試成績(jī)一共有四個(gè)等級(jí),根據(jù)這些等級(jí)我們能反推出所處的分?jǐn)?shù)段,程序里面也作了很好的容錯(cuò) 機(jī)制,如果你輸入了一個(gè)不正確的等級(jí)那么將得到輸入錯(cuò)誤的提示。這里需要大家注意的是每個(gè) case語(yǔ)句后面都加上了一個(gè) break 語(yǔ)句,大家可以把它去掉看看會(huì)有什 么樣的輸出。2.3 類(lèi)與封裝在面向?qū)ο蟮乃枷胫?,任何?shí)體都可以看成對(duì)象,而我們會(huì)把這些對(duì)象分門(mén)別類(lèi)抽象出它們共同的 特征,并且把這些特征歸納起來(lái)形成一個(gè)概念的定義,我們就稱(chēng)之為類(lèi)?!胺庋b”是面向?qū)ο笏枷氲牡?/p>

41、一大要素,如果沒(méi)有能體現(xiàn)“封裝性”的類(lèi),那么面向?qū)ο蟮牧硗獯笠兀皩?shí)現(xiàn)類(lèi)的繼承”以及“類(lèi)的多態(tài)”將成為無(wú)源之水,無(wú)本之木。2.3.1 類(lèi)的構(gòu)成要素類(lèi)反映了現(xiàn)實(shí)生活中真正存在的一些對(duì)象的特征,這些對(duì)象都有相同的屬性定義和行為定義,只不 過(guò)具體的值會(huì)有所區(qū)別, 這也符合我們認(rèn)知世界的規(guī)律, 因?yàn)榇笞匀恢械娜f(wàn)物也是既有共性又有特性的。在面向?qū)ο蟮?Java 語(yǔ)言里面,我們通過(guò)關(guān)鍵字 class 定義一個(gè)類(lèi),在類(lèi)里面存在若干個(gè)屬性和方法 對(duì)應(yīng)現(xiàn)實(shí)世界中的屬性和行為。比如,汽車(chē)有位置和速度的屬性,有運(yùn)動(dòng)和停止的行為。那我們就可以 定義 Car 類(lèi),代碼請(qǐng)見(jiàn)如下的 Car.java 程序。public

42、class Car/ 位置int position;/ 速度int speed;/方法/ 運(yùn)動(dòng)void move() System.out.println("is moving");/停止void stop() System.out.println("is Stopped");2.3.2 類(lèi)的構(gòu)造函數(shù)與構(gòu)造次序我們?cè)谏厦嬷皇嵌x了一個(gè)汽車(chē)的類(lèi),現(xiàn)實(shí)生活中可能有很多這樣的車(chē)只不過(guò)它們的位置的速度不 同,我們可以根據(jù)這個(gè)汽車(chē)類(lèi)的定義實(shí)例化出具體的正在某個(gè)位置以一定的速度運(yùn)行的汽車(chē),此時(shí)我們 就可以用 new 關(guān)鍵字來(lái)實(shí)例化出這個(gè)對(duì)象,并且為這個(gè)對(duì)象賦予相應(yīng)的

43、屬性值,這樣我們才創(chuàng)造了一個(gè) 與現(xiàn)實(shí)世界中對(duì)應(yīng)起來(lái)的一輛汽車(chē)。 我們?cè)谠瓉?lái)的 Car 類(lèi)基礎(chǔ)上加上 main 函數(shù)用以測(cè)試, 以下修改后的 的代碼 Car1.java 。public class Car1/ 位置int position;/ 速度int speed;/ 運(yùn)動(dòng)void move() System.out.println("is moving");/停止void stop() System.out.println("is Stopped");public static void main(String args)Car1 c = new Ca

44、r1();c.position = 10;c.speed = 80;c.move();在 Eclipse 中運(yùn)行該程序得到如下輸出:is moving我們?cè)?main 函數(shù)中,通過(guò) new 語(yǔ)句得到了一個(gè) Car1 的對(duì)象,該對(duì)象的引用被存放在變量 c 中,之 后我們通過(guò)變量 c 為得到的這個(gè)對(duì)象屬性賦值并調(diào)用其相應(yīng)的函數(shù)。注意在 Java語(yǔ)言里變量 c 存放的是當(dāng)前對(duì)象的引用, 通過(guò)這個(gè)引用我們可以找到內(nèi)存中真正存放這 個(gè)對(duì)象的那段空間,從而修改相應(yīng)的屬性或者調(diào)用相應(yīng)的方法。這也是Java 與其他語(yǔ)言的區(qū)別,在 Java里面舍棄了繁瑣的地址操作,簡(jiǎn)化了編程過(guò)程。在上面的例子中,我們把對(duì)象屬性

45、的初始化放到了外面,其實(shí)我們完全可以在 new 語(yǔ)句的過(guò)程中就 執(zhí)行該初始化動(dòng)作,請(qǐng)看修改后的代碼 Car2.java 。public class Car2/ 位置int position;/ 速度int speed;Car2()position = 10;speed = 80;/ 運(yùn)動(dòng)void move() System.out.println("is moving");/停止void stop() System.out.println("is Stopped");public static void main(String args)Car2 c =

46、 new Car2();c.move(); 在這段代碼里面我們把初始化的動(dòng)作放到了默認(rèn)構(gòu)造函數(shù)中處理。我們是否有這樣的疑問(wèn)那,為什么叫默認(rèn)構(gòu)造函數(shù)?首先 Java 里面規(guī)定這種與類(lèi)的名字相同并且沒(méi)有返回值得函數(shù)就叫做構(gòu)造函數(shù), 如 果構(gòu)造函數(shù)又沒(méi)有什么輸入?yún)?shù),我們就稱(chēng)其為默認(rèn)構(gòu)造函數(shù)。對(duì)于一個(gè)類(lèi)來(lái)說(shuō),默認(rèn)構(gòu)造函數(shù)可以不 用顯性定義,系統(tǒng)會(huì)為其指定一個(gè)只有空方法體的構(gòu)造函數(shù),就像Car1.java 中, new 語(yǔ)句會(huì)調(diào)用系統(tǒng)的默認(rèn)構(gòu)造函數(shù)。同樣的我們也可以定義帶參構(gòu)造函數(shù),請(qǐng)看修改后的代碼Car3.java 。public class Car3/ 位置int position;/ 速度int

47、 speed;Car3(int position,int speed )this.position = position; this.speed = speed;/ 運(yùn)動(dòng)void move() System.out.println("is moving");/停止void stop() System.out.println("is Stopped");public static void main(String args)Car3 c = new Car3(10,80);c.move();此時(shí)我們 new 語(yǔ)句調(diào)用了帶參的構(gòu)造函數(shù)。需要強(qiáng)調(diào)的一點(diǎn)是,如果

48、指定了帶參的構(gòu)造函數(shù)之后就 不會(huì)再存在一個(gè)空方法體的默認(rèn)構(gòu)造函數(shù), 也就是說(shuō)像 Car3 這個(gè)類(lèi)就不能通過(guò) new Car3() 的方式實(shí)例化 對(duì)象。接下來(lái)我們討論一下構(gòu)造次序,其實(shí)在屬性聲明的位置我們可以加入賦值語(yǔ)句,如代碼Car4.java 。public class Car4/ 位置int position = 1;/ 速度int speed = 1;/構(gòu)造函數(shù)Car4(int position,int speed )this.position = position;this.speed = speed;/ 運(yùn)動(dòng)void move() System.out.println("i

49、s moving");/停止void stop() System.out.println("is Stopped");public static void main(String args)Car4 c = new Car4(10,80);c.move();我們?cè)谡{(diào)用 new 語(yǔ)句時(shí),系統(tǒng)先為該對(duì)象分配內(nèi)存空間,此時(shí)屬性 position 和 speed 取整數(shù)型的默 認(rèn)值 0,接著又均被賦值為 1,然后進(jìn)入構(gòu)造函數(shù)的賦值語(yǔ)句分別被賦值為10和 80。理解對(duì)象的構(gòu)造次序?qū)ξ覀冋莆掌鋬?nèi)部實(shí)現(xiàn)機(jī)制起著非常重要的作用,往往我們?cè)诮鉀Q一些底層問(wèn) 題的時(shí)候需要的就是這種技巧

50、。2.3.3 用 package 封裝工具類(lèi)和用 import 引入需要的類(lèi)在大型的 Java 項(xiàng)目開(kāi)發(fā)中我們會(huì)根據(jù)現(xiàn)實(shí)世界的對(duì)象并結(jié)合實(shí)際需求抽象出程序中所需的類(lèi), 這些 類(lèi)的數(shù)量非常的龐大,因此如何來(lái)有效的管理好這些類(lèi)就顯得尤為重要了。Java 里面提供了 package 關(guān)鍵字幫助我們對(duì)類(lèi)進(jìn)行分類(lèi)存放。比如我們有錘子、斧子兩個(gè)工具,為了管理方便我們不妨給他們存放 在一個(gè)叫做工具的目錄下面。因此在我們的 tools 的目錄下面就存放了 Sinker.java 和 Axe.java 這兩個(gè)類(lèi)。package tools;public class Sinker 和package tools;p

51、ublic class Axe 注意,這兩個(gè)類(lèi)一定要存放在 tools 目錄下面,并且,在類(lèi)的定義里面關(guān)鍵字 package 一定要出現(xiàn)在 除了注釋語(yǔ)句的第一行位置,否則在編譯的時(shí)候系統(tǒng)會(huì)提示異常。并且,在使用package 里,可以用“ .”來(lái)表示目錄的嵌套,即如果一個(gè)類(lèi)存放在 a 目錄下的 b 目錄下的 c 目錄那么在類(lèi)的第一行一定要寫(xiě)成 “ package a.b.c;”。如果我們想要使用某個(gè)包中的類(lèi)應(yīng)該如何來(lái)操作哪?Java 里面的關(guān)鍵字 import 提供了這個(gè)功能。比如我們有個(gè)木匠類(lèi) Carpenter.java 想使用這兩個(gè)工具類(lèi)就可以這么來(lái)定義。import tools.*;p

52、ublic class Carpenterpublic static void main(String args)Axe a = new Axe();Sinker s = new Sinker();注意這里的“ * ”表示引用 tools 目錄下的所有的類(lèi)(因?yàn)閮蓚€(gè)類(lèi)都用到了為了簡(jiǎn)單起見(jiàn)我們就使用 了簡(jiǎn)寫(xiě)形式), import 語(yǔ)句也可以存在多個(gè),上面的例子中我們可以把 import 語(yǔ)句改寫(xiě)成:import tools.Axe;import tools.Sinker;表示引用了 tools 目錄下的 Axe 和 Sinker 兩個(gè)定義好的類(lèi)。2.3.4 修飾符與類(lèi)內(nèi)部對(duì)象的可見(jiàn)性以上文的汽車(chē)

53、類(lèi)為例,在使用汽車(chē)時(shí),我們不必關(guān)心諸如汽車(chē)內(nèi)部“發(fā)動(dòng)機(jī)如何點(diǎn)火”和“沖程氣 缸如何工作等細(xì)節(jié)”,同樣地,汽車(chē)制造廠商也不可能將這些細(xì)節(jié)暴露給使用者。封裝性是類(lèi)的重要特性,在上例中,汽車(chē)類(lèi)通過(guò)公有( public )的方法,向用戶提供了運(yùn)動(dòng)( move ) 和停止( stop)的功能。另外,汽車(chē)類(lèi)里的一些屬性和方法,比如“發(fā)動(dòng)機(jī)的狀態(tài)”的屬性和“發(fā)動(dòng)機(jī)的點(diǎn)火”的方法,是 供本類(lèi)使用的,不能提供給用戶,這些屬性和方法的類(lèi)型是私有的( private ),類(lèi)的外部看不到這樣的 屬性和方法。除了這兩種類(lèi)型的修飾符外,屬性和對(duì)象還有第三種“受保護(hù)”(protected )類(lèi)型的修飾符。凡是 被定義成“受

54、保護(hù)”的屬性和方法,只能在本類(lèi)和子類(lèi)里使用,在類(lèi)的外部是無(wú)法使用的。比如在汽車(chē) 類(lèi)里可以設(shè)計(jì)一個(gè) protected 類(lèi)型的“統(tǒng)計(jì)保持在最大時(shí)速時(shí)間”方法,這個(gè)方法可以提供給汽車(chē)本身和 它的子類(lèi)“賽車(chē)類(lèi)”使用,而不必提供給汽車(chē)的使用者。類(lèi)的封裝性可以通過(guò)上述三種修飾符很好地體現(xiàn),我們可以把實(shí)現(xiàn)類(lèi)功能的方法及其屬性定義成public ,必須把一些描述實(shí)現(xiàn)細(xì)節(jié)的屬性和方法設(shè)置成 private ,可以把想提供給子類(lèi)的方法和屬性定義 成 protected 。下面的 WholeCar.java 程序詳細(xì)講述了各修飾符的用法。class Car/表示汽車(chē)內(nèi)部狀態(tài)的變量private int inner

55、Status;/最大時(shí)速下的行程數(shù)protected int maxspeedLength;private boolean checkStatus()/檢測(cè)汽車(chē)內(nèi)部狀態(tài),并設(shè)置 innerStatus 的值/.if(innerStatus>0)return true;elsereturn false;public void start()if(checkStatus() = true)System.out.println("Car Start!");elseSystem.out.println("Could not start!");/返回最大時(shí)速

56、時(shí)的行程數(shù)protected int getMaxSpeedLength()/省略一些業(yè)務(wù)細(xì)節(jié)/.return maxspeedLength;public class WholeCarpublic static void main(String args)Car car = new Car();/不正確的一些用法/1 企圖訪問(wèn)私有的屬性和放法/car.checkStatus();/System.out.println(car.innerStatus);/2 企圖訪問(wèn)收保護(hù)的方法,建議別使用/car.getMaxSpeedLength();/只能訪問(wèn) car 里的公有方法car.start() ;在這段代碼里,我們首先定義了 Car 這個(gè)類(lèi),在其中,用于表示汽車(chē)內(nèi)部狀態(tài)的 innerStatus 變量是 private 的,表示最大時(shí)速下的行程數(shù)的 maxspeedLength 變量是 protected 的,這兩個(gè)變量只在 Car 類(lèi)里 被用到,在外部是不能使用的。另外, Car 里提供了一個(gè) public 類(lèi)型的 start 方法,用戶可以通過(guò)這個(gè)方法開(kāi)動(dòng)汽車(chē)。在 s

溫馨提示

  • 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)論