《《Java語(yǔ)言基礎(chǔ)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《Java語(yǔ)言基礎(chǔ)》PPT課件.ppt(43頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第三章 Java 語(yǔ)言基礎(chǔ),主要內(nèi)容: 數(shù)據(jù)類(lèi)型、變量、常量 表達(dá)式 流程控制語(yǔ)句,問(wèn)題:,定義一個(gè)變量時(shí),如何確定合理的數(shù)據(jù)類(lèi)型? 引用類(lèi)型和基本數(shù)據(jù)類(lèi)型變量有何不同? 如何確定變量的生命周期?,Java 的基本數(shù)據(jù)類(lèi)型,3.2 數(shù)據(jù)類(lèi)型、變量與常量,數(shù)據(jù)類(lèi)型的特點(diǎn)(與C的區(qū)別),各種數(shù)據(jù)類(lèi)型占用固定的內(nèi)存長(zhǎng)度,與具體的軟硬件平臺(tái)無(wú)關(guān)(跨平臺(tái)內(nèi)在要求); 各類(lèi)型都有一個(gè)缺省值(C無(wú)缺省值);,選擇合適的整數(shù)類(lèi)型,考慮實(shí)際需求和程序的性能 如定義一個(gè)變量保存月份 byte month;節(jié)省內(nèi)存 long month;占用太多內(nèi)存 int month; 簡(jiǎn)化運(yùn)算時(shí)強(qiáng)制類(lèi)型轉(zhuǎn)換操作,因?yàn)檎麛?shù)運(yùn)算返
2、回值只能是int或long 如:byte month=1; month=(byte)(month+2);//無(wú)強(qiáng)制類(lèi)型轉(zhuǎn)換則編譯出錯(cuò),Unicode 編碼,Java語(yǔ)言對(duì)字符數(shù)據(jù)類(lèi)型(char) 采用 Unicode 編碼(UCS-2),收錄所有語(yǔ)言文字中的字符,一種跨平臺(tái)的字符編碼。 其它常用字符編碼有: ASCII編碼:主要表達(dá)現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言中的字符。 ISO-8859-1編碼:8位,用于西歐語(yǔ)言中的字符編碼。 GB2312編碼:包括對(duì)簡(jiǎn)體中文字符的編碼。 GBK編碼:對(duì)GB2312編碼的擴(kuò)展,分為漢字區(qū)和圖形符號(hào)區(qū)。 UTF編碼:把Unicode編碼轉(zhuǎn)換為操作系統(tǒng)支持的編碼。,標(biāo)
3、識(shí)符(與C規(guī)定相同),用來(lái)標(biāo)識(shí)一個(gè)包、類(lèi)名、對(duì)象、方法、變量等。 標(biāo)識(shí)符由字母、數(shù)字、下劃線 _ 和美元符號(hào) $ 組成; 以字母、下劃線 _ 或美元符號(hào) $ 開(kāi)頭; 大小寫(xiě)有區(qū)別; 見(jiàn)名知義; P36/表3-2,指出不合法標(biāo)識(shí)符的錯(cuò)誤; 習(xí)題3-4,類(lèi)名(接口名) 名詞 第一字母大寫(xiě),每一單詞首字母大寫(xiě)。 例:AccountBook 方法名 動(dòng)詞 第一字母小寫(xiě),每一單詞首字母大寫(xiě)。 例:balanceAccount() 變量名 名詞 第一字母小寫(xiě),每一單詞首字母大寫(xiě)。 常量名 全部大寫(xiě),單詞間用下劃線分開(kāi) . 例:HEAD_COUNT,常 量,布爾常量:true , false 整型常量 十進(jìn)
4、制: 以非 0 開(kāi)頭 八進(jìn)制: 以 0 開(kāi)頭 017 == 15 十六進(jìn)制:以 0 x 開(kāi)頭 0 x2f == 47 浮點(diǎn)常量 單精度(32位): 以 F、f 表示,如:8.1f; 雙精度(64位) :帶 D、d 或不加后綴,如:8.1 字符串常量 字符串可以連接:“Hello” + “ Java” 得到 “Hello Java”,字符常量,如:a、8以及(轉(zhuǎn)義符),變 量,強(qiáng)制聲明(與C相同) 格式:數(shù)據(jù)類(lèi)型 變量名 = 初始值 ; 如:boolean m_bFalg = true ; double m_dScore ;,基本數(shù)據(jù)類(lèi)型的使用示例,例子3-1: 調(diào)試程序,回答問(wèn)題:
5、1、該程序保存的文件名是什么?為什么要這樣命名? 2、在執(zhí)行程序時(shí),系統(tǒng)怎么知道該從哪里開(kāi)始程序? 3、第8行l(wèi)ong l=123456789L的L的含義是什么?去掉可以嗎?為什么? 4、第10行float f=3.1415925F的F含義是什么?去掉可以嗎?為什么? 5、第12行String s=“你好!”,中文的顯示問(wèn)題,String是基本數(shù)據(jù)類(lèi)型嗎? 6、char chc = 中 ;,字符串與數(shù)字的互相轉(zhuǎn)化,見(jiàn)P37例32: int i = Integer.parseInt( string ); 以上函數(shù)的定義為: public static int parseInt ( Strings
6、 ) throws NumberFormatException,變量的作用域(重點(diǎn)),作用域是指它的存在范圍,只在這個(gè)范圍內(nèi),程序代碼才能訪問(wèn)它。 Java的變量的作用域就是聲明變量的語(yǔ)句所在的語(yǔ)句塊。 例子3-2:代碼12行變量br的作用域,s和i的聲明應(yīng)放在try語(yǔ)句外。,變量的初始化及默認(rèn)值,Java的變量必須先定義,后初始化,再使用。 對(duì)于類(lèi)的成員變量,JVM會(huì)先自動(dòng)賦默認(rèn)值。 對(duì)于局部變量,JVM不會(huì)自動(dòng)初始化為默認(rèn)值。 例子:VaribleAvailable.java,引用類(lèi)型類(lèi),定義類(lèi)(新的數(shù)據(jù)類(lèi)型) class MyDate int day ; int month ; int
7、 year ; 基本數(shù)據(jù)類(lèi)型直接分配內(nèi)存空間 int I,j,k ; 引用類(lèi)型 ? MyDate d1 ; d1 = new MyDate() ;,引用類(lèi)型類(lèi),MyDate d1 = new MyDate() ;,d1.day = 8 ; d1.month = 8; d1.year = 2008 ;,3.3表 達(dá) 式,由變量、常量、對(duì)象、方法調(diào)用和操作符組成的式子。表達(dá)式的值即運(yùn)算后的結(jié)果。 類(lèi)型轉(zhuǎn)換: 自動(dòng)轉(zhuǎn)換:從占用內(nèi)存較少的類(lèi)型轉(zhuǎn)化成占用內(nèi)存較多的類(lèi)型; 強(qiáng)制轉(zhuǎn)換:byte b = 10 ;int i = -1 ; b = (byte ) i ;,算 術(shù) 運(yùn) 算,雙目運(yùn)算符 +(
8、加) - (減) * (乘) /(除) %(取余) 單目運(yùn)算符 + +(自增)- -(自減) -(求相反數(shù)) 例:int x =2 ; int y = ( + + x ) * 3 ; 求x=?,y=? 結(jié)果:x = 3, y = 9 例:int x =2 ; int y = ( x + + ) * 3 ; 求x=?,y=? 結(jié)果: x = 3, y = 6 P41例34:,關(guān) 系 運(yùn) 算,= =(等于)! =(不等于) (大于) =(大于等于)< =(小于等于) 用于比較數(shù)據(jù)的大小關(guān)系,結(jié)果為布爾型;,邏 輯 運(yùn) 算,,Bitwise運(yùn)算符: 問(wèn)函數(shù)的作用; 對(duì)象運(yùn)算符 insta
9、nceof 用來(lái)測(cè)定一個(gè)對(duì)象是否屬于某一個(gè)特定類(lèi)的實(shí)例,形式如下: obj instanceof ClassName(InterfaceName) 例:Dog dog=new Dog(); dog instanceof XXX在以下情況下為true XXX為Dog類(lèi),Dog類(lèi)的直接或間接父類(lèi),Dog類(lèi)實(shí)現(xiàn)的接口,以及所有父類(lèi)實(shí)現(xiàn)的接口。,Animal a=new Dog(); System.out.println(a instanceof Animal);//true System.out.println(a instanceof Dog); //true System.out.println
10、(a instanceof Cat); //false,3.字符串連接操作符“” “”連接字符串,生成新的字符串。其一個(gè)操作數(shù)為String類(lèi)型,另一個(gè)操作數(shù)可以是任意類(lèi)型。因?yàn)樵趈ava.lang.Object類(lèi)中定義了toString()方法。 如:String s=“Age:”+1+2;//s的內(nèi)容為Age:12,4.“”與對(duì)象的equal()方法 “”用來(lái)比較兩個(gè)操作數(shù)是否相等。當(dāng)“”兩邊都是引用類(lèi)型變量時(shí),這兩個(gè)變量都必須引用同一個(gè)對(duì)象時(shí)結(jié)果才為true。 Object類(lèi)的equal()方法是比較引用的是否為同一個(gè)對(duì)象。java.io.File,java.util.Date,java
11、.lang.String,包裝類(lèi)都覆蓋了Object類(lèi)的equal()方法,它們的比較規(guī)則為如果兩個(gè)對(duì)象的類(lèi)型一致,并且內(nèi)容一致,則返回true。,String s1=new String(“Hello”); String s2=new String(“Hello”); System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true,可以在用戶自定義的類(lèi)中覆蓋Object.equals()方法,重新定義比較規(guī)則。 例見(jiàn)Person.java:定義一個(gè)Person類(lèi),實(shí)現(xiàn)兩個(gè)Person實(shí)例,只要名字相同就可
12、以認(rèn)為是同一個(gè)。,運(yùn)算符的優(yōu)先級(jí)與結(jié)合性,運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中不同運(yùn)算執(zhí)行的先后順序。 運(yùn)算符的結(jié)合性決定了并列的相同運(yùn)算的先后執(zhí)行順序。,,例子:習(xí)題3-8 設(shè)A=3,b=-5,f=true; --a%b++為2, (a=1,生活中使用if判斷的實(shí)例?,分支語(yǔ)句(2),2選擇語(yǔ)句 if-else if(boolean-expression) statement1;else statement2;,生活中使用if-else選擇的實(shí)例?,分支語(yǔ)句(3),3多分支語(yǔ)句 (1)if-else if else 語(yǔ)句 if (boolean-expression1) statement1
13、;else if (boolean-expression2) statement2;else if (boolean-expressionN) statementN;else statement;,,分支語(yǔ)句(4),3多分支語(yǔ)句 (2)switch 語(yǔ)句(開(kāi)關(guān)語(yǔ)句) switch (expression) case value1 : statement1; break;case value2 : statement2; break; case valueN : statementN; break;default : defaultStatement; ,,3.4.
14、3循環(huán)語(yǔ)句,循環(huán)體,條件表達(dá)式,條件表達(dá)式,循環(huán)體,表達(dá)式 3,表達(dá)式 1,循環(huán)體,表達(dá)式 2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,T,T,T,F,F,F,(b) do-while 語(yǔ)句,(a) while 語(yǔ)句,(c) for 語(yǔ)句,圖 3-9 Java 的三種循環(huán)語(yǔ)句流程,While的例子3-8:找到所有的水仙花數(shù)。水仙花數(shù)是三位數(shù),各位數(shù)字的立方和等于數(shù)本身。(Narcissus.java) Do-while例子3-9:從用戶鍵盤(pán)輸入一個(gè)字符后,輸出這個(gè)字符對(duì)應(yīng)的ASCII碼。直到輸入為”#”字符結(jié)束。(showCharValue.java) For語(yǔ)句例子3-1
15、0:找出10000以內(nèi)的完全數(shù)。完全數(shù)是等于其所有因子和(包括1但不包括這個(gè)數(shù)本身)的數(shù)。(PerfectNum.java),跳 轉(zhuǎn) 語(yǔ) 句 continue 、break 、 return (無(wú) goto); continue 語(yǔ)句 不帶標(biāo)號(hào)(與C相同): 終止當(dāng)前循環(huán),跳過(guò)本循環(huán)中剩余的語(yǔ)句,直接進(jìn)入下一次循環(huán)。 帶標(biāo)號(hào)(Java特有): 格式: continue 標(biāo)號(hào)名;,例 打印 1 100 之間的素?cái)?shù): First_loop: for (int i=1; i<100; i++) for ( int j=2; j
16、 continue First_loop ;// 跳到外層循環(huán) System .out .println ( i ) ; ,break 語(yǔ)句 不帶標(biāo)號(hào)的 break : 跳出它所在的 switch 分支或最內(nèi)層循環(huán)體。 帶標(biāo)號(hào)的 break : 跳出標(biāo)號(hào)標(biāo)志的語(yǔ)句塊; break 標(biāo)號(hào)名 ; for () a: b: break b; break a; ,小 結(jié),數(shù)據(jù)類(lèi)型的特點(diǎn)(缺省值、內(nèi)存長(zhǎng)度固定、引用數(shù)據(jù)類(lèi)型) 表達(dá)式 流程控制語(yǔ)句,指出程序的錯(cuò)誤: public class MyJavaClass public static void main() System.out.println(Am I wrong?); System.out.println(程序結(jié)束。); ,課堂編程實(shí)踐,編一程序產(chǎn)生3個(gè)20以內(nèi)的隨機(jī)數(shù)作為三角形的三條邊,檢驗(yàn)是否構(gòu)成三角形,若可以,輸出三條邊的長(zhǎng)度,計(jì)算其面積并輸出。 提示: a,b,c是三角形的三條邊,則任意兩邊的和大于第三邊。(或任意兩邊的差小于第三邊)。 面積=Math.sqrt(s*(s-a)*(s-b)*s-c)),其中 s=1.0/2*(a+b+c),