版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Java語言程序設(shè)計(第二版)全套可編輯PPT課件單元一認識Java語言單元二Java基本語法單元三Java面向?qū)ο筇匦詥卧腏ava的異常處理單元五Java的多線程單元六JavaApplet單元七Java的圖形用戶界面單元八輸入輸出與文件處理單元九Java數(shù)據(jù)庫編程單元十Java的網(wǎng)絡(luò)應(yīng)用模塊一認識Java語言全套可編輯PPT課件目錄DIRECTORY01Java語言的發(fā)展與特點02第一個Java程序全套可編輯PPT課件01Java語言的發(fā)展與特點全套可編輯PPT課件學(xué)習(xí)目標1.能夠說出Java語言的發(fā)展歷程和工作原理;2.能夠掌握Java語言的語法機制;3.能夠理解Java運行系統(tǒng)與Java虛擬機(JVM);4.能夠掌握Java開發(fā)環(huán)境的安裝與配置,簡單了解開發(fā)工具;5.能夠了解Java,激發(fā)學(xué)習(xí)Java語言的興趣和動力,做一個熱愛編程的人。全套可編輯PPT課件一、Java的起源與發(fā)展
1991年,美國SunMicrosystems公司的某個研究小組為了能夠在消費電子產(chǎn)品上開發(fā)應(yīng)用程序,積極尋找合適的編程語言。BillJoy先生領(lǐng)導(dǎo)的研究小組就著手設(shè)計和開發(fā)出一種語言,稱之為Oak。1995年,互聯(lián)網(wǎng)在世界上蓬勃發(fā)展,Sun公司發(fā)現(xiàn)Oak語言所具有的跨平臺、面向?qū)ο?、安全性高等特點非常符合互聯(lián)網(wǎng)的需要,于是改進了該語言的設(shè)計,并給該語言取名為Java語言。(一)Java的起源全套可編輯PPT課件
1995年,美國SunMicrosystems公司正式向IT業(yè)界推出了Java語言,該語言具有安全、跨平臺、面向?qū)ο?、簡單、適用于網(wǎng)絡(luò)等顯著特點。IBM、Oracle、微軟、Netscape、Apple、SGI等大公司紛紛與SunMicrosystems公司簽訂合同,授權(quán)使用Java平臺。微軟公司總裁比爾·蓋茨先生在經(jīng)過研究后認為:“Java語言是長時間以來最卓越的程序設(shè)計語言”。(二)Java的發(fā)展二、什么是Java技術(shù)Java技術(shù),簡而言之就是一種獨立于操作系統(tǒng)平臺的編程語言與開發(fā)平臺。S設(shè)計目標提供一種易于編程的語言;消除其他語言在諸如指針運算和存儲器管理方面影響健壯性的缺陷;利用面向?qū)ο蟮母拍钍钩绦蛘嬲爻蔀榭梢暬绦?;為使代碼盡可能清晰合理、簡明流暢提供了一種方法;為獲得以下兩點益處提供一種解釋環(huán)境:提高開發(fā)速度——消除編譯→鏈接→裝載→測試周期、代碼可移植性——使操作系統(tǒng)能為運行環(huán)境做系統(tǒng)級調(diào)用;為運行不止一個活動線程的程序提供了一種方式;通過允許下載代碼模塊,從而當程序運行時也能動態(tài)支持程序改變;為那些保證安全性而裝載的代碼模塊提供了一種檢查方法。S開發(fā)平臺
Java技術(shù)給程序員提供了許多工具:編譯器、解釋器、文檔生成器和文件打包工具等等。S程序發(fā)布平臺有兩種主要的“發(fā)布環(huán)境”。首先Java運行時環(huán)境(JavaRuntimeEnvironment,JRE)包含了完整的類文件包,其次許多主要的瀏覽器都提供了Java解釋器和運行時環(huán)境。目前Sun公司把Java平臺劃分成J2SE、J2EE、J2ME三個平臺,針對不同的市場目標和設(shè)備進行定位。三、Java的語法機制概述(一)Java源程序的組成部分package語句;//該部分至多只有一句,必須放在源程序的第一句import語句;//該部分可以有若干import語句或者沒有,必須放在所有的類定義之前publicclassDefinition;//公共類定義部分,至多只有一個公共類的定義//Java語言規(guī)定該Java源程序的文件名必須與該公共類名完全一致classDefinition;//類定義部分,可以有0個或者多個類定義interfaceDefinition;//接口定義部分,可以有0個或者多個接口定義如果在源程序中包含有公共類的定義,則該源文件名必須與該公共類的名字完全一致,字母的大小寫都必須一樣。這是Java語言的一個嚴格的規(guī)定,如果不遵守,在編譯時就會出錯。在一個Java源程序中至多只能有一個公共類的定義。如果源程序中不包含公共類的定義,則該文件名可以任意取名。如果在一個源程序中有多個類定義,則在編譯時將為每個類生成一個.class文件。(二)源文件的命名規(guī)則(三)注釋
為了方便他人理解程序中的某個變量、方法或者類對象的定義,提高程序的可讀性,程序中往往需要編寫注釋。注釋有以下三種形式:
(1)單行注釋,以“//”開始,該行后面的內(nèi)容都會成為注釋,可以放在語句開頭或者注釋掉該行或者放在語句結(jié)尾對該句進行注解。(2)多行注釋,以“/*”開始,“*/”結(jié)束。(3)文檔注釋,以“/**”開始,“*/”結(jié)束。Java的運行系統(tǒng)是一個完整、有機的程序設(shè)計系統(tǒng),其功能主要由JVM、JDK以及開發(fā)平臺組成。四、Java運行系統(tǒng)與JVM(一)Java虛擬機——JVM
JVM(JavaVirtualMachine),Java虛擬機,是軟件模擬的計算機,可以在任何處理器上(無論是在計算機中還是在其他電子設(shè)備中)安全并且兼容的執(zhí)行保存在.class文件中的字節(jié)碼。Java虛擬機的“機器碼”保存在.class文件中,也可以稱之為字節(jié)碼文件。。213指令集(相當于中央處理器CPU)(二)JVM的組成注冊集類文件格式456棧垃圾收集堆存儲區(qū)在C++語言中是由程序員進行內(nèi)存回收的,程序員需要在編寫程序的時候把不再使用的對象內(nèi)存釋放掉;但是這種人為的管理內(nèi)存釋放的方法卻往往由于程序員的疏忽而致使內(nèi)存無法回收,同時也增加了程序員的工作量。而在Java運行環(huán)境中,始終存在著一個系統(tǒng)級的線程,專門跟蹤內(nèi)存的使用情況,定期檢測出不再使用的內(nèi)存,并進行自動回收,避免了內(nèi)存的泄露,也減輕了程序員的工作量。(三)垃圾自動回收機制(四)代碼安全性檢查機制
字節(jié)碼的執(zhí)行需要經(jīng)過三個步驟,首先由類裝載器(classloader)負責(zé)把類文件(.class文件)加載到Java虛擬機中,在此過程需要檢驗該類文件是否符合類文件規(guī)范;其次字節(jié)碼校驗器(bytecodeverifier)檢查該類文件的代碼中是否存在著某些非法操作;如果字節(jié)碼校驗器檢驗通過,由Java解釋器負責(zé)把該類文件解釋成為機器碼進行執(zhí)行。Java虛擬機采用的是“沙箱”運行模式,即把Java程序的代碼和數(shù)據(jù)都限制在一定內(nèi)存空間里執(zhí)行,不允許程序訪問該內(nèi)存空間外的內(nèi)存,如果是Applet程序,還不允許訪問客戶端機器的文件系統(tǒng)。五、Java程序開發(fā)(一)JDK的安裝和配置1.下載并安裝JDK
Java開發(fā)工具包(JavaDevelopmentKits,簡稱JDK)是Java應(yīng)用程序開發(fā)的基礎(chǔ)工具包,開發(fā)Java應(yīng)用程序首先必須下載JDK(JDK可以從Oracle公司的官方網(wǎng)站上下載)。下載完成后,雙擊圖標進行安裝,安裝過程中可以自定義安裝目錄等信息。2.認識JDK
在安裝完成后,可以發(fā)現(xiàn)在安裝目錄下具有bin、include、jre、lib、sample、demo等文件夾。3.配置JDK環(huán)境變量
(1)右擊“此電腦”,如圖1-2所示,選擇“屬性”命令。(2)切換到“系統(tǒng)”窗口,如圖1-3所示,單擊“高級系統(tǒng)設(shè)置”。(3)切換到“系統(tǒng)屬性”窗口,單擊“高級”選項卡,如圖1-4所示,單擊“環(huán)境變量”按鈕。(4)切換到“環(huán)境變量”對話框,如圖1-5所示,在“系統(tǒng)變量”中選擇變量“path”,然后單擊“編輯”按鈕。(5)切換到“編輯環(huán)境變量”窗口,如圖1-6所示,點擊“編輯”或“新建”按鈕,添加路徑C:\ProgramFiles(x86)\Java\jdk1.8.0_144\bin”,這樣使得系統(tǒng)可以在任何路徑下識別Java命令。(6)在步驟(4)中,在“用戶變量”中單擊“新建”,如圖1-7所示,在變量名中輸入“classpath”,在變量值中輸入“.”,classpath為java加載類(class或lib)路徑,只有類在classpath中,java命令才能識別,設(shè)為“.”表示當前路徑,然后單擊“確定”按鈕。(二)Eclipse簡介1.Eclipse簡介
為了提高程序的開發(fā)效率,大部分軟件開發(fā)人員都是使用集成開發(fā)工具(IntegratedDevelopmentEnvironment,IDE)來進行Java程序開發(fā)的。常用的Java的IDE主要有:JCreater,JBuilder,Eclipse等。其中Eclipse是IBM花費巨資開發(fā)的一款功能完整且成熟的IDE集成開發(fā)環(huán)境。它是一個開源的,基于Java的可擴展開發(fā)平臺,是目前最流行的Java語言開發(fā)工具。Eclipse具有強大的代碼編排功能。可以幫助程序開發(fā)人員完成語法修正、代碼修正、補全文字信息提示等編碼工作。大大提高了程序開發(fā)的效率。2.下載并安裝Eclipse
最新版本的EclipseIDE可以從它的官方網(wǎng)站上下載,如圖1-8所示。下載后安裝Eclipse之前必須保證已安裝恰當?shù)腏DK。Eclipse是一個綠色軟件,無須安裝即可執(zhí)行。02第一個Java程序(1)(2)(3)(4)任務(wù)目標能夠了解Java程序分為兩類;能夠掌握Java標準庫中System對象的多種方法;能夠編寫最簡單的“字符串輸出”程序,掌握編寫、編譯、運行Java程序的基本方法。4.能夠養(yǎng)成良好的編程習(xí)慣,促進對編程的理解,具備初步的編程思維。Java程序分為JavaApplication(Java應(yīng)用程序)和JavaApplet(Java小應(yīng)用程序)兩種。Java程序分為JavaApplication(Java應(yīng)用程序)和JavaApplet(Java小應(yīng)用程序)兩種。
Java程序分為JavaApplication(Java應(yīng)用程序)和JavaApplet(Java小應(yīng)用程序)兩種。Java的基本語法:(1)Java中的程序代碼可分為結(jié)構(gòu)定義語句和功能執(zhí)行語句,其中,結(jié)構(gòu)定義語句用于聲明一個類或者方法,功能執(zhí)行語句用于實現(xiàn)具體的功能,每條功能執(zhí)行語句的最后都必須用分號(;)結(jié)束。(2)雖然Java沒有嚴格要求用什么樣的格式來編排程序代碼,但是,出于可讀性的考慮。應(yīng)該讓自己編寫的程序代碼整齊美觀,層次清晰。以下兩種方法都可以,但是建議使用后一種。(3)Java程序中,一句連續(xù)的字符串兒不能分開在兩行中書寫。任務(wù)實施/*源程序文件名:Ex0101.Java*/importjava.util.Date;importjava.util.Properties;publicclassEx0101{//創(chuàng)建公共類,名為Ex0101publicstaticvoidmain(Stringargs[]){System.out.println(newDate());Propertiesp=System.getProperties();p.list(System.out);System.out.println("MemoryUsage:");Runtimert=Runtime.getRuntime();System.out.println("TotalMemory="+rt.totalMemory()+"FreeMemory="+rt.freeMemory());//打印總內(nèi)存大小,打印空閑內(nèi)存大小}}程序運行結(jié)果如圖1-9所示THANKSForYourWatchingJava語言程序設(shè)計(第二版)模塊二Java基本語法目錄DIRECTORY01常量和變量02算數(shù)表達式與賦值表達式03條件判斷05流程控制語句06數(shù)組07字符串04數(shù)據(jù)類型的轉(zhuǎn)換01常量和變量任務(wù)目標1.能夠正確區(qū)分程序中的變量和常量;2.能夠為程序中的變量定義合理的數(shù)據(jù)類型和初始化,理解變量的作用域;3.能夠遵循變量的命名規(guī)則,并能為變量取一個正確且合理的名字;4.具備“無規(guī)矩不成方圓”的意識,做一個做遵紀守法的人。一、常量
在程序運行的過程中,其值不可改變的量稱為常量。Java語言中的常量有兩種類型:一種稱為直接常量,也叫值常量,如23、-65、3.14;另一種稱為符號常量,符號常量需要明確定義。(一)直接常量整型常量(byte、short、int、long)浮點型(實型)常量(float、double)字符型常量(char)布爾型常量(boolean)1.整型常量(byte、short、int、long)
整型常量又稱整數(shù),可以用來給整型變量賦值,整數(shù)可以使用十進制、八進制、十六進制形式來表示,如表2-1所示。2.浮點型(實型)常量(float、double)數(shù)值后面加上f或F表示float型浮點數(shù),占4個字節(jié)。數(shù)值后面加上d或D表示double型浮點數(shù),若沒有則默認為double型,占8個字節(jié)。3.字符型常量(char)
字符型常量是無符號常量,占2個字節(jié),表示的字符范圍為0~65535。Java中的字符采用國際標準Unicode編碼,它所包含的信息量遠遠多于8位的ASCII編碼。計算機在處理時把這些字符當作不同的整數(shù)對待(十六進制編碼\u000~\uffff)。采用Unicode(標準萬國碼)編碼格式,為了避免各國在編碼過程中使用的沖突產(chǎn)生。
字符型常量分為一般字符常量和轉(zhuǎn)義字符常量。對于可輸入字符,用單引號括起來,如‘a(chǎn)’、‘A’、‘計’等。對于不可輸入字符,以反斜杠“\”開頭的字符序列表示,稱為“轉(zhuǎn)義字符”,用于表示unicode字符集內(nèi)的控制代碼和某些功能定義。4.布爾型常量(boolean)
布爾型常量只有兩個值:true和false,分別代表布爾邏輯中的“真”和“假”。必須小寫。在Java語言中布爾常量不能轉(zhuǎn)換成任何其他數(shù)據(jù)類型,true常量不等于1,而false常量也不等于0。(二)符號常量
Java中使用final關(guān)鍵字來定義符號常量,如下所示:finaldoublePI=3.1415926;符號常量可以是任何類型,定義符號常量時必須要初始化。符號常量通常要用大寫字母來表示。若常量名有兩個或兩個以上單詞組成,則單詞間用下劃線連接,例如:finalintMAX_SCORE=100;符號常量實際上是一種特殊變量,也是占用內(nèi)存空間的,不同于C語言中的宏。二、變量
變量是指在程序運行過程中其值可以被改變的量,變量主要用于保存輸入、輸出和程序運行過程中的中間數(shù)據(jù),可以理解為保存數(shù)據(jù)的容器(即存儲單元)。要使用一個變量,必須先聲明變量的名字、類型等特征,并對其進行初始化后才能使用它。簡單變量的聲明和初始化格式如下:typename=value;(一)數(shù)據(jù)類型整型數(shù)據(jù)有byte(字節(jié)型)、short(短整型)、int(標準型)和long(長整型)四種。byte:以1個字節(jié)存儲的整型數(shù)。short:以2個字節(jié)存儲的整型數(shù)。int:常使用的整數(shù)類型,以4個字節(jié)存儲的整型數(shù)。long:以8個字節(jié)存儲的整型數(shù)。聲明為long類型的整數(shù)值后需要加上“L”或“l(fā)”。以上四種數(shù)據(jù)類型的聲明用法如下:byteb=0x1f;//指定變量b為byte型十六進制整數(shù)shorts=16;//指定變量s為short型十進制整數(shù)inti=123;//指定變量i為int型十進制整數(shù)longl=123L;//指定變量l為long型十進制整數(shù)1.整型數(shù)據(jù)2.浮點型(實型)數(shù)據(jù)浮點型有float(單精度類型)和double(雙精度類型)兩種。double類型比float類型具有更高的精度和更大的表示范圍。float:以4個字節(jié)存儲的浮點型數(shù)。聲明為float類型的數(shù)值后需要加上“F”或“f”。double:以8個字節(jié)存儲的浮點型數(shù)。聲明為double類型的數(shù)值后需要加上“D”或“d”,也可以省略不加。以上兩種數(shù)據(jù)類型的聲明用法如下:doubled=3.1415926;//指定變量d為double型doubled=3.1415926d(D);//指定變量d為double型floatf=3.1415926F;//指定變量f為float型3.字符型數(shù)據(jù)字符型變量的聲明用法如下:charc='a';//指定變量c為字符型,且初始值為字符'a'chard='\u0061';/*指定變量d為字符型,且初始值為Unicode編碼為十六進制整數(shù)0061(十進制97)的字符'a'*/4.布爾型數(shù)據(jù)
Boolean(布爾型)數(shù)據(jù)類型只有兩個值:true和false,分別代表布爾邏輯中的“真”和“假”。在Java語言中布爾常量不能轉(zhuǎn)換成任何其他數(shù)據(jù)類型,true常量不等于1,而false常量也不等于0。布爾類型的數(shù)據(jù)一般在if,while,do,for或三元運算符?:環(huán)境下使用。booleanx=true;//指定變量c為布爾型,且初始值為布爾值true(二)標識符
標識符用于對變量、常量、類、接口和方法命名。標識符是除關(guān)鍵字外的任意一串以合法字母、下劃線(_)或美元符號($)開頭的,由合法字母、數(shù)字、下劃線(_)和美元符號($)組成的字符串。Java標識符命名規(guī)則如下:(1)標識符必須以字母、下劃線(_)或美元符號($)開頭;(2)Java中合法字母除大小寫的英文字母外,還包括Unicode字符集里位置在00C0以前的字符(如中文字符、日文字符、阿拉伯字符等);(3)Java的關(guān)鍵字(表2-4)不能用作標識符;(4)保留字是為以后Java語言擴展使用的,保留字不是關(guān)鍵字,也不能用作標識符。如true、false、null等;(5)Java是嚴格區(qū)分大小寫的語言,F(xiàn)irst和first分別代表的是兩個不同的標識符;(6)一般標識符用大寫字母開頭。同一個標識符中,中間的單詞以大寫字母開頭,或用下劃線進行分割;(7)標識符應(yīng)在一定程度上反映它所表示的變量、常量、對象接口或類的意義。Java標識符命名規(guī)范:(1)盡量能夠見名知意,用單詞命名,不用中文字符。(2)通常不限制字符數(shù),但是太長沒有意義。(3)包名:包名是全小寫的單詞,中間由“.”分隔開,(4)類名:通常由多個單詞組成,要求每個單詞的首字母都要大寫,例如:HelloWorldApp。(5)方法名:往往由多個單詞組成,第一個單詞通常為動詞,首字母小寫,其后的每個單詞的首字母都要大寫,例如:balanceAccount、isButtonPressed。(6)抽象類的命名:通常在表示意義的詞組前加Abs,接口的命名規(guī)則跟類名類似,只是通常在前面加I(大寫的i),接口的實現(xiàn)類通常在后加Impl(第一個是大寫的i,第4個是小寫的L)。(7)變量名通常是名詞,全部小寫,例如:length。(8)常量的命名全部大寫,單詞與單詞間用下劃線_分隔,例如:YEAR,WEEK_OF_MONTH;如果是對象類型的常量,則是大小寫混合,由大寫字母把單詞隔開。(三)變量的作用域
變量經(jīng)過聲明和初始化后就可以使用了,但并不是一個變量聲明和初始化后就可以隨便在哪里都能使用,這里涉及一個作用域的問題。變量的作用域就是該變量能被訪問的區(qū)間,在程序源代碼中通常以程序段來劃分。在本任務(wù)中,定義了二個變量:fr和farea,由于這二個變量都是在main方法中定義的,所以它們的作用域就是整個main方法。也就是說,在main方法中的任何地方,都可以訪問到這二個變量的值。02算數(shù)表達式與賦值表達式能夠正確書寫并使用Java的算術(shù)運算符與算術(shù)表達式;能夠正確書寫Java的賦值運算符與賦值表達式;能夠把“小事”做細,樹立“細節(jié)決定成敗”的意識,做一個做事嚴謹?shù)娜?。任?wù)目標一、算術(shù)運算符與算術(shù)表達式(一)算術(shù)運算符算術(shù)運算符用于完成算術(shù)運算。Java提供了兩大類共八個算術(shù)運算符。雙目運算符單目運算符1.雙目運算符雙目運算符是有兩個操作數(shù)的運算符,Java中有五個雙目算術(shù)運算符。
其中加法(+)運算符除能對數(shù)值進行加法運算操作外,還可以用來實現(xiàn)字符串的連接,比如下面的語句:System.out.println("abc"+"de");就將輸出字符串“abcde”。另外,與C、C++不同,取余(%)運算的操作數(shù)不但可以是整數(shù)也可以是浮點數(shù),例如:整數(shù)%整數(shù),結(jié)果是整數(shù),如12%5=2;浮點數(shù)%整數(shù),結(jié)果是浮點數(shù),如12.3%6=0.3;整數(shù)%浮點數(shù),結(jié)果是浮點數(shù),如19%6.7=5.6;浮點數(shù)%浮點數(shù),結(jié)果是浮點數(shù),如18.6%6.7=5.200000000000001。2.單目運算符單目運算符是只有一個操作數(shù)的運算符,Java中有四個單目算術(shù)運算符。需要注意的是自增(++)和自減(--)運算符在做前綴和后綴使用時是有區(qū)別的。分析下列程序的輸出結(jié)果,注意其中前置運算和后置運算的區(qū)別。publicclassExam{publicstaticvoidmain(Stringargs[]){inti,x,y;i=5;x=i++;/*后置運算,先把i的值賦給x,然后i的值加1*/System.out.println("i=%d,x=%d\n",i,x);i=5;y=++i;/*前置運算,先使i的值加1,然后將i的值賦給y*/System.out.println("i=%d,y=%d\n",i,y);}}程序運行結(jié)果如下所示。i=6,x=5i=6,y=6(二)算術(shù)表達式
用算術(shù)運算符或圓括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C的算術(shù)表達式。運算對象包括常量、變量、函數(shù)等。算術(shù)表達式在使用時要注意書寫形式。二、賦值運算符與賦值表達式(一)簡單賦值運算符
賦值運算符“=”用于將運算符右邊表達式的值賦給左邊的變量,如“x=5”是把量5賦給變量x。由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。它的基本使用格式如下:變量=表達式;(二)復(fù)合賦值運算符
除基本賦值運算符外,Java還提供了一系列復(fù)合賦值運算符(快捷賦值運算符),用于在一個運算符里同時完成賦值操作和另一個算術(shù)、移位或按位操作。例如:i=i+j;可以使用快捷賦值運算符“+=”:i+=j;賦值運算符和復(fù)合賦值運算符的優(yōu)先級高于逗號運算符,結(jié)合方向均為“從右到左”。(三)賦值表達式
(1)賦值運算符的左邊必須是變量名,被賦值變量的值就是賦值表達式的值。(2)當賦值表達式中左邊的變量與右邊的表達式的數(shù)據(jù)類型不同時,需要進行類型轉(zhuǎn)換。轉(zhuǎn)換的規(guī)則是:右邊表達式的值被轉(zhuǎn)換成左邊變量的數(shù)據(jù)類型,然后再賦值給變量。(3)賦值表達式也可以包含復(fù)合的賦值運算符。例如:a+=a-=a*a如果a的初值為8,此賦值表達式的求解步驟如下:①先進行“a-=a*a”的運算,它相當于a=a-a*a=8-64=-56。②再進行“a+=-56”的運算,它相當于a=a+(-56)=-56-56=-112。03條件判斷任務(wù)目標1.能夠正確書寫Java的關(guān)系表達式和邏輯表達式,為選擇結(jié)構(gòu)程序設(shè)計打好基礎(chǔ);2.會計算關(guān)系表達式和邏輯表達式的值;3.能夠變“抽象”為“具體”,具有舉一反三、自己獲取知識的能力。一、關(guān)系運算符和關(guān)系表達式(一)關(guān)系運算符
關(guān)系運算符用來比較兩個操作數(shù)的值,其運算結(jié)果是布爾型值true或false。關(guān)系運算符都是雙目運算符,Java語言一共提供了6個關(guān)系運算符。
Java中任何類型的數(shù)據(jù)(包括基本類型和構(gòu)造類型)都可以使用==和!=來比較是否相等。關(guān)系運算符常與條件運算符一起使用,作為流程控制語句的判斷條件。使用關(guān)系運算符時,應(yīng)注意其優(yōu)先級。(1)“<”“<=”“>”“>=”這四個運算符的優(yōu)先級相同,“==”和“!=”的優(yōu)先級相同。前4個運算符的優(yōu)先級高于后兩個運算符的優(yōu)先級。(2)關(guān)系運算符的優(yōu)先級低于算術(shù)運算符而高于賦值運算符。它們的結(jié)合性是“自左至右”。例如:a!=b+c等價于a!=(b+c);a=b>c等價于a=(b>c)。(二)關(guān)系表達式
關(guān)系表達式就是用關(guān)系運算符將兩個或兩個以上運算對象連接起來的式子。其中,運算對象可以是常量、變量或表達式。關(guān)系表達式的運算結(jié)果有兩種:“真”或“假”。在Java語言中用true表示“真”,用false表示“假”。例如:3*5>6*2,表達式的執(zhí)行結(jié)果為true。二、邏輯運算符和邏輯表達式(一)邏輯運算符邏輯運算符用來進行邏輯運算,操作數(shù)類型是布爾型數(shù)據(jù),運算結(jié)果也是布爾型。使用邏輯運算符時,應(yīng)注意它的優(yōu)先級和結(jié)合性。(1)邏輯運算符從高到低的優(yōu)先次序為:!(邏輯非)→&&(邏輯與)→||(邏輯或)。(2)邏輯非“!”的結(jié)合方向是“自右至左”,邏輯與“&&”和邏輯或“||”的結(jié)合方向是“自左至右”。(3)常見運算符的優(yōu)先次序如圖2-2所示。(二)邏輯表達式
用邏輯運算符將關(guān)系表達式或邏輯量連接起來的式子稱為邏輯表達式。邏輯表達式的值也有兩種,即“真”和“假”。有一點需要指出,在邏輯表達式的求值過程中,存在“短路”行為。(1)在求解a&&b&&c的值時,只有a的值是真時,才會計算b的值;只有a和b均為真時,才會計算c的值。如果a為假,則整個表達式的值已經(jīng)確定為假,就不會繼續(xù)計算b和c的值。(2)在求解a||b||c的值時,只有a為假時,才會計算b的值;只有a和b均為假時,才會計算c的值。如果a是真,則整個表達式的值已經(jīng)確定為真,就不會計算b和c的值。三、位運算符(一)按位運算符按位運算符包括有四種,其使用方法和功能如表2-11所示。邏輯與、或和按位與、或的比較相同點:都能參與邏輯運算,按位與或完全可以替代邏輯與或。區(qū)別:按位與或可以參與位運算,邏輯與或只能參與邏輯運算;邏輯與或可以“短路”,按位與或不能“短路”。邏輯與的短路操作,先計算左邊的操作數(shù),如果左操作數(shù)為false,此時已經(jīng)可以得到整個表達式的值為false,則不會計算右操作數(shù);例如:a>b&&c<d一旦a>b為假,c<d不再計算。邏輯或的短路操作,先計算左邊的操作數(shù),如果左操作數(shù)為true,此時已經(jīng)可以得到整個表達式的值為true,則不會計算右操作數(shù);例如:a>b||c<d一旦a>b為真,c<d不再計算。(二)移位運算符移位運算符包括三種,其使用方法和功能如表2-12所示。
移位運算適用數(shù)據(jù)類型:byte、short、char、int、long對低于int型的操作數(shù)將先自動轉(zhuǎn)換為int型再移位。四、其他運算符(1)“?:”運算符是唯一的一個三元運算符,它的形式為:a?b:c程序運行時先判斷a,如果a為true,則返回b的值,否則返回c的值。例如:inta,b=5,c=7;a=(b>c)?b:c;//a值為7可見,利用第二條語句可以自動判斷b和c的大小,并返回其中較大的值。(2)“[]”運算符用來定義數(shù)組,創(chuàng)建數(shù)組,或訪問數(shù)組元素。例如:int[]aValue=newint[12];aValue[3]=12;(3)“.”運算符用來訪問對象的成員函數(shù)或成員變量。(4)“(參數(shù)1,參數(shù)2,……)”運算符用于向方法中傳遞參數(shù),這部分內(nèi)容也將在下一單元說明。(5)“(變量類型)”,將在本單元任務(wù)4中介紹。(6)“instanceof”運算符的用法為:ainstanceofb其中a是對象名,b是類名。如果對象a是b類或其直接或間接子類的實例,則該表達式返回true;如果對象a是b類或其直接或間接父類的實例,則表達式返回false。對象與繼承的概念,在下一單元中說明。五、運算符的優(yōu)先級
對于包含多個運算符的表達式,計算時必須遵循一定的先后次序。Java中所有運算符的優(yōu)先次序如表2-14所示。對于相同優(yōu)先級的運算符,Java采用從左到右的次序,但賦值運算是從右到左的。04數(shù)據(jù)類型的轉(zhuǎn)換任務(wù)目標1.能夠正確描述Java的編譯系統(tǒng)對不同類型數(shù)據(jù)進行運算時的轉(zhuǎn)換規(guī)則;2.能夠根據(jù)編程需要進行強制類型轉(zhuǎn)換;3.能夠領(lǐng)會“變則通,通則存,存則強”的精髓,拒絕做一個墨守成規(guī)的人。
賦值運算的基本要求是運算符左右兩邊的數(shù)據(jù)類型必須一致,如果遇到賦值號兩邊的數(shù)據(jù)類型不一致的情況,就需要把右邊的數(shù)據(jù)類型轉(zhuǎn)換成左邊的數(shù)據(jù)類型。通常情況下,如果類型不一致,需要程序員在程序中進行強制類型轉(zhuǎn)換,在某些特殊情況下,Java也可以自動進行類型轉(zhuǎn)換。(一)強制類型轉(zhuǎn)換
強制類型轉(zhuǎn)換也叫顯式轉(zhuǎn)換,它的一般格式是:(數(shù)據(jù)類型)變量名或表達式由于不同數(shù)據(jù)類型所占用的存儲空間不同,轉(zhuǎn)換后可能丟失信息,所以當較長的數(shù)據(jù)類型轉(zhuǎn)換為較短的數(shù)據(jù)類型時必須使用強制類型轉(zhuǎn)換,程序員需要自己確保數(shù)據(jù)在類型轉(zhuǎn)換后的有效性。請看下列語句:inti;longl=0xFFFFFFFFFFL;doubled=12.34;i=(int)l;//將l轉(zhuǎn)換成int類型,有可能丟失信息。i=(int)d;//將d轉(zhuǎn)換成int類型,有可能丟失信息。l=(long)i;//將i轉(zhuǎn)換成long類型,不會丟失信息。(二)自動類型轉(zhuǎn)換
當賦值運算符左右兩邊數(shù)據(jù)類型不一致,且右邊的數(shù)據(jù)類型存儲長度小于等于左邊的數(shù)據(jù)類型,即轉(zhuǎn)換后不會丟失信息的情況下,Java可以自動完成數(shù)據(jù)類型的轉(zhuǎn)換。shorts=10;inti=100;floatf;longl;doubled;f=i;//i自動轉(zhuǎn)換成float類型。l=i;//i自動轉(zhuǎn)換為long類型。d=i;//i自動轉(zhuǎn)換為double類型。i=s;//s自動轉(zhuǎn)換為int類型。s=i;//i不能自動轉(zhuǎn)換為short類型。
簡單類型除了boolean類型以外,其他的數(shù)據(jù)類型可以自動轉(zhuǎn)換成其他的數(shù)據(jù)類型,要遵循的原則如圖2-3所示。05流程控制語句1、能正確掌握Java的分支語句的寫法,根據(jù)編程需要編寫選擇結(jié)構(gòu)程序;任務(wù)目標2、能正確掌握Java的循環(huán)語句的寫法,根據(jù)編程需要編寫循環(huán)結(jié)構(gòu)程序;3.能正確掌握break語句和continue語句的寫法,根據(jù)編程需要應(yīng)用;4、不但能靈活運行知識,也懂得按“規(guī)矩”辦事。一、條件分支(一)if語句if語句是最基本的分支控制語句,它可以讓程序根據(jù)某些條件選擇性地執(zhí)行語句。if語句的形式如下:if(關(guān)系表達式){語句}它的含義是:如果關(guān)系表達式的值為true,則執(zhí)行后面大括號里的語句,否則就不執(zhí)行大括號里的語句。例如,假設(shè)程序要判斷字符變量iChar中保存的是不是字符“q”,可以使用這樣的語句:if(iChar=='q'||iChar=='Q'){System.out.println("是Q。");}
當字符iChar的值是字母q(不管是大寫還是小寫)時,關(guān)系表達式的值為true,因此執(zhí)行大括號里的語句,即輸出“是Q?!边@樣一條信息。如果iChar的值不是字母q,則不會顯示這條信息。需要注意的是,在上面的程序中,大括號里只有一條語句,因此可以省略大括號,將程序簡化為:if(iChar=='q'||iChar=='Q')System.out.println("是Q。");但如果有兩條或以上的語句,則必須用大括號括起來。(二)if…else語句
有時,程序需要控制當條件滿足和不滿足時分別執(zhí)行不同的語句,這時可以使用if…else語句,通過判斷一個條件,可以決定程序到底執(zhí)行哪些語句。if…else語句的形式如下:if(關(guān)系表達式){語句1}else{語句2}
它的含義是:如果關(guān)系表達式的值為true,則執(zhí)行后面大括號里的語句1,否則執(zhí)行大括號里的語句2。語句1和語句2總會有一個被執(zhí)行。語句1和語句2都可以是多行,如果只有一行,則相應(yīng)的括號可以省略。
例如,假設(shè)程序要判斷字符變量iChar中保存的是不是字符“q”,可以使用這樣的語句:if(iChar=='q'||iChar=='Q'){System.out.println("是Q。");}else{System.out.println("不是Q。");}當字符iChar的值是字母q(不管是大寫還是小寫)時,關(guān)系表達式的值為true,則執(zhí)行語句1,即輸出“是Q?!?。如果iChar的值不是字母q,則執(zhí)行語句2,即輸出“不是Q?!保ㄈ﹊f…else嵌套
如果我們的程序需要有兩個以上的分支,那么單純的if…else結(jié)構(gòu)就不能滿足需要了,這時可以使用嵌套的if…else結(jié)構(gòu)。例如:判斷變量a的值是正數(shù)、負數(shù)還是零,那么相應(yīng)的代碼就應(yīng)該是:if(a>0){System.out.println("a的值大于零。");}elseif(a<0){System.out.println("a的值小于零。");}else{System.out.println("a的值等于零。");}
這里出現(xiàn)了elseif語句,它實際上是在else語句后面接了另一個完整的if...else結(jié)構(gòu)。由于一個if...else結(jié)構(gòu)算是一條語句,所以else和if之間沒有大括號,我們也完全可以在else和if之間加上大括號,這樣更容易理解:if(a>0){System.out.println("a的值大于零。");}else{if(a<0){System.out.println("a的值小于零。");}else{System.out.println("a的值等于零。");}}這種if...else的嵌套結(jié)構(gòu)讓程序有了三種分支選擇,如果需要有更多的選擇,也可以使用更復(fù)雜的嵌套結(jié)構(gòu),形成if...elseif...elseif...else結(jié)構(gòu)。(四)switch語句switch語句用于處理多分支選擇,它的一般形式是:switch(intVar){caseVar1:語句1;break;caseVar2:語句2;break;caseVarn:語句n;break;default:語句n+1;}
intVar的最終值的類型必須是整型或能自動轉(zhuǎn)換成整型的類型,如字節(jié)型、短整型、字符型、整型、枚舉(JDK1.5引入)、字符串(JDK1.7引入)。
if語句(包括if...else和if...else嵌套)和switch語句是Java語言提供的兩種分支選擇語句,它們有各自的特點和適用范圍。if語句的適用性更強,所有的分支選擇都可以使用if語句(包括if...else和if...else嵌套)來完成,但多重的if...else嵌套將嚴重降低程序的可讀性;switch語句的可讀性比多重if...else嵌套要好得多,但它又只能對整型量進行判斷。所以在編寫程序的時候,應(yīng)當根據(jù)具體情況來選擇使用何種分支選擇語句。二、循環(huán)
程序設(shè)計中有時需要將一段代碼反復(fù)執(zhí)行,這時就需要用到循環(huán)控制語句。使用循環(huán)控制語句可以提高代碼的使用率,減輕程序員負擔(dān),增加程序運行效率,讓我們用很簡潔的語句完成重復(fù)的、復(fù)雜的操作。(一)while循環(huán)while語句實現(xiàn)“當”型循環(huán),即先判斷循環(huán)條件,如果條件滿足,則執(zhí)行循環(huán)體,否則就結(jié)束循環(huán)。while語句的一般格式如下:while(條件表達式){循環(huán)體}while語句通常用于循環(huán)次數(shù)未知或不方便計算,而使用某種條件來判斷循環(huán)是否結(jié)束的情況。由于while語句是在執(zhí)行循環(huán)體之前先判斷循環(huán)條件,所以循環(huán)體有可能不會被執(zhí)行。例如:inti=1;while(i<=9){System.out.println(i+"×9="+i*9);i++;}(二)do...while循環(huán)
do...while語句的判斷過程與while語句正好相反,它是先執(zhí)行循環(huán)體,再進行判斷以決定是否進行下一次循環(huán)。do...while語句的一般格式如下:do{循環(huán)體}while(條件表達式);與while語句的循環(huán)體有可能不被執(zhí)行不同,do...while語句的循環(huán)體至少會被執(zhí)行一次。在大多數(shù)情況下,for語句、while語句和do...while語句都可以相互替換,實現(xiàn)同樣的功能,但由于while語句和do...while語句的細微差別,所以不是所有使用while語句的情況都可以用do...while語句替換的,這一點一定要注意。同樣,我們可以用do...while語句改寫上面的代碼:inti=1;do{System.out.println(i+"×9="+i*9);i++;}while(i<=9);也可以完成同樣的操作。(三)for循環(huán)
for語句是最常用的一種循環(huán)控制語句,它通常用于循環(huán)次數(shù)已知的情況。for語句的一般格式如下:for(初始化表達式;循環(huán)條件表達式;迭代表達式){循環(huán)體}for語句在運行時,首先執(zhí)行初始化表達式,對循環(huán)控制變量和相關(guān)的其他變量進行定義和初始化。接下來判斷循環(huán)條件,如果條件滿足,就執(zhí)行循環(huán)體內(nèi)的語句,否則就結(jié)束循環(huán)。循環(huán)體執(zhí)行完后,計算迭代表達式,這里通常是對循環(huán)控制變量進行增減,以達到控制循環(huán)次數(shù)的目的。然后再次判斷循環(huán)條件,一直到循環(huán)條件表達式的值為false,結(jié)束循環(huán)。
關(guān)于for語句,還有兩點需要注意:(1)初始化表達式和迭代表達式中可以使用逗號分隔多個語句,例如:for(i=0,j=10;i<10;i++,j--){...}(2)初始化表達式、循環(huán)條件表達式、迭代表達式和循環(huán)體都可以為空(但分號不能省略),當四者都為空時,相當于一個無限循環(huán),當然在編程時應(yīng)該盡量避免這種情況。三、中斷控制語句
在一些循環(huán)結(jié)構(gòu)中,可能遇到某種情況,需要中止循環(huán),但Java沒有提供goto語句,不能使用直接跳轉(zhuǎn)語句跳出循環(huán),但是Java針對這種情況,提供了break、continue和return語句,用于不同情況下的中斷控制。(一)break語句
在switch語句中,break用來終止switch語句的執(zhí)行,程序流程轉(zhuǎn)到switch語句塊后的第一條語句。同樣在循環(huán)語句for、while和do…while中,break將立即終止正在執(zhí)行的循環(huán),程序流程轉(zhuǎn)到循環(huán)語句后的第一條語句。如果break后面有標號,會終止標號的循環(huán)體。(二)continue語句
continue語句只能用在循環(huán)語句中,它有兩種使用格式。一種是不帶標號的continue語句,它的作用是終止當前這次循環(huán),繼續(xù)下一次循環(huán)。另一種是帶標號的continue語句,其格式是:continue標號名。它的作用是終止標號名對應(yīng)循環(huán)的當前這次循環(huán),繼續(xù)標號名對應(yīng)循環(huán)的下一次循環(huán)。(三)return語句return語句從當前函數(shù)中返回到調(diào)用該函數(shù)的語句處,并繼續(xù)執(zhí)行后面的語句(有關(guān)函數(shù)的內(nèi)容將在單元三中介紹)。return語句有兩種格式:return表達式;和return;第一種格式是返回一個值給調(diào)用該函數(shù)的語句。返回值的類型必須與函數(shù)聲明中的返回值類型一致。第二種格式是直接結(jié)束函數(shù)的運行,不返回任何值,相應(yīng)的該函數(shù)的返回值類型應(yīng)該為void。return語句通常用在一個函數(shù)體的最后,退出該函數(shù)并返回一個值。單獨的return語句用在一個函數(shù)體的中間時,會產(chǎn)生編譯錯誤,因為此時會有一些語句不會被執(zhí)行??梢酝ㄟ^把return語句嵌入到某些語句(如if…else)中,來讓程序在沒有執(zhí)行完函數(shù)中的所有語句時退出。06數(shù)組任務(wù)目標1.能夠掌握一維數(shù)組的定義和使用,根據(jù)編程需要靈活使用一維數(shù)組;2.能夠掌握多維數(shù)組的定義和使用,主要是二維數(shù)組;根據(jù)編程需要靈活使用二維數(shù)組;3.做一個有“組織”的數(shù)據(jù),方便組織統(tǒng)一管理。一、一維數(shù)組(一)一維數(shù)組的聲明
一維數(shù)組的聲明方式有兩種:數(shù)據(jù)類型[]數(shù)組名;數(shù)據(jù)類型數(shù)組名[];數(shù)據(jù)類型可以是Java中的任意數(shù)據(jù)類型,數(shù)組名應(yīng)為一個合法的標識符,[]指明這是一個數(shù)組。這兩種定義沒有任何區(qū)別,大家可以根據(jù)自己的習(xí)慣選用。(二)一維數(shù)組的初始化
在使用已經(jīng)聲明好的數(shù)組之前,需要對其進行初始化操作,即為數(shù)組分配內(nèi)存空間,并為每個數(shù)組元素設(shè)置一個默認的初始化值。這里需要使用到運算符new,其格式如下:數(shù)組名=new數(shù)據(jù)類型[數(shù)組長度]通??梢詫?shù)組的聲明和初始化操作合為一步完成,例如:intMyArray[]=newint[10];這里聲明了一個整型數(shù)組MyArray,并指定它的長度為10,同時分配一塊內(nèi)存空間,供數(shù)組使用,其元素個數(shù)為10。且此時數(shù)組中每個元素的值為int類型的默認初始值0。數(shù)組在創(chuàng)建時,每個元素都有相同的默認值。不同類型數(shù)組的默認值如表2-15所示。另外,還可以在數(shù)組聲明時為數(shù)組元素定義另外的初始值。(三)一維數(shù)組的使用
可以通過下面的格式訪問數(shù)組中的任意一個元素:數(shù)組名[下標]前面我們知道了,Java中數(shù)組的下標是從0開始的,最大到數(shù)組長度減1。另外,Java要對數(shù)組元素進行越界檢查以確保程序的安全性,如果發(fā)現(xiàn)下標越界,程序會拋出ArrayIndexOutOfBoundsException異常。二、多維數(shù)組的使用
Java中的多維數(shù)組可以看作數(shù)組的數(shù)組。例如對二維數(shù)組而言,其本身是一個一維數(shù)組,數(shù)組中的每一個元素又是一個一維數(shù)組。(一)二維數(shù)組的聲明
二維數(shù)組的聲明方式為:數(shù)據(jù)類型數(shù)組名[][];與一維數(shù)組一樣,這時的數(shù)組元素也沒有分配內(nèi)存空間,同樣要對數(shù)組進行初始化后,才能夠訪問數(shù)組中的每一個元素。(二)二維數(shù)組的初始化
對二維數(shù)組來說,分配內(nèi)存空間有兩種方法。一種是直接分配,即一次性指定兩個維數(shù)上的長度,另一種是在一維數(shù)組的基礎(chǔ)上,為第二維分配空間。第一種intbuffer[][]=newint[3][4];第二種inta[][]=newint[3][];a[0]=newint[3];a[1]=newint[4];a[2]=newint[5];int[][]allRecord={{70,85},{59,65},{59,60},{90,95},{65,50},{50,50}};(三)二維數(shù)組的使用
同一維數(shù)組類似,可以通過給出二維數(shù)組的兩個下標來訪問數(shù)組中的元素。與一維數(shù)組類似,多維數(shù)組通常也和for循環(huán)配合使用,以訪問多維數(shù)組中的每一個元素,只是根據(jù)數(shù)組維數(shù)的多少,而使用多重循環(huán)來達到目的。多維數(shù)組的定義和使用與一維數(shù)組基本一致,只是由于多維數(shù)組的復(fù)雜性,在使用過程中要多加注意。07字符串1.能夠掌握Java中String類和StringBuffer類的區(qū)別;2.能夠掌握Java中String類的使用方法;3.能夠掌握Java中StringBuffer類的使用方法;4.能夠理解String的“墨守成規(guī)”和StringBuffer的“靈活多變”。任務(wù)目標一、String類
String類封裝了有關(guān)字符串的操作。這里的字符串是常量,即創(chuàng)建后就不可進行更改和變動。程序中只做字符串的比較、查找等操作時,通常使用String類,如果需要進行大量的字符串操作,應(yīng)當使用StringBuffer類或字符數(shù)組,最終結(jié)果可以轉(zhuǎn)換為String格式。(一)String類對象的創(chuàng)建使用String類的構(gòu)造函數(shù)是創(chuàng)建String對象的一種重要方法。
除了使用以上構(gòu)造函數(shù)之外,也可以使用更為熟悉的方式來定義字符串對象,例如:Strings1="Hello,World!";這種方式其實是Strings1=newString(“Hello,World!”)的簡化,為了兼容其他程序設(shè)計語言的編程習(xí)慣,Java允許這樣使用。(二)String類對象的基本操作二、StringBuffer類
String對象是一個常量,創(chuàng)建之后不能更改它的內(nèi)容。而StringBuffer對象則相反,由于使用了緩沖區(qū)技術(shù),可以很方便地修改StringBuffer對象的具體內(nèi)容,這是它和String對象本質(zhì)上的區(qū)別。緩沖區(qū)字符串類StringBuffer與String類相似,它具有String類的很多功能,甚至更豐富。它們主要的區(qū)別在于StringBuffer類可以方便地在緩沖區(qū)內(nèi)被修改,如增加、替換字符或字符串。StringBuffer對象可以根據(jù)需要自動增加存儲空間,所以特別適合處理可變字符串。當完成操作后,可以使用StringBuffer.toString()方法或String類的構(gòu)造函數(shù)將其轉(zhuǎn)換為String類型。(一)StringBuffer類對象的創(chuàng)建通常情況下,使用StringBuffer的構(gòu)造函數(shù)來創(chuàng)建StringBuffer對象。(二)StringBuffer類對象的基本操作
很多String類的方法,對StringBuffer類也同樣適用。另外,StringBuffer類還有一些獨有的方法。(三)StringBuffer類和String類的區(qū)別
String類是常量類型,在對String類的對象進行操作后,并沒有改變這個字符串的內(nèi)容,StringBuffer類是變量類型,在對StringBuffer類的對象進行操作時,是直接在原有字符串的內(nèi)容上進行更改。String對象在進行操作時,生成了一個新的String對象,原有的字符串不會發(fā)生改變;而StringBuffer對象在進行操作時,是在原有的字符串上進行操作,不會產(chǎn)生新對象,而是改變原有的字符串的內(nèi)容。這是String類和StringBuffer類的最大也是最根本的區(qū)別。THANKSForYourWatchingJava語言程序設(shè)計(第二版)目錄DIRECTORY01類的定義06抽象類02創(chuàng)建和使用對象07多態(tài)03Static修飾符08接口04類的封裝09包05繼承01類的定義運用態(tài)度認識學(xué)習(xí)目標1.能夠理解面向?qū)ο缶幊痰乃枷耄?.能夠理解類和對象的概念;3.能夠掌握使用Java語言定義類的規(guī)則與方法;
4.能夠掌握封裝的概念,知道封裝就是把數(shù)據(jù)和方法“保護”起來,能夠?qū)ΜF(xiàn)實環(huán)境進行總結(jié)、抽象、加工,再描繪出它的模型。一、面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法是相對過去傳統(tǒng)的結(jié)構(gòu)化編程方法而言的,這種方法是首先對現(xiàn)實環(huán)境進行總結(jié)、抽象、加工,再描繪出它的模型,使用對象、類、繼承、封裝、消息等基本概念來進行程序設(shè)計。從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運用人類的自然思維方式。然后用Java語言將其表述出。二、類的定義類是一組具有共同特性的所有對象成員的抽象描述。就如同“汽車”這個概念一樣,它能被看作是一個類,那么我們怎樣來描述“汽車”的呢?請看表3-1。(一)類的概念類是Java中的一種重要的復(fù)合數(shù)據(jù)類型,是組成Java程序的基本要素。它封裝了一類對象的狀態(tài)和方法,是這一類對象的原形型。一個類的實現(xiàn)包括兩個部分:類聲明和類體。(二)類的聲明[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList]{……}其中,修飾符public、abstract、final說明了類的屬性,className為類名,superclassName為父類的名字,interfaceNameList為類所實現(xiàn)的接口列表。(三)類的組成處于類內(nèi)部的部分,我們稱其為類的成員。組成的這些成員有:成員變量、成員方法、構(gòu)造函數(shù)等。構(gòu)造函數(shù)又叫構(gòu)造器,成員變量還可叫作屬性。classclassName{[public|protected|private][static][final][transient][volatile]typevariableName;//成員變量[public]className([paramList]){statements;}//構(gòu)造函數(shù)[public|protected|private][static][final|abstract][native][synchronized]returnTypemethodName([paramList])[throwsexceptionList]{statements;}//成員方法}三、構(gòu)造函數(shù)(一)構(gòu)造函數(shù)的概念、作用與格式構(gòu)造函數(shù)是類中一種非常特殊的方法,這個方法在實例化對象時使用,在編程時主要用于為類中的成員賦值。一般情況下,每個類都會有一個默認的無參的空構(gòu)造函數(shù),若程序員沒編寫相關(guān)的構(gòu)造函數(shù),系統(tǒng)會自動地去調(diào)用這個默認的無參的空構(gòu)造函數(shù)。若需要自己寫這個函數(shù),那就必須遵循下面的規(guī)則:(1)該方法與類同名;(2)該方法沒有返回值,不能使用void關(guān)鍵字;(3)一般情況下其訪問屬性為public;(4)當編寫了自己的構(gòu)造函數(shù)后,其原來的默認構(gòu)造函數(shù)就不存在。(二)構(gòu)造函數(shù)的重載一個類中可以有多個構(gòu)造函數(shù),這種情況用于成員變量初始化時有多種不同要求時,稱為構(gòu)造函數(shù)的重載。02創(chuàng)建和使用對象學(xué)習(xí)目標1.能夠掌握實例化類的方法;2.會實例化類,并調(diào)用其中的屬性和方法;3.能夠理解把“理想”變?yōu)椤艾F(xiàn)實”這一過程,做一個“實在”人。一、創(chuàng)建對象(一)創(chuàng)建句柄
首先來想象在家看電視的情景,我們使用遙控器來遙控電視換臺或開關(guān)它,如果想在屋里邊走動邊控制電視機的頻道時,你會怎么做?你會手里拿著遙控器,而不是搬著電視機跟著你走對嗎?再回到語句上,下面這條語句就可以看作有兩層含義:Automobileauto1=newAutomobile();將其分解以后就是這樣,Automobileauto1;//首先申請一個遙控器auto1=newAutomobile();//使用auto1這個遙控器來指揮電視那么第一條語句的意思是說:你想看Automobile牌子的電視了,所以你先在手里拿了一個Automobile牌子的遙控器,用計算機語言來說就是你向計算機申請了一個句柄,它的名字叫auto1,準備用它來控制對象。第二條語句的意思是說:你將使用名為auto1的遙控器與一臺電視聯(lián)系起來,以后這臺電視必需使用這個遙控器來遙控,用計算機的語言來說就是你申請了句柄以后,將它與一個特定的對象關(guān)聯(lián)了起來,以后使用這個對象時,就必須使用個句柄。(二)內(nèi)存分配
程序運行時,所有的數(shù)據(jù)都必須放在內(nèi)存中,內(nèi)存中有三種存放數(shù)據(jù)的塊我們需要了解:堆棧、堆、靜態(tài)存儲區(qū)。
(1)堆棧:這是一塊有規(guī)律的內(nèi)存空間,就像一個被分成很多相同大小的小格子的大柜子。通常用類似的圖示來描述它,如圖3-1所示。這種內(nèi)存分配適合為長度一定的數(shù)據(jù)分配空間。
(2)堆:一種內(nèi)存池。主要用于存放長度不固定的數(shù)據(jù)。我們已經(jīng)知道對象的長度是不一樣的,所以計算機使用它來為對象分配相應(yīng)的空間。分配的大小是由類的結(jié)構(gòu)來規(guī)定的,而分配在堆的空間就是對象。怎樣來使用這個對象呢?——句柄。二、引用對象的屬性觀察下列代碼:publicclassAutomobile{publicStringname;StringID;Stringproducer;Stringcolor;doubleprice;Stringowner;publicvoiddrive(){System.out.println("Theautomobileisdriving");}}
語句中第2至第7行的定義部分就是類的屬性,我們也可以稱它們?yōu)轭惖臄?shù)據(jù)成員或者字段。怎樣引用這些屬性?還記得我們先必須制造電視并選一支指向它的遙控器嗎?然后你就能使用遙控器來控制它的屬性了。publicstaticvoidmain(Stringargs[]){Automobileauto=newAutomobile();="Benz";}看見我們怎樣遙控它的嗎?方法:句柄的名字(對象名).屬性名。三、引用對象的方法觀察下列代碼:publicclassCar{publicStringname;StringID;Stringproducer;Stringcolor;doubleprice;Stringowner;publicvoiddrive(){System.out.println("Theautomobileisdriving");}}
代碼中publicvoiddrive(){…}部分就是類的方法,或者也可以叫作成員方法。怎樣調(diào)用它呢?方法:句柄.方法名(),例如:auto.drive();03static修飾符1SS3S2能夠理解什么是靜態(tài)屬性與方法;會使用static關(guān)鍵字;能夠理解“非靜態(tài)”是自己的,“靜態(tài)”是大家的;學(xué)習(xí)目標一、定義方法
怎樣告訴計算機這個屬性或者這個方法是靜態(tài)的,是屬于類的,不是屬于對象的,其實很簡單——使用static關(guān)鍵字。靜態(tài)屬性的定義:publicstaticintnumber=0;靜態(tài)方法的定義:publicstaticvoidcount(){System.out.println("已制造了"+number+"輛汽車");}二、調(diào)用方法靜態(tài)屬性:類名.屬性名。例如:Automobile.number。靜態(tài)方法:類名.方法名()。例如:Automobile.count()。另外還可以用對象名來調(diào)用,如對象名.屬性名,對象名.方法名()。04類的封裝學(xué)習(xí)目標1.能夠正確理解面向?qū)ο缶幊讨蓄惙庋b的思想;2.能夠掌握public、protected、default、private關(guān)鍵字的意義;3.能夠掌握上述三個關(guān)鍵字的訪問區(qū)域;4.會保護自己的數(shù)據(jù),我的“地盤”我做主。
封裝就是在程序中我們只需要提供給用戶方法的接口,而不需要告訴他們這個方法里具體的內(nèi)容是怎樣,它到底是怎樣進行工作的。一、封裝二、修飾符(一)public公共的public修飾的成員變量和方法被稱為“公共變量”和“公共方法”。public修飾的方法和屬性可以被所有類的對象使用。(二)protected受保護的
用protected修飾的成員變量或方法可以被該類自身、同一個包中的其他類以及在其他包中的該類的子類訪問。(三)default默認的不用修飾符的成員變量和方法被稱為默認變量和默認方法。需要注意的是:如果你在源文件中用import語句引入了另外一個包中的類,并用該類創(chuàng)建了一個對象,那么該類的這個對象將不能訪問自己的默認變量和默認方法。如果一個類被修飾為public的,那么你可以在任何另外一個類中,使用該類創(chuàng)建對象。如果一個類不加任何修飾,那么你在另外一個類中使用這個類創(chuàng)建對象時,要保證它們是在同一包中。(四)private私有的
用private修飾的成員變量和方法被稱為私有變量和私有方法。private修飾的成員變量和方法只能被同一類中的其他成員訪問,不能被其他類的成員訪問,也不能被其子類成員訪問。但是若訪問這個方法的對象位于包外或者不是該類的繼承者,則訪問就是非法的。訪問限定符小結(jié):變量和方法可以處于四個訪問級別的一個:public、protected、default或private。類可以是public或default。變量、方法或類有缺省訪問性,如果它沒有顯式受保護修飾符作為它的聲明的一部分的話。這種訪問性意味著,訪問可以來自任何方法,當然這些方法只能在作為目標的同一個包中的成員類當中。以修飾符protected標記的變量或方法實際上比以缺省訪問控制標記的更易訪問。一個protected方法或變量可以從類當中的任何方法進行訪問,這個類可以是同一個包中的成員,也可以是從任何子類中的任何方法進行訪問。當它適合于一個類的子類但不是不相關(guān)的類時,就可以使用這種受保護訪問來訪問成員。05繼承學(xué)習(xí)目標能夠正確理解繼承的含義與作用;能夠在Java中使用類的繼承;能夠使用Java中繼承的屬性和方法;能夠理解繼承不僅是“抄襲”,還要有“創(chuàng)新”,做一個善于“學(xué)習(xí)”,勇于“創(chuàng)新”的人。一、創(chuàng)建子類
在類的聲明中,通過使用關(guān)鍵字extends來創(chuàng)建一個類的子類,格式如下:classBusextendsAutomobile{……}把Bus類聲明為Automobile類的子類,Automobile類是Bus類的父類。二、子類的繼承性
子類繼承了其父類中除private屬性外的成員變量和成員方法作為自己的成員變量和成員方法。注意,如果一個類的聲明中沒有使用extends關(guān)鍵字,這個類被系統(tǒng)默認為是Object的子類。Object是包java.lang中的類,是所有類的父類。包外的子類不可繼承。當一個類被關(guān)鍵字final所修飾時,它表示這是這個類是最終類,不能再被繼承,所以如果你寫的類不想被其他類繼承,就可以給它加上final的修飾符。三、特殊的父類
類也受訪問限定符的控制,對于不是定義為public的類,由于只能在包中被訪問,因此這種類型也只能被包中的子類繼承。
包外的子類不可繼承。當一個類被關(guān)鍵字final所修飾時,它表示這是這個類是最終類,不能再被繼承,所以如果類不想被其他類繼承,就可以給它加上final的修飾符。四、this和super關(guān)鍵字
在Java中,this是非常重要的關(guān)鍵字,它可以被看作一個指針,用來指向調(diào)用方法或成員變量的對象本身,因此針對靜態(tài)的方法或變量,是沒有this指針指向它的。thissuper在Java中,super關(guān)鍵字有兩種作用:(1)用在子類中引用其父類的構(gòu)造函數(shù)。其格式為:super([實參列表]);(2)用來調(diào)用父類的成員變量和成員方法。super可以用作前綴來引用父類中的成員。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航海俱樂部樣板房施工合同
- 停車場車位預(yù)留協(xié)議
- 產(chǎn)業(yè)園區(qū)生產(chǎn)基地共建租賃合同
- 簡易二手房全款合同填寫指南
- 如何上堂作文課程設(shè)計
- 園林工程課程設(shè)計作業(yè)
- 小班積木圓柱課程設(shè)計
- 投籃游戲課程設(shè)計
- 勞務(wù)分包合同風(fēng)險評估與控制
- 長途客運司機聘用協(xié)議
- 積分上鏈方案
- JC-T 753-2001 硅質(zhì)玻璃原料化學(xué)分析方法
- 沈陽職業(yè)技術(shù)學(xué)院單招《職業(yè)技能測試》參考試題庫(含答案)
- 高等數(shù)學(xué)課件第一章函數(shù)與極限
- 黃石市黃石港區(qū)2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)測評卷(含答案)
- 孤獨癥abc量表孤獨癥兒童行為量表ABC量表
- 國企紀檢監(jiān)察培訓(xùn)課件
- 宮腔鏡可行性報告
- 預(yù)付式消費監(jiān)管服務(wù)平臺建設(shè)方案
- 2024年應(yīng)急管理部宣傳教育中心招考聘用筆試歷年難、易錯考點試題后附答案帶解析
- 室內(nèi)墻面噴涂與涂飾
評論
0/150
提交評論