版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JAVA基礎(chǔ)教師自我介紹教師姓名:(請(qǐng)進(jìn)行自我介紹)字體黑體、字號(hào)24、色白字體華文中宋、字號(hào)根據(jù)內(nèi)容20-32均可、色黑課程概述Java開(kāi)發(fā)環(huán)境介紹及編程入門標(biāo)示符、關(guān)鍵字及數(shù)據(jù)類型表達(dá)式及流程控制數(shù)組常用數(shù)據(jù)結(jié)構(gòu)及算法面向?qū)ο缶幊蘋OP封裝、繼承、多態(tài)異常處理Exception課程目標(biāo)掌握程序設(shè)計(jì)語(yǔ)言開(kāi)發(fā)的一般步驟編譯并運(yùn)行Java應(yīng)用程序理解并使用Java的在線幫助文檔理解Java語(yǔ)言的語(yǔ)法元素和結(jié)構(gòu)特點(diǎn)理解面向?qū)ο蟪绦蛟O(shè)計(jì)的一般特性,并且能使用這些特性理解并使用Java異常處理機(jī)制程序語(yǔ)言發(fā)展歷程機(jī)器語(yǔ)言 二進(jìn)制機(jī)器代碼,不便理解,不好記憶,與硬件平臺(tái)相關(guān),不具有可移植性。
匯編語(yǔ)言
用助記符號(hào)來(lái)描述,與機(jī)器代碼一一對(duì)應(yīng),能夠理解,但同樣不可移植。高級(jí)語(yǔ)言
按自然語(yǔ)言的語(yǔ)法風(fēng)格書(shū)寫程序, 方便理解,在原代碼的層次上可以實(shí)現(xiàn) 跨平臺(tái)移植。1000100111100101movdptr,#2000if(a>b)max=a;elsemax=b;高級(jí)語(yǔ)言開(kāi)發(fā)過(guò)程編輯原代碼編譯執(zhí)行JAVA起源StanfordUniversityNetworkJAVA名稱的起源官網(wǎng):/
JamesGosling 現(xiàn)任SUN公司副總裁及Sun研究院院士,他親手設(shè)計(jì)了Java語(yǔ)言,并開(kāi)發(fā)了Java編譯器和JAVA虛擬機(jī),使Java成為了世界上最流行的開(kāi)發(fā)語(yǔ)言。JAVA創(chuàng)始人JAVA歷史1995年,Java首次公開(kāi)亮相。
1996年1月23日SunMicrosystems發(fā)布了JDK1.0。 這個(gè)版本包括了兩部分:運(yùn)行環(huán)境(即JRE)和開(kāi)發(fā)環(huán)境(即JDK)。
1997年2月18日發(fā)布了JDK1.1。
1998年,JDK1.2版本發(fā)布。將Java分成了J2EE、J2SE和J2ME。表明了Java開(kāi)始向企業(yè),桌面應(yīng)用,和移動(dòng)設(shè)備應(yīng)用3大領(lǐng)域挺進(jìn)。
2000年,JDK1.3發(fā)布。
2002年,JDK1.4發(fā)布。
2004年,JDK1.5發(fā)布。同時(shí)JDK1.5改名為J2SE5.0。
2005年6月,JavaSE6。此時(shí),Java的各種版本已經(jīng)更名以取消其中的數(shù)字“2”2006年11月13日,SUN公司宣布Java全線采納GNUGeneralPublicLicenseVersion2,從而公開(kāi)了Java的源代碼。JAVA應(yīng)用概述JAVAME微型版JAVASE標(biāo)準(zhǔn)版JAVAEE企業(yè)版名詞解釋JDK JavaDevelopmentKit(java開(kāi)發(fā)工具包) SoftwareDevelopmentKit(1.2版本-1.4版本)JVM JavaVirtualMachine(java虛擬機(jī))JRE JavaRuntimeEnvironment(java運(yùn)行環(huán)境)
JDK 包含Java運(yùn)行的基本類庫(kù)和開(kāi)發(fā)命令,安裝JDK可以進(jìn)行完整的Java開(kāi)發(fā)。JRE 包含Java運(yùn)行的基本類庫(kù)和一些運(yùn)行命令,安裝JRE可以運(yùn)行編譯好的Java程序。JVM Java語(yǔ)言內(nèi)部運(yùn)行的核心。JAVA開(kāi)發(fā)基本術(shù)語(yǔ)JavaProgrammerJava程序員JavaDeveloperJava開(kāi)發(fā)人員JavaWebDeveloperweb開(kāi)發(fā)人員J2EEArchitectJ2EE架構(gòu)師Java職業(yè)的分工Java語(yǔ)言特點(diǎn)1、簡(jiǎn)單性: Java語(yǔ)言類似于C/C++,可以說(shuō)Java語(yǔ)言是C++語(yǔ)言的一個(gè)純凈的版本,在java語(yǔ)言中沒(méi)有頭文件,指針,運(yùn)算符重載等2、面向?qū)ο? C面向過(guò)程 C++面向過(guò)程+面向?qū)ο? Java純面向?qū)ο蟮恼Z(yǔ)言,3、分布式: Java有一個(gè)擴(kuò)展的例程庫(kù),用于處理Http/Ftp之類的Tcp|Ip協(xié)議。 Java語(yǔ)言能通過(guò)url打開(kāi)的訪問(wèn)網(wǎng)絡(luò)上的對(duì)象,其便利的程序如同本地訪問(wèn).Java語(yǔ)言特點(diǎn)4、健壯性: java投入了大量的精力進(jìn)行早期的問(wèn)題檢測(cè),后期的動(dòng)態(tài)檢測(cè),并消除了有出錯(cuò)傾向的狀態(tài),java和c++最大的不同在于java采用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能性.5、安全性: java適用于網(wǎng)絡(luò)/分布式環(huán)境,為了達(dá)到這個(gè)目標(biāo),在安全方面投了大量的精力,使用java可以構(gòu)建防病毒。禁止運(yùn)行時(shí)堆棧溢出,禁止自己內(nèi)存空間,未授權(quán)的讀寫文件。6、可移植性: 跨平臺(tái):JVM作用用來(lái)解釋執(zhí)行字節(jié)碼文件根據(jù)不同的平臺(tái)進(jìn)行不同的解釋執(zhí)行,從而可以達(dá)到跨平臺(tái)作用,C++生成直接可以運(yùn)行的機(jī)器碼文件。java素有“一次編譯,到處運(yùn)行”參考書(shū)籍Java認(rèn)證介紹SCJPSuncertifiedjava5programmerScjp主要偏重于對(duì)java語(yǔ)言的語(yǔ)法與及JDK的內(nèi)容.SCJDSuncertifiedjava5DeveloperSCJD相對(duì)于SCJP進(jìn)一步測(cè)試用JAVA開(kāi)發(fā)應(yīng)用程序的能力開(kāi)發(fā)工具開(kāi)發(fā)環(huán)境JDK編輯器只要是文本編輯器或unix環(huán)境下的viWindows環(huán)境可以使用功能較在的文本編輯器集成開(kāi)發(fā)環(huán)境EclipseIDENetBeans等Eclipse下載網(wǎng)站
Module1Java開(kāi)發(fā)環(huán)境介紹及編程入門
本章目標(biāo)了解高級(jí)語(yǔ)言開(kāi)發(fā)的一般步驟正確安裝及配置Java開(kāi)發(fā)和運(yùn)行環(huán)境理解JVM的運(yùn)行機(jī)制了解java語(yǔ)言的垃圾回收機(jī)制編寫并運(yùn)行第一個(gè)java代碼下載并安裝JDK1.從以下網(wǎng)站可下載JDK
根據(jù)開(kāi)發(fā)機(jī)器的不同,請(qǐng)下載相應(yīng)平臺(tái)下的JDK2.InstallJDKWindows:runtheexecutableUnix:runtheshell
JDK下載頁(yè)面Win32平臺(tái)JDK下載Linux平臺(tái)JDK下載配置Java環(huán)境變量3.設(shè)置如下三個(gè)環(huán)境變量:JAVA_HOME,CLASSPATH,PATHWindows2000/NT/XP系統(tǒng):開(kāi)始—設(shè)置—控制面板—系統(tǒng)—高級(jí)—環(huán)境變量Windows環(huán)境下的安裝配置安裝JDK軟件包設(shè)置環(huán)境變量 點(diǎn)擊我的電腦右鍵----->屬性------>高級(jí)------>環(huán)境變量------->新建 JAVA_HOME=JDK安裝目錄編輯: path=在原來(lái)的path路徑前增加JDK安裝目錄/bin 注意windows平臺(tái)中是以分號(hào)分隔測(cè)試運(yùn)行cmdjavajavacjava-version如果以上三個(gè)命令都能運(yùn)行的話,說(shuō)明安裝成功JDK安裝目錄介紹Java虛擬機(jī)(JVM)BytecodeJVMCPU提供字節(jié)碼(bytecode)的運(yùn)行環(huán)境屏蔽底層平臺(tái)的差異JVM的作用Java垃圾收集的概念Java語(yǔ)言使用new運(yùn)算符來(lái)分配內(nèi)存空間,沒(méi)有動(dòng)態(tài)內(nèi)存分配的概念。Java系統(tǒng)線程自動(dòng)處理無(wú)用內(nèi)存空間的垃圾收集Java程序員只能建議,但不能強(qiáng)制JVM去執(zhí)行垃圾收集程序,使用下面的代碼:java.lang.System.gc()java.lang.Runtime.gc()Java程序的運(yùn)行過(guò)程HelloWorldApp.javaHelloWorldApp.classjavacjava跨平臺(tái)不跨平臺(tái)第一個(gè)Java程序HelloWorld.java
publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){System.out.println(“HelloWorld!”);}}要點(diǎn)(1)一個(gè)源文件中至多只能有一個(gè)public的class源文件名必須和它中定義的public的類名相同一個(gè)文件中可以同時(shí)寫多個(gè)類,但是只能有一個(gè)公開(kāi)的類Main方法java程序的入口要點(diǎn)(2)編寫源代碼,生成.java文件編譯源代碼,生成.class文件 javacHelloWorld.java運(yùn)行該程序javaHelloWorldJvm加載字節(jié)碼文件加載代碼(類加載器) 將class字節(jié)碼文件讀入內(nèi)存,并放在數(shù)據(jù)的方法區(qū),在堆區(qū)中創(chuàng)建java.lang.Class對(duì)象,用于封裝類在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)連接 把已經(jīng)讀入內(nèi)存的類的二進(jìn)制數(shù)據(jù)合并到j(luò)vm運(yùn)行環(huán)境中去驗(yàn)證代碼(字節(jié)碼校驗(yàn)器) 保證加載類有正確的內(nèi)部結(jié)構(gòu),并與其他類協(xié)調(diào)一致辭主要有以下幾個(gè)方面:文件結(jié)構(gòu)檢查,語(yǔ)義檢查,字節(jié)碼驗(yàn)證,二進(jìn)制兼容的驗(yàn)證準(zhǔn)備 Jvm為類的靜態(tài)變量分配內(nèi)存,并調(diào)置默認(rèn)的初始值解析 Jvm把類的二進(jìn)制數(shù)據(jù)中的符號(hào)引用替換為直接引用執(zhí)行代碼(解釋器) Jvm執(zhí)行類初始化語(yǔ)句,為類靜態(tài)變量賦以初值練習(xí):Information.java1.開(kāi)發(fā)一個(gè)Java程序打印出下列信息:姓名性別年齡畢業(yè)學(xué)校戶籍Package包結(jié)構(gòu)Packagea.b.c;publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){System.out.println(“HelloWorld!”);}}將生成的字節(jié)碼文件以包結(jié)構(gòu)形式來(lái)存放,用于方便管理類文件Package必須要寫在源文件第一行,注釋除外Package包結(jié)構(gòu)帶有包結(jié)構(gòu)的程序在編譯是需要加參數(shù):Javac-d.HelloWorld.java運(yùn)行帶包結(jié)構(gòu)的程序時(shí),要指定類全名Javaa.b.c.HelloWorldImport導(dǎo)入機(jī)制Packagea.b.c;Importjava.util.*;publicclassHelloWorld{publicstaticvoidmain(Stringargs[]){System.out.println(“HelloWorld!”);System.out.println(newDate());}}生成javadoc文檔/**此種注釋存在于源代碼中時(shí),編譯時(shí)使用javadoc命令可以生成doc文檔*/用法:Javadoc-d.HelloWorld.java生成javadoc文檔@author@version標(biāo)注在javadoc中的使用使用以上標(biāo)記時(shí)要增加–author-version參數(shù)進(jìn)行注釋文檔的抽取,默認(rèn)情況下會(huì)忽略壓縮成jar文件在java中可以將生成的字節(jié)碼文件按照生成目錄的結(jié)構(gòu)壓縮成jar文件方便使用壓縮命令:Jar-cvffirst.jara解壓命令:Jar-xvffirst.jar運(yùn)行jar文件中的程序:java-classpathfirst.jara.b.c.HelloWorldJar命令參數(shù)x解壓u更新d列表v顯示壓縮過(guò)程c創(chuàng)建壓縮文件f壓縮文件名m按照清單指定的系統(tǒng)進(jìn)行壓縮命令行參數(shù)Echo.javapublicclassEcho{publicstaticvoidmain(Stringargs[]){System.out.println(args[0]);}}運(yùn)行命令:JavaEchoxubin要點(diǎn):可執(zhí)行程序必需要main方法只能public和static調(diào)換位置args可以是任意的名字args[0]代表第一個(gè)命令行參數(shù)注意:運(yùn)行時(shí)一定要有命令行參數(shù)輸入,否則會(huì)有數(shù)組下標(biāo)越界異常出現(xiàn)練習(xí)JavaAPI文檔Downloaditfrom本章總結(jié)在這一章里,我們討論了以下問(wèn)題:怎樣建立Java開(kāi)發(fā)環(huán)境Java語(yǔ)言的關(guān)鍵特性Java虛擬機(jī)(JVM)的功能Java的垃圾收集機(jī)制常用Java開(kāi)發(fā)命令和開(kāi)發(fā)工具包編寫并運(yùn)行一個(gè)Java應(yīng)用程序Module2標(biāo)示符、關(guān)鍵字和數(shù)據(jù)類型本章目標(biāo)程序注釋標(biāo)示符關(guān)鍵字基本數(shù)據(jù)類型注釋三種類型的注釋//單行注釋/* 這是一段多行注釋,它跨越了多個(gè)行
*//**這是一個(gè)文檔注釋,可以使用JDK的javadoc工具從原文件中抽取這種注釋形成程序的幫助文檔。 */使用javadoc命令建立HTML格式的程序文檔javadoc[options][packagenames][sourcefiles][@files]Java的標(biāo)示符1,什么是標(biāo)示符?在java語(yǔ)言中用來(lái)給一個(gè)類、變量或方法命名的符號(hào)2,標(biāo)示符的命名規(guī)則:以字母,“_”或“$”符號(hào)開(kāi)頭可以包含字母、“_”、“$”和數(shù)字符號(hào)大小寫敏感不能與保留關(guān)鍵字沖突沒(méi)有長(zhǎng)度限制例如:identifier_sys_var1$charuserNameuser_nameJava的標(biāo)示符(續(xù))3,命名約定:類名,接口名:每個(gè)單詞的首字母應(yīng)該大寫
classMyFirstClass
interfaceWeapon
字段、方法以及對(duì)象:第一個(gè)單詞首字母應(yīng)小寫,其他單詞首字母大寫
booleanisWomanvoidsetName(Stringname)
常量:全部用大寫字母表示。
publicfinalintGREENpublicfinalintHEAD_COUNT
Java包(Package):它們?nèi)甲帜感憽?/p>
packagejava.awt.event
Java中的關(guān)鍵字關(guān)鍵字列表:abstractbooleanbreakbytecasecatchcharclasscontinuedefaultdodoubleelseextendsenumfalsefinalfinallyfloatforifimplementsimportinstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticsuperswitchsynchronizedthisthrowthrowstransienttruetryvoidvolatilewhile
Java中truefalse不是關(guān)鍵字,而是boolean類型的字面量保留字:const,goto所有的關(guān)鍵字都是小寫,friendly,sizeof不是java的關(guān)鍵字
數(shù)據(jù)類型基本數(shù)據(jù)類型(primitivetype)byteshortintlongfloatdoublecharboolean引用數(shù)據(jù)類型(referencetype)Java的基本數(shù)據(jù)類型布爾類型-boolean一個(gè)boolean類型的變量用來(lái)表示一個(gè)或真或假的關(guān)系一個(gè)boolean類型變量的值必須是true或false二者之一
booleanisCorrect=true;文本數(shù)據(jù)類型—char和Stringchar其實(shí)就是一個(gè)無(wú)符號(hào)的16位整形,其范圍為0~65535,用來(lái)存儲(chǔ)該字符的Unicode編碼值,因?yàn)閁nicode編碼中包含漢字的編碼,所以一個(gè)char類型的變量也可以存儲(chǔ)一個(gè)漢字字符。在代碼中直接給出的一個(gè)字符值必須用單引號(hào)括起來(lái)。 charzhChar=‘中’; charenChar=‘a(chǎn)’; charucChar=‘\u0060’;對(duì)某些不方便直接書(shū)寫或直接書(shū)寫有歧義的字符,java語(yǔ)言規(guī)定用 轉(zhuǎn)義字符給出??梢园裞har類型數(shù)據(jù)當(dāng)作整數(shù)數(shù)據(jù)來(lái)操作。例如: intthree=3; charone=’1’; intfour=three+one;轉(zhuǎn)義字符Java語(yǔ)言中轉(zhuǎn)義字符都以‘\‘給出常用轉(zhuǎn)義字符列表:字符串類型----StringString是JDK中定義的一個(gè)類,不是基本數(shù)據(jù)類型一個(gè)String對(duì)象可以用來(lái)存儲(chǔ)多個(gè)字符,在程序中直接給出一個(gè)String值要用雙引號(hào)括起來(lái)StringmyName=“Blues”;可以使用+運(yùn)算符把多個(gè)String數(shù)據(jù)連接起來(lái),并且還可連接其他類型的數(shù)據(jù)例如: intcount=7; System.out.println("Counted"+count+"chars.");整形數(shù)據(jù)(byte,short,intandlong)三種形式給一個(gè)整形變量直接賦值:
十進(jìn)制、八進(jìn)制和十六進(jìn)制直接給出的值默認(rèn)是int類型。長(zhǎng)整形值應(yīng)該在數(shù)字后面跟上‘l’或‘L’標(biāo)示publicvoidtestIntType(){intia=0x55;//十六進(jìn)制
intib=011;//八進(jìn)制
bytebb=0x771;byteba=(byte)0x771;longla=1234567L;//十進(jìn)制
}整形數(shù)據(jù)在計(jì)算機(jī)內(nèi)的存儲(chǔ)方式計(jì)算機(jī)能存儲(chǔ)的值都是二進(jìn)制值,整形數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)方式分兩種情況討論:shorta=57;00000000001110011111111111000111
1,正整數(shù),存儲(chǔ)該數(shù)字的二進(jìn)制原碼。shorta=-57;2,負(fù)整數(shù),存儲(chǔ)該數(shù)字的二進(jìn)制補(bǔ)碼。inta=57;00000000000000000000000000111001inta=-57;11111111111111111111111111000111高字節(jié)位低字節(jié)位浮點(diǎn)數(shù)據(jù)類型—float和double直接在程序中書(shū)寫的浮點(diǎn)數(shù)默認(rèn)為dobule類型。float類型的數(shù)據(jù)占32位長(zhǎng)度(4Bytes)double類型的數(shù)據(jù)占64位長(zhǎng)度(8Bytes)直接表示一個(gè)float類型的值必須在數(shù)字后跟‘f’或‘F’直接表示一個(gè)double類型的值可以在數(shù)字后跟‘d’或‘D’可以用科學(xué)計(jì)數(shù)法表示,如:123.456e3或123.456E3基本數(shù)據(jù)類型的取值范圍TypeBitsBytesMinimumRangeMaximumRangeboolean81Onlytwovalues:trueorfalsebyte81-2727-1short162-215215-1char1620216-1int324-231231-1long648-263263-1float324NotneededNotneededdouble648NotneededNotneeded變量的聲明和賦值引用數(shù)據(jù)類型(referencetype)數(shù)組Array,類classe,接口interface屬于reference類型。reference類型的變量是所引用的對(duì)象的內(nèi)存地址。例子:引用數(shù)據(jù)類型(referencetype)創(chuàng)建一個(gè)類對(duì)象:MyDatemy_birth=newMyDate(22,7,1964);引用數(shù)據(jù)類型(referencetype)兩個(gè)引用變量的賦值將會(huì)產(chǎn)生如下結(jié)果: intx=7; inty=x; MyDates=newMyDate(22,7,1964); MyDatet=s; t=newMyDate(22,12,1964);兩個(gè)變量指向同一個(gè)對(duì)象:對(duì)象氣球引用對(duì)象對(duì)象引用對(duì)象對(duì)象就像一個(gè)充滿氫氣的氣球,我們沒(méi)有辦法直接去得到它,要想對(duì)它的使用都必須通過(guò)一根連著它的繩子來(lái)訪問(wèn),這根繩子就是對(duì)象的引用。一根繩子同時(shí)只能連著一個(gè)氣球,就像一個(gè)引用同時(shí)只能指向一個(gè)對(duì)象;可以用多根繩子同時(shí)連接一個(gè)氣球,也就是可以有多個(gè)引用同時(shí)指向同一個(gè)對(duì)象;如果某個(gè)氣球沒(méi)有任何繩子連著它,那它就會(huì)飛走,同樣,某個(gè)對(duì)象如果沒(méi)有引用連接它,它就會(huì)成為垃圾,等著被java的垃圾收集器回收;如果某根繩子沒(méi)有連接任何氣球,那么它就是一個(gè)空引用,對(duì)它的訪問(wèn)沒(méi)有意義。同樣,某個(gè)引用如果沒(méi)有指向?qū)ο?,那么?duì)它的訪問(wèn)將會(huì)拋出NullPointerException引用null本章總結(jié)
在這一章中,我們討論了以下問(wèn)題:不同類型的注釋標(biāo)示符和關(guān)鍵字基本數(shù)據(jù)類型引用類型對(duì)象的概念練習(xí)1,寫一個(gè)程序,要求定義出boolean,int,char,double,float,String
類型的變量并賦初值,然后將這些值輸出出來(lái)。2,程序中定義有如下語(yǔ)句,畫(huà)出這些整形值在內(nèi)存空間中的存儲(chǔ)狀態(tài)。
inta=74;intb=-132;intc=0x2B8F;3,下列哪些賦值語(yǔ)句是錯(cuò)誤的:
(1)byteb=0x175;(2)inti=0x27f;(3)charc=123;(4)inta=‘真’;(5)floatf=12.345E2;(6)booleanf=0;練習(xí)
4,判斷下列語(yǔ)句中的a和b的值是否相等:
(1)inta=0;intb=‘0’;(2)inta=0;charb=‘\u0000’;(3)inta=123;charb=‘\u007B’;(4)inta=0x123;charb=123;(5)inta=3+‘5’;charb=’8’;(6)inta=‘3’+’5’;charb=‘8’;(7)chara=‘\u0000’;charb=‘0’;Module3表達(dá)式及流程控制語(yǔ)句本章目標(biāo)Java的運(yùn)算符基本數(shù)據(jù)類型的賦值布爾表達(dá)式選擇結(jié)構(gòu)(ifelse,switch)循環(huán)結(jié)構(gòu)(while,do…while,for)使用continue和break進(jìn)行循環(huán)控制常用運(yùn)算符列表序號(hào)描述運(yùn)算符結(jié)合性1括號(hào)和引用()[]。左右2單目運(yùn)算符++--!~右左3算術(shù)運(yùn)算符*/%+-左右4關(guān)系運(yùn)算符>>=<<===!=左右5邏輯運(yùn)算符&&||&|左右6位運(yùn)算符<<>>>>>&|^左右7條件運(yùn)算符?:/8賦值運(yùn)算符=+=-=*=/=%=>>=>>>=<<=&=|=^=右左算術(shù)運(yùn)算符說(shuō)明:Java對(duì)“+”運(yùn)算符進(jìn)行了擴(kuò)展,使它能夠進(jìn)行字符串的連接,如“abc”+“de”,得到串“abcde”++i,--i在使用i前,先使i的值改變i++,i--在使用i后,再改變i的值 關(guān)系運(yùn)算符說(shuō)明:Java中,任何數(shù)據(jù)類型的數(shù)據(jù)(包括基本類型和引用類型)都可以通過(guò)==或!=來(lái)比較是否相等(這與C、C++不同)。關(guān)系運(yùn)算的結(jié)果返回true或false,而不是C、C++中的1或0。
布爾邏輯運(yùn)算符
邏輯運(yùn)算符 AND(&&)、OR(||)以及NOT(!)能生成一個(gè)布爾值(true或false)說(shuō)明:只可將AND,OR或NOT應(yīng)用于布爾值。不可將一個(gè)非布爾值當(dāng)作布爾值在邏輯表達(dá)式中使用例如:以下是非法的。 inti=1,j=2; i&&j i||j !i布爾邏輯運(yùn)算符說(shuō)明:對(duì)浮點(diǎn)數(shù)字的比較是非常嚴(yán)格的。短路運(yùn)算:1、a&&b&&c2、a||b||c3、x=y=1a=5,b=3,c=2,d=1(x=a<b)&&(y=c<d)x,y=?位運(yùn)算符運(yùn)算符用法描述~~op按位取反&op1&op2按位與|op1|op2按位或^op1^op2按位異或>>op1>>op2op1右移op2位<<op1<<op2op1左移op2位>>>op1>>>op2op1無(wú)符號(hào)右移op2位位運(yùn)算符(~,&,|,^)位運(yùn)算符(>>,>>>,<<)說(shuō)明: >>:將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位,移到右端的低位被舍棄,最高位則移入原來(lái)高位的值例如:a=00110111,則a>>2=00001101 b=11010011,則b>>2=11110100 右移一位相當(dāng)于除2取商 例如:128>>1returns128/2=64 256>>4returns256/16=16 -256>>4returns-256/16=-16>>>:一個(gè)數(shù)的各二進(jìn)制位無(wú)符號(hào)右移若干位,與運(yùn)算符>>相同,移出的低位被舍棄,但不同的是最高位都補(bǔ)0。如:a=00110111,則a>>>2=00001101 b=11010011,則b>>>2=00110100位運(yùn)算符說(shuō)明: <<:用來(lái)將一個(gè)數(shù)的各二進(jìn)位全部左移若干位。高位左移后溢出舍棄,低位補(bǔ)0。 例如: a=00001111,則a<<2=00111100。 在不產(chǎn)生溢出的情況下,左移一位相當(dāng)于乘2 128<<1returns128*2=256 16<<2returns16*2*2=64類型轉(zhuǎn)換基本數(shù)據(jù)類型和引用類型的數(shù)據(jù)都可以轉(zhuǎn)換類型,但這種轉(zhuǎn)換是有限制的類型轉(zhuǎn)換分為兩種:自動(dòng)類型轉(zhuǎn)換(隱含轉(zhuǎn)換)和強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換)隱含類型轉(zhuǎn)換發(fā)生在把一個(gè)子類型賦給一個(gè)超類型時(shí)顯式類型轉(zhuǎn)換有一定的限制基本數(shù)據(jù)類型轉(zhuǎn)換序列charbyteshortintdoublefloatlong說(shuō)明:1,在本圖中,順著箭頭方向的類型轉(zhuǎn)換可以自動(dòng)進(jìn)行,逆箭頭方向的轉(zhuǎn)換或無(wú)箭頭類型之間的轉(zhuǎn)換必須強(qiáng)制轉(zhuǎn)換。2,能將A類型變量自動(dòng)轉(zhuǎn)換成B類型變量的前提條件是這種轉(zhuǎn)換不會(huì)造成數(shù)據(jù)和精度的丟失,即A類型的取值范圍是B類型的取值范圍的子集。類型轉(zhuǎn)換的例子流程控制語(yǔ)句1分支語(yǔ)句:if-else,switch-case2循環(huán)語(yǔ)句:for,while,do-while3循環(huán)跳轉(zhuǎn)語(yǔ)句:break,continue,label:選擇結(jié)構(gòu)—ifelseif(booleanexpression){codeblock1}else{codeblock2}if(booleanexpression){codeblock}if(booleanexpression1){codeblock1}elseif(booleanexpression2){codeblock2}else{codeblock3}ifelse的語(yǔ)法結(jié)構(gòu)1,基本結(jié)構(gòu)2,省略else分支3,多層嵌套選擇結(jié)構(gòu)—switchcaseswitchcase實(shí)現(xiàn)多分支選擇結(jié)構(gòu)的語(yǔ)句: switch(expression){
case整數(shù)值1:語(yǔ)句;break;
case整數(shù)值2:語(yǔ)句;break;
case整數(shù)值3:語(yǔ)句;break;
case整數(shù)值4:語(yǔ)句;break;
case整數(shù)值5:語(yǔ)句;break;
//..
default:語(yǔ)句;
}switchcase說(shuō)明說(shuō)明: 1.表達(dá)式expression可以是以下四種基本數(shù)據(jù)類型和枚舉 類型(byte,short,int,char) 2.case子句中的值必須是常量,而且所有case子句中的值應(yīng)是不同的。 3.case通常與break語(yǔ)句聯(lián)用,以保證多路分支的正確實(shí)現(xiàn),多個(gè)case可以公用一組執(zhí)行語(yǔ)句。switchcase應(yīng)用例題:根據(jù)考試成績(jī)的等級(jí)打印出百分制分?jǐn)?shù)段。publicclassGradeLevel{publicstaticvoidmain(Stringargs[]){System.out.println("\n****firstsituation****"); chargrade='C';//normaluse switch(grade){ case'A': System.out.println(grade+"is85~100");break; case'B': System.out.println(grade+"is70~84");break; case'C': System.out.println(grade+"is60~69");break;case'D': System.out.println(grade+"is<60");break;default:System.out.println("inputerror"); }}for循環(huán)格式 for(初始表達(dá)式;布爾表達(dá)式;步進(jìn)) {
循環(huán)體語(yǔ)句塊 }說(shuō)明:無(wú)論初始表達(dá)式,布爾表達(dá)式,還是步進(jìn),都可以置空。初始表達(dá)式在整個(gè)循環(huán)過(guò)程中只執(zhí)行一次。
for(inti=0,j=1;i<10&&j!=11;i++,j++) /*bodyofforloop*/;while循環(huán)格式:
while(布爾表達(dá)式){循環(huán)體語(yǔ)句塊}
例子:dowhile循環(huán)格式:do{
循環(huán)語(yǔ)句}while(布爾表達(dá)式);例子:break不帶標(biāo)號(hào)的break語(yǔ)句,跳出它所在的循環(huán)語(yǔ)句或switch語(yǔ)句,并從緊跟該循環(huán)語(yǔ)句或switch語(yǔ)句后的第一條語(yǔ)句處執(zhí)行intn=13;booleanflag=true;for(inti=2;i<=n/2;i++){if(n%i==0){flag=false;break;}}System.out.println(n+(flag?”is”:”isnot”)+”aprimenumber”);帶標(biāo)號(hào)的break語(yǔ)句: 對(duì)Java來(lái)說(shuō),唯一用到標(biāo)簽的地方是在循環(huán)語(yǔ)句之前 如:label1:循環(huán)語(yǔ)句跳出標(biāo)號(hào)所指定的塊,并從緊跟該塊后的第一條語(yǔ)句處執(zhí)行帶標(biāo)號(hào)的breakcontinue不帶標(biāo)號(hào)的continue語(yǔ)句,用來(lái)結(jié)束本次循環(huán),跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行終止條件的判斷,以決定是否繼續(xù)循環(huán)帶標(biāo)號(hào)的continue語(yǔ)句跳轉(zhuǎn)到標(biāo)號(hào)指明的外層循環(huán)中。本章總結(jié)在這一章里,我們討論了以下問(wèn)題:實(shí)例變量和局部變量實(shí)例變量的初始化Java語(yǔ)言的運(yùn)算符基本數(shù)據(jù)類型和引用類型使用if,switch,for,while,do,breakandcontinue來(lái)控制程序的流程練習(xí)1.編寫程序,判斷給定的某個(gè)年份是否是閏年。閏年的判斷規(guī)則如下:(1)若某個(gè)年份能被4整除但不能被100整除,則是閏年。(2)若某個(gè)年份能被400整除,則也是閏年。2.給定一個(gè)百分制的分?jǐn)?shù),輸出相應(yīng)的等級(jí)。90分以上A級(jí)80~89B級(jí)70~79C級(jí)60~69D級(jí)60分以下E級(jí)3.編寫程序求1+3+5+7+……+99的和值。練習(xí)練習(xí)一:利用for循環(huán)打印9*9表?1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
練習(xí):練習(xí)二:求500以內(nèi)的完備數(shù)?(提示:完備數(shù)就是所有約數(shù)和等于本身的數(shù)6=1+2+3)練習(xí)三:從命令行接受一個(gè)參數(shù)年份,計(jì)算此年份是否為閏年?練習(xí)四:輸出所有的水仙花數(shù),把謂水仙花數(shù)是指一個(gè)數(shù)3位數(shù),其各各位數(shù)字立方和等于基本身,例如:153=1*1*1+3*3*3+5*5*5練習(xí)練習(xí)六:求a+aa+aaa+.......+aaaaaaaaa=?其中a為1至9之中的一個(gè)數(shù),項(xiàng)數(shù)也可以指定?
練習(xí)七:求2/1+3/2+5/3+8/5+13/8.....前20項(xiàng)之和?
練習(xí)練習(xí)八:利用程序輸出如下圖形:*************************Module4:數(shù)組本章目標(biāo)聲明并建立一個(gè)基本類型的數(shù)組和引用類型的數(shù)組為什么數(shù)組在使用前必須初始化定義并初始化一個(gè)數(shù)組正確使用數(shù)組中的元素創(chuàng)建一個(gè)多維數(shù)組(存放數(shù)組的數(shù)組)聲明數(shù)組相同的數(shù)據(jù)類型元素類型按一定的順序排列就構(gòu)成了數(shù)組數(shù)組元素可以為:基本數(shù)據(jù)類型某一類的對(duì)象(引用類型)建立java數(shù)組需要以下三個(gè)步驟:聲明數(shù)組創(chuàng)建數(shù)組空間初始化數(shù)組元素創(chuàng)建數(shù)組聲明數(shù)組的語(yǔ)法格式有兩種如下:數(shù)組元素類型
數(shù)組名[];數(shù)組元素類型[]
數(shù)組名;例如:chars[];Pointp[]; 或:char[]s;Point[]p;數(shù)組實(shí)例化說(shuō)明: 為數(shù)組開(kāi)辟內(nèi)存空間,在創(chuàng)建數(shù)組空間時(shí)必須為它指明數(shù)組的長(zhǎng)度。 一個(gè)數(shù)組是一個(gè)對(duì)象,所以用new來(lái)創(chuàng)建數(shù)組 語(yǔ)法格式為:
數(shù)組名=new數(shù)組元素類型[數(shù)組元素的個(gè)數(shù)]; 例如: int[]MyIntArray; MyIntArray=newint[10];
數(shù)組實(shí)例化說(shuō)明: 也可以在創(chuàng)建數(shù)組空間的時(shí)候,同時(shí)將初值給出來(lái) 例如:
int[]MyIntArray={1,2,3,4,5,6,7,8,9};
存儲(chǔ)空間的分配等價(jià)于使用new 基本數(shù)據(jù)類型的數(shù)組元素系統(tǒng)會(huì)自動(dòng)初始化為默認(rèn)值(對(duì)于數(shù)值,默認(rèn)值就是零;對(duì)于char,它是空白字符;而對(duì)于boolean,它卻是false)。
數(shù)組名是對(duì)數(shù)組對(duì)象的一個(gè)引用。創(chuàng)建一個(gè)基本數(shù)據(jù)類型的數(shù)組創(chuàng)建一個(gè)基本數(shù)據(jù)類型元素的數(shù)組:publicchar[]createArray(){char[]s;s=newchar[26];for(inti=0;i<s.length;i++){s[i]=(char)(‘A’+i);}returns;}創(chuàng)建一個(gè)對(duì)象數(shù)組創(chuàng)建一個(gè)對(duì)象數(shù)組:publicPoint[]createArray(){Point[]p;p=newPoint[10];for(inti=0;i<p.length;i++){p[i]=newPoint(i,i+1);}returnp;}多維數(shù)組1.定義方式:type維數(shù)arrayName; 例如:int[][]intArray;int[][][]a2;2.分配內(nèi)存空間: 有兩種方法:直接為每一維分配空間,如int[][]a=newint[2][3];inttwoDim[][]=newint[][4];//error分別為每一維分配空間如:int[][]a=newint[2][]; a[0]=newint[3]; a[1]=newint[3];可以為每行設(shè)置為空間大小不同的數(shù)組。如:a[0]=newint[3]; a[1]=newint[5];多維數(shù)組說(shuō)明說(shuō)明:Java中多維數(shù)組被看作數(shù)組的數(shù)組。例如二維數(shù)組為一個(gè)特殊的一維數(shù)組,其每個(gè)元素又是一個(gè)一維數(shù)組。3.初始化有兩種方式:先定義數(shù)組,分配空間,然后直接對(duì)每個(gè)元素進(jìn)行賦值在定義數(shù)組的同時(shí)進(jìn)行初始化。如:inta[][]={{2,3},{1,5},{3,4}};數(shù)組的拷貝使用System.arraycopy()方法://originalarrayintelements[]={1,2,3,4,5,6};//newlargerarrayinthold[]={10,9,8,7,6,5,4,3,2,1};//copyalloftheelementsarraytothehold//array,startingwiththe0thindexSystem.arraycopy(elements,0,hold,0,elements.length);本章總結(jié)在這一章里,我們討論了以下問(wèn)題:如何聲明并建立一個(gè)基本數(shù)據(jù)類型的數(shù)組和引用類型的數(shù)組為什么數(shù)組在使用前必須實(shí)例化怎樣定義并初始化數(shù)組怎樣知道數(shù)組的元素個(gè)數(shù)怎樣建立一個(gè)多維數(shù)組練習(xí)1.定義一個(gè)int型的一維數(shù)組,包含10個(gè)元素,分別賦一些隨機(jī)整數(shù),然后求出所有元素的最大值,最小值,平均值,和值,并輸出出來(lái)。2.定義一個(gè)int型的一維數(shù)組,包含10個(gè)元素,分別賦值為1~10,然后將數(shù)組中的元素都向前移一個(gè)位置,即,a[0]=a[1],a[1]=a[2],…最后一個(gè)元素的值是原來(lái)第一個(gè)元素的值,然后輸出這個(gè)數(shù)組。3.定義一個(gè)int型的一維數(shù)組,包含40個(gè)元素,用來(lái)存儲(chǔ)每個(gè)學(xué)員的成績(jī),循環(huán)產(chǎn)生40個(gè)
0~100之間的隨機(jī)整數(shù),將它們存儲(chǔ)到一維數(shù)組中,然后統(tǒng)計(jì)成績(jī)低于平均分的學(xué)員的人數(shù),并輸出出來(lái)。4.(選做)承上題,將這40個(gè)成績(jī)按照從高到低的順序輸出出來(lái)。5,(選做)編寫程序,將一個(gè)數(shù)組中的元素倒排過(guò)來(lái)。例如原數(shù)組為1,2,3,4,5;則倒排后數(shù)組中的值為5,4,3,2,1。練習(xí)6,要求定義一個(gè)int型數(shù)組a,包含100個(gè)元素,保存100個(gè)隨機(jī)的4位數(shù)。再定義一個(gè)
int型數(shù)組b,包含10個(gè)元素。統(tǒng)計(jì)a數(shù)組中的元素對(duì)10求余等于0的個(gè)數(shù),保存到b[0]中;對(duì)10求余等于1的個(gè)數(shù),保存到b[1]中,……依此類推。7,定義一個(gè)20*5的二維數(shù)組,用來(lái)存儲(chǔ)某班級(jí)20位學(xué)員的5門課的成績(jī);這5門課按存儲(chǔ)順序依次為:coreC++,coreJava,Servlet,JSP和EJB。(1)循環(huán)給二維數(shù)組的每一個(gè)元素賦0~100之間的隨機(jī)整數(shù)。(2)按照列表的方式輸出這些學(xué)員的每門課程的成績(jī)。(3)要求編寫程序求每個(gè)學(xué)員的總分,將其保留在另外一個(gè)一維數(shù)組中。(4)要求編寫程序求所有學(xué)員的某門課程的平均分。8,完成九宮格程序?9,求一個(gè)3*3矩陣對(duì)角線元素之和10,打印楊輝三角Module5:模塊化的程序設(shè)計(jì)----方法的調(diào)用方法的概念方法輸入輸出當(dāng)我們要建一棟大樓,我們不需要把一磚一瓦的建立過(guò)程全部寫在一個(gè)程序代碼塊里,我們可以把建大樓的工作劃分成若干個(gè)功能模塊,讓每一個(gè)模塊完成一部分功能,這樣方便我們對(duì)程序的管理和維護(hù),比如:打地基的方法,建主體的方法,裝修的方法等等。而在我們的主題程序中只需要對(duì)他們?nèi)ヒ来握{(diào)用就可以完成整個(gè)建大樓的工作主方法方法A方法B模塊化的程序設(shè)計(jì)過(guò)程實(shí)際上就是方法之間相互調(diào)用的過(guò)程模塊化的思想:把一個(gè)大的問(wèn)題細(xì)分為若干個(gè)小的問(wèn)題方法:完成某一具體功能的封裝的程序模塊方法的定義<修飾符><返回值><方法名>([<參數(shù)列表>])[throws<聲明拋出異常類型>]{<方法體語(yǔ)句塊>}publicvoidsetName(Stringname)throwsIllegalNameException{…}publicStringgetName(){…}如果一個(gè)方法沒(méi)有明確的返回值,那么它的返回值類型必須定義為void構(gòu)造方法沒(méi)有返回值,也不能寫void模塊化程序設(shè)計(jì)—方法的調(diào)用方法調(diào)用的基本步驟:1,為被調(diào)用方法分配臨時(shí)存儲(chǔ)空間。2,將實(shí)參的值復(fù)制一份傳給形參。3,程序流程跳到被調(diào)用方法中執(zhí)行。4,被調(diào)用方法執(zhí)行完成或遇到return語(yǔ)句,則程序流程跳回主方法,同時(shí)被調(diào)用方法的臨時(shí)存儲(chǔ)空間被回收。publicclassMethodInvoke{publicstaticvoidmain(String[]args){intage=21;addAge(age);System.out.println(“age=“+age);}publicstaticvoidaddAge(inta){a++;System.out.println(“a=“+a);}}方法的調(diào)用(圖解)main()方法addAge()方法age21step1:為被調(diào)用方法分配臨時(shí)存儲(chǔ)空間a21step2:將實(shí)參的值復(fù)制一份傳給形參step3:程序流程跳到被調(diào)用方法中執(zhí)行step4:被調(diào)用方法執(zhí)行完成或遇到return語(yǔ)句,則程序流程跳回主方法,同時(shí)被調(diào)用方法的臨時(shí)存儲(chǔ)空間被回收22F:\>javaMethodInvokea=22age=21練習(xí)1,寫一個(gè)方法,求1+3+5+7+…的前n項(xiàng)的和,n通過(guò)方法參數(shù)給定,和值通過(guò)方法返回值返回。2,寫一個(gè)方法判斷給定的年份是否是閏年。3,寫一個(gè)方法,用來(lái)求一個(gè)整形數(shù)組中的最大元素,方法需要一個(gè)int[]類型的參數(shù),返回一個(gè)整形值。4,寫一個(gè)方法用來(lái)判斷一個(gè)整數(shù)是否是素?cái)?shù),如果是則返回true,否則返回false,
在主方法中調(diào)用這個(gè)方法,驗(yàn)證其是否正確。5,寫一個(gè)方法用來(lái)生成一個(gè)整形數(shù)組,該方法返回一個(gè)int[]類型,需要一個(gè)int
型參數(shù),數(shù)組的大小由傳進(jìn)來(lái)的參數(shù)決定。6,要求將第4章練習(xí)7的(1)~(4)步分別用方法實(shí)現(xiàn)。Module6:類和對(duì)象本章目標(biāo)面向?qū)ο缶幊痰幕靖拍睿悍庋b、繼承和多態(tài)private和public修飾符對(duì)象的創(chuàng)建和初始化方法的調(diào)用方法的重載和覆蓋this和super關(guān)鍵字理解Java語(yǔ)言中的下列概念:package、import、class、membermethod、field、constructor、override/overload、superclass面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο笾饕槍?duì)面向過(guò)程。面向過(guò)程的基本單元是函數(shù)。什么是對(duì)象:EVERYTHINGISOBJECT(萬(wàn)物皆對(duì)象)面向?qū)ο蟮挠^點(diǎn):一切皆對(duì)象所有的事物都有兩個(gè)方面:有什么(屬性):用來(lái)描述對(duì)象。能夠做什么(方法):告訴外界對(duì)象有那些功能。什么是類類(Class)—抽象的數(shù)據(jù)類型,用來(lái)描述某一類具有相同特性的對(duì)象。類是一種復(fù)雜的數(shù)據(jù)類型,它是將不同類型的數(shù)據(jù)和與這些數(shù)據(jù)相關(guān)的操作封裝在一起的集合體。這有點(diǎn)像C語(yǔ)言中的結(jié)構(gòu),唯一不同的就是結(jié)構(gòu)沒(méi)有定義所說(shuō)的“數(shù)據(jù)相關(guān)的操作”,“數(shù)據(jù)相關(guān)的操作”就是我們平常經(jīng)??吹降摹胺椒ā保虼?,類具有更高的抽象性,類中的數(shù)據(jù)具有隱藏性,類還具有封裝性面向?qū)ο蟮膬?yōu)點(diǎn)首先,面向?qū)ο蠓先祟惪创挛锏囊话阋?guī)律。對(duì)象的方法的實(shí)現(xiàn)細(xì)節(jié)是屏蔽的,只有對(duì)象方法的實(shí)現(xiàn)者了解細(xì)節(jié)。注意區(qū)分:對(duì)象(本身)、對(duì)象的實(shí)現(xiàn)者、對(duì)象的調(diào)用者。分析對(duì)象主要從方法開(kāi)始。我們通過(guò)類來(lái)看待對(duì)象,類是對(duì)象的抽象。面向?qū)ο蟮膬?yōu)點(diǎn)其次,采用面向?qū)ο蠓椒梢允瓜到y(tǒng)各部分各司其職、各盡所能。對(duì)象之間的耦合性一定要低(比如不同硬盤和不同主板之間的關(guān)系)。這樣才能使每個(gè)對(duì)象本身做成最好的。對(duì)于對(duì)象的要求:高內(nèi)聚、低耦合,這樣容易拼裝成為一個(gè)系統(tǒng)。實(shí)現(xiàn)高內(nèi)聚就是要最大限度低提高復(fù)用性(復(fù)用性好是因?yàn)楦邇?nèi)聚)??蓮?fù)用性是OOP的基礎(chǔ)。 對(duì)象的功能越簡(jiǎn)單,復(fù)用性就越好。(對(duì)象的耦合性弱,復(fù)用性就比較強(qiáng))可擴(kuò)展性系統(tǒng)的可插入性,是在系統(tǒng)中加入新的對(duì)象之后的系統(tǒng)穩(wěn)定性。對(duì)象的可替換性,是在系統(tǒng)中替換原有的對(duì)象之后的系統(tǒng)的穩(wěn)定性。面向?qū)ο笈c面象過(guò)程區(qū)別比較面向過(guò)程的思想和面向?qū)ο蟮乃枷耄好嫦蜻^(guò)程的思想:Algorithms+DataStructor=Programs面向過(guò)程是先有算法,后有數(shù)據(jù)結(jié)構(gòu)。由過(guò)程、步驟、函數(shù)組成,以過(guò)程為核心;面向?qū)ο蟮乃枷耄阂詫?duì)象為中心,先開(kāi)發(fā)類,得到對(duì)象,通過(guò)對(duì)象之間相互通信實(shí)現(xiàn)功能oop關(guān)鍵是讓每一個(gè)對(duì)象負(fù)責(zé)執(zhí)行一組相關(guān)的任務(wù).面向?qū)ο笫窍扔袛?shù)據(jù)結(jié)構(gòu),然后再有算法。定義類publicclassAnimal{Stringname;//屬性
intage;//屬性
publicAnimal(Stringname,intage){//構(gòu)造方法
=name;this.age=age;}publicvoideat(){//方法
System.out.println(name+”eating!!”);}}[修飾符]class類名[extends父類名][implements接口1[,接口2…]]{
類的定義主體}創(chuàng)建一個(gè)對(duì)象(實(shí)例)為對(duì)象分配存儲(chǔ)空間為成員變量賦初始值調(diào)用構(gòu)造方法構(gòu)造方法方法名跟類名相同沒(méi)有返回值類型publicclassXyz{//membervariablesgotherepublicXyz(){//setuptheobject.}
publicXyz(intx){//setuptheobjectwithaparameter}}
封裝Encapsulation隱藏實(shí)現(xiàn)細(xì)節(jié)為所有用戶提供統(tǒng)一界面增強(qiáng)可維護(hù)性封裝Encapsulation封裝:一個(gè)對(duì)象的不能直接訪問(wèn)另一個(gè)對(duì)象內(nèi)部的成員,其它對(duì)象的也不能直接訪問(wèn)本類的私有成員.a.把數(shù)據(jù)和行為結(jié)合在一個(gè)包中,并對(duì)對(duì)象的使用者隱藏?cái)?shù)據(jù)的實(shí)現(xiàn)過(guò)程。對(duì)象中的數(shù)據(jù)稱為對(duì)象的實(shí)例字段(instancefield),操作數(shù)據(jù)的函數(shù)和過(guò)程稱為對(duì)象的方法(method)。一個(gè)特定對(duì)象就是類在實(shí)例字段上有著特定值的某個(gè)實(shí)例。b.實(shí)現(xiàn)封裝的關(guān)鍵在于絕不讓方法直接訪問(wèn)其他類的實(shí)例字段。數(shù)據(jù)的隱藏publicclassStudent{privateStringname;privateStringgender;privateintage;publicStudent(){}…}this關(guān)鍵字this指向當(dāng)前類或?qū)ο髉ublicclassStudent{privateStringname;privateStringgender;privateintage;……
publicvoidsetName(Stringname){=name;}publicStringgetName(){returnname;}
publicvoidsetGender(Stringgender){this.gender=gender;}publicStringgetGender(){returngender;}
publicvoidsetAge(intage){this.age=age;}publicintgetAge(){returnage;}……}參數(shù)傳遞基本數(shù)據(jù)類型的參數(shù)按值傳遞引用類型的參數(shù)按引用傳遞方法的調(diào)用----引用傳遞publicclassMethodInvoke2{publicstaticvoidmain(String[]args){Animala1=newAnimal(“xiaoqiang”,4);addAge(a1);System.out.println(a1.age);}publicstaticvoidaddAge(Animala){a.age++;}}main()addAge()nameage0x1a2d3c4fa10x1a2d3c4f4a1a方法的重載overloading方法名相同參數(shù)類型一定不同返回值可以相同也可以不同構(gòu)造方法的重載Calltothis(…)mustbethefirststatementinconstructor默認(rèn)的構(gòu)造方法每個(gè)類都有構(gòu)造方法。如果程序員在定義類時(shí)沒(méi)有定義構(gòu)造方法的話,Java將自動(dòng)為該類添加一個(gè)公開(kāi)的空參空實(shí)現(xiàn)的構(gòu)造方法。如:publicAnimal(){}練習(xí)練習(xí)一:寫個(gè)學(xué)生類有屬性nameageschoolNameclassRoom進(jìn)行完全封裝!練習(xí)二:寫個(gè)數(shù)學(xué)類MyMath內(nèi)有支持各種數(shù)據(jù)類型的相加相減操作繼承Inheritance是“isa”的關(guān)系聲明的形式publicclassManagerextendsEmployee{…}Java是一個(gè)單一繼承的語(yǔ)言----一個(gè)類只有一個(gè)直接父類,如果沒(méi)有聲明父類,則默認(rèn)的父類為java.lang.Object繼承Inheritance構(gòu)造方法不能被繼承方法和屬性可以被繼承子類的構(gòu)造方法隱含的調(diào)用父類的默認(rèn)構(gòu)造方法如果父類中沒(méi)有默認(rèn)的構(gòu)造方法,則應(yīng)該在子類的構(gòu)造方法的第一行明確的聲明調(diào)用父類中其他的構(gòu)造方法。如下形式: super(…)super關(guān)鍵字代表指向父類的引用
super.agesuper.addAge()代表調(diào)用父類的構(gòu)造方法
super();super(“wangcai”,8);super關(guān)鍵字的兩種用法:繼承條件創(chuàng)建對(duì)象當(dāng)構(gòu)造一個(gè)對(duì)象的時(shí)候,系統(tǒng)先構(gòu)造父類對(duì)象,再構(gòu)造子類對(duì)象。構(gòu)造一個(gè)對(duì)象的順序:(注意:構(gòu)造父類對(duì)象的時(shí)候也是這幾步)
遞歸地構(gòu)造父類對(duì)象;順序地調(diào)用本類成員屬性賦初值語(yǔ)句;本類的構(gòu)造方法。instanceof運(yùn)算符booleanoperatorTypeidentification類型轉(zhuǎn)換使用instanceof運(yùn)算符確定對(duì)象的類型子類對(duì)象可以隱含擴(kuò)展為父類型父類型必須明確聲明轉(zhuǎn)化為子類型不是所有的父類型對(duì)象都能轉(zhuǎn)化為子類型方法的覆蓋方法名相同,參數(shù)類型相同,返回值也相同訪問(wèn)權(quán)限不能更封閉拋出異常類型不能更寬泛練習(xí)某公司的雇員分為以下若干類:Employee:這是所有員工總的父類,屬性:?jiǎn)T工的姓名和生日月份。方法:getSalary(intmonth)根據(jù)參數(shù)月份來(lái)確定工資,如果該月員工過(guò)生日,則公司會(huì)額外獎(jiǎng)勵(lì)100元。SalariedEmployee:Employee的子類,拿固定工資的員工。屬性:月薪HourlyEmployee:Employee的子類,按小時(shí)拿工資的員工,每月工作超出160小時(shí)的部分按照1.5倍工資發(fā)放屬性:每小時(shí)的工資、每月工作的小時(shí)數(shù)SalesEmployee:Employee的子類,銷售人員,工資由月銷售額和提成率決定屬性:月銷售額、提成率BasePlusSalesEmployee:SalesEmployee的子類,有固定底薪的銷售人員,工資由底薪加上銷售提成部分屬性:底薪。多態(tài)polymiorphism多態(tài):多態(tài)指的是編譯時(shí)類型變化,而運(yùn)行時(shí)類型不變。多態(tài)分兩種:編譯時(shí)多態(tài):編譯時(shí)動(dòng)態(tài)重載.運(yùn)行時(shí)多態(tài):指一個(gè)對(duì)象可以具有多個(gè)類型。多態(tài)polymiorphism運(yùn)行時(shí)多態(tài)的三原則:(應(yīng)用時(shí)為覆蓋)1.對(duì)象不變;(改變的是主觀認(rèn)識(shí))2.對(duì)于對(duì)象的調(diào)用只能限于編譯時(shí)類型的方法,如調(diào)用運(yùn)行時(shí)類型方法報(bào)錯(cuò)。在上面的例子中:Animala=newDog();對(duì)象a的編譯時(shí)類型為Animal,運(yùn)行時(shí)類型為dog。注意:編譯時(shí)類型一定要為運(yùn)行時(shí)類型的父類(或者同類型)。對(duì)于語(yǔ)句:Dogd=(Dog)a。將d強(qiáng)制聲明為a類型,此時(shí)d為Dog(),此時(shí)d就可以調(diào)用運(yùn)行時(shí)類型。注意:a和d指向同一對(duì)象。3.在程序的運(yùn)行時(shí),動(dòng)態(tài)類型判定。運(yùn)行時(shí)調(diào)用運(yùn)行時(shí)類型,即它調(diào)用覆蓋后的方法??偨Y(jié)面向?qū)ο蟮幕靖拍?封裝,繼承和多態(tài)對(duì)象的建立和初始化對(duì)象的方法調(diào)用構(gòu)造方法方法的重載和覆蓋this關(guān)鍵字和super關(guān)鍵字Module7:高級(jí)語(yǔ)言特性目標(biāo)static修飾屬性和方法final修飾類,方法和變量abstract類和方法接口訪問(wèn)權(quán)限的控制Object類介紹String類介紹main()方法的參數(shù)WrapperClass靜態(tài)變量一個(gè)類只有一份,被類的所有實(shí)例共享能在沒(méi)有生成任何類的實(shí)例時(shí)就被訪問(wèn)到在某種意義上類似于全局變量直接使用類名來(lái)訪問(wèn)
靜態(tài)方法可以在沒(méi)有任何實(shí)例時(shí)調(diào)用不能在static方法內(nèi)部訪問(wèn)非static成員不能被非static方法覆蓋final關(guān)鍵字final用來(lái)修飾一個(gè)類,方法,屬性或局部變量final類不能被繼承final方法不能被覆蓋final變量的值不能被改變
abstract類和abstract方法如果一個(gè)方法沒(méi)有實(shí)現(xiàn)的代碼,那么它必須被聲明為抽象的方法。
publicabstractStringgetName();如果一個(gè)類包含有抽象方法,那么它必須被聲明為抽象類。
publicabstractclassAccount{publicabstractStringgetName();…}抽象類不能實(shí)例化----不能生成對(duì)象??梢远x一個(gè)抽象類的引用。
接口接口是一種特殊的抽象類接口中所有的方法都是抽象方法一個(gè)類可以實(shí)現(xiàn)多個(gè)接口接口中的所有屬性都會(huì)自動(dòng)聲明為finalstatic接口與接口之間可以多重繼承訪問(wèn)權(quán)限控制ModifiersInsideclassThesamepackageSubclassotherpublicYesYesYesYesprotectedYesYesYesNoDefault(nomodifier)YesYesNoNoprivateYesNoNoNoObject類的方法publicStringtoString():返回對(duì)象的字符串描述形式publicbooleanequals(Objecto):判斷兩個(gè)對(duì)象是否相等一般來(lái)說(shuō),我們會(huì)根據(jù)需要在自己寫的類中覆蓋這兩個(gè)方法,給出自己的定義。toString()方法返回描述某個(gè)對(duì)象的字符串當(dāng)直接輸出一個(gè)對(duì)象時(shí),這個(gè)方法被隱含的調(diào)用equals()方法==運(yùn)算符用來(lái)判斷兩個(gè)引用值是否相等(是否指向同一個(gè)對(duì)象)equals(Objecto)方法一般在定義類時(shí)被覆蓋(改寫),該方法用來(lái)判斷兩個(gè)對(duì)象值是否相同。傳給main()方法的參數(shù)可以通過(guò)命令行在運(yùn)行java程序時(shí)給main()方法傳遞參數(shù),這些參數(shù)是以一個(gè)字符串?dāng)?shù)組的形式來(lái)存放的,我們可以在程序中使用這些參數(shù)。publicclassMainMethodParameter{ publicstaticvoidmain(String[]args){ for(inti=0;i<args.length;i++){ System.out.println(args[i]); } }}WrapperClassPrimitiveTypeWrapperClassbooleanBooleanbyteByteshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDoubleString類StringBuffer內(nèi)部實(shí)現(xiàn)是字符數(shù)組,默認(rèn)初始化大小為16個(gè)StringBuffersb=newStringBuffer();StringBuffersb=newStringBuffer("aaa");sb.toString();//轉(zhuǎn)化為String類型sb.append("**");//追加字符串二者區(qū)別1、String類的實(shí)例一旦創(chuàng)建出來(lái)就不能再修改,各種貌似修改的方法都是返回一個(gè)包含修改結(jié)果的新的String實(shí)例。2、如果你要頻繁修改字符串或處理長(zhǎng)字符串,那就用stringbuffer,更有效率。本章總結(jié)在這一章中,我們討論了以下問(wèn)題:靜態(tài)變量和靜態(tài)方法final類,方法和變量訪問(wèn)權(quán)限的控制抽象類和抽象方法接口Object類和String類通過(guò)命令行傳參數(shù)給main()方法基本數(shù)據(jù)類型的包裝類練習(xí)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年哈44中學(xué)招聘合同制臨聘教師3人考試重點(diǎn)題庫(kù)及答案解析
- 領(lǐng)導(dǎo)介紹成長(zhǎng)史
- 中國(guó)鐵路鄭州局集團(tuán)有限公司2026大專(高職)畢業(yè)生招聘工作聲明備考筆試題庫(kù)及答案解析
- 2026河北省定向華中師范大學(xué)選調(diào)生招錄筆試重點(diǎn)試題及答案解析
- 2025甘肅嘉峪關(guān)市第三幼兒園招聘公益性崗位人員2人考試重點(diǎn)題庫(kù)及答案解析
- 2025新疆和田果業(yè)有限公司招聘考試核心試題及答案解析
- 2026云南昆明市官渡區(qū)公共就業(yè)和人才服務(wù)中心招聘1人考試核心題庫(kù)及答案解析
- 消化系統(tǒng)用藥科普
- 有效咳嗽訓(xùn)練操作流程
- 中學(xué)生消防安全知識(shí)講座
- 中考勵(lì)志講座課件
- 各部門環(huán)境因素識(shí)別評(píng)價(jià)表-塑膠公司
- 律所解除聘用協(xié)議書(shū)
- 海爾集團(tuán)預(yù)算管理實(shí)踐分析
- 永輝超市存貨管理
- 10kV環(huán)網(wǎng)柜(箱)標(biāo)準(zhǔn)化設(shè)計(jì)方案(2023版)
- 余熱發(fā)電崗前培訓(xùn)
- 變壓器性能測(cè)試的實(shí)施方案
- 科技研發(fā)項(xiàng)目管理辦法
- 重癥胰腺炎個(gè)案護(hù)理
- (2025年標(biāo)準(zhǔn))無(wú)租用車協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論