Java程序設計實戰(zhàn)案例教程教學課件匯總完整版電子講義_第1頁
Java程序設計實戰(zhàn)案例教程教學課件匯總完整版電子講義_第2頁
Java程序設計實戰(zhàn)案例教程教學課件匯總完整版電子講義_第3頁
Java程序設計實戰(zhàn)案例教程教學課件匯總完整版電子講義_第4頁
Java程序設計實戰(zhàn)案例教程教學課件匯總完整版電子講義_第5頁
已閱讀5頁,還剩487頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java平臺安裝目錄/Contents01020304Java概述JDK的安裝Eclipse安裝與使用第一個Java程序的編寫01Java概述一種高級計算機語言可編寫跨平臺應用軟件完全面向對象由SUN公司(已被Oracle公司收購)于1995年5月推出簡單易用、安全可靠應用領域廣泛Java概述JavaSE標準版(JavaPlatformStandardEdition)Java的三大技術平臺為開發(fā)普通桌面和商務應用程序提供的解決方案JavaEE企業(yè)版(JavaPlatformEnterpriseEdition)JavaME小型版(JavaPlatformMicroEdition)為開發(fā)企業(yè)級應用程序提供的解決方案為開發(fā)電子消費產品和嵌入式設備提供的解決方案Java的三大技術平臺02JDK的安裝JavaDevelopmentKit,即Java開發(fā)工具包SUN公司提供了一套Java開發(fā)環(huán)境整個Java的核心包括Java編譯器、Java運行環(huán)境、Java工具、Java基礎類庫等JDKJREJavaRuntimeEnvironment,即Java運行環(huán)境JRE通常已包含在JDK中若僅用于運行Java程序,而非Java開發(fā),可以直接下載JRE,并在系統(tǒng)中安裝即可。JDK-JRE-JVM的概念javavirtualmachine,即Java虛擬機整個java實現跨平臺的最核心的部分所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執(zhí)行。JVMJDK、JRE及JVM的關系JDK(JavaDevelopmentKit)是針對Java開發(fā)員的產品,是整個Java的核心,包括了Java運行環(huán)境JRE、Java工具和Java基礎類庫。JRE(JavaRuntimeEnvironment)是運行JAVA程序所必須的環(huán)境的集合,包含JVM標準實現及Java核心類庫。JVM(JavaVirtualMachine)是Java虛擬機的縮寫,是整個java實現跨平臺的最核心的部分,能夠運行以Java語言寫作的軟件程序。JDK的安裝Oracle公司提供了多種操作系統(tǒng)的JDK,可以根據自己使用的操作系統(tǒng),從Oracle官方網站下載相應的JDK安裝文件,具體步驟如下:雙擊從Oracle官網下載的安裝文件,進入JDK安裝界面單擊【下一步】按鈕進入JDK的自定義安裝界面在自定義安裝功能和路徑界面選擇安裝目錄,或直接采用默認的安裝目錄,單擊【確定】按鈕在對所有的安裝選項做出選擇后,單擊【下一步】按鈕開始安裝JDK。安裝完畢后會進入安裝完成界面單擊【關閉】按鈕,關閉當前窗口,完成JDK安裝12345JDK的安裝JDK安裝完畢后,會在硬盤上生成一個目錄,該目錄被稱為JDK安裝目錄。如下圖所示:03Eclipse的安裝與使用112345為了提高程序的開發(fā)效率,大部分軟件開發(fā)人員都是使用集成開發(fā)工具(IDE)來進行Java程序開發(fā)的。EclipseJava開發(fā)工具——Eclipse在實際項目開發(fā)過程中,由于使用記事本編寫代碼速度慢,且不容易排錯,所以程序員很少用它來編寫代碼。在本課程中,將使用一種Java常用的IDE集成開發(fā)環(huán)境:EclipseEclipse由IBM開發(fā),功能完整且成熟;開源、可擴展Eclipse具有強大的代碼編排功能,可以幫助程序開發(fā)人員完成語法修正、代碼修正、補全文字、信息提示等編碼工作Eclipse的安裝Eclipse是針對Java編程的集成開發(fā)環(huán)境(IDE),登錄Eclipse官網免費下載。Eclipse安裝時只需將下載好的ZIP包解壓保存到指定目錄下(例如D:\eclipse)就可以使用了。Eclipse的啟動非常簡單,直接在Eclipse安裝文件中運行eclipse.exe文件即可,接下來會出現如下圖所示的啟動界面。Eclipse的使用Eclipse啟動完成后會彈出一個對話框,提示選擇工作空間(Workspace),如下圖所示:工作空間用于保存Eclipse中創(chuàng)建的項目和相關設置。此處使用Eclipse提供的默認路徑為工作空間,也可以單擊【Browse】按鈕來更改,工作空間設置完成后,單擊【OK】按鈕即可。

注意:Eclipse每次啟動都會出現選擇工作空間的對話框,如果不想每次都選擇工作空間,可以將此圖【Usethisasthedefaultanddonotaskagain】復選框選中,這就相當于為Eclipse工具選擇了默認的工作空間,再次啟動時將不再出現提示對話框。Eclipse的使用在Eclipse歡迎界面單擊關閉歡迎界面窗口,就進入Eclipse工作臺界面,Eclipse工作臺主要由標題欄、菜單欄、工具欄、透視圖四部分組成,如下圖所示:03第一個Java程序的編寫第一個Java程序的編寫通過前面的學習,讀者對Eclipse開發(fā)工具應該有了一個基本的認識。接下來通過Eclipse創(chuàng)建一個Java程序,并實現在控制臺上打印“HelloWorld!”,具體步驟如下:新建Java項目在當前項目中新建一個包在當前包中新建一個Java類在類文件中編寫main()方法,并在方法中編寫一條輸出語句:

System.out.println(“HelloWorld”);01020304運行當前的類文件在控制臺查看結果變量與常量目錄/Contents0102030405Java代碼的基本格式Java中的關鍵字Java中的常量Java中的變量數據類型及類型轉換01Java代碼的基本格式Java代碼的基本格式Java中的程序代碼都必須放在一個類中。類需要使用class關鍵字定義,在class前面可以有一些修飾符,格式如下:注意:(1)Java中的程序代碼可分為結構定義語句和功能執(zhí)行語句,其中,結構定義語句用于聲明一個類或方法,功能執(zhí)行語句用于實現具體的功能。(2)每條功能執(zhí)行語句的最后都必須用分號(;)結束。(3)Java語言嚴格區(qū)分大小寫。Java中的標識符在編程過程中,經常需要在程序中定義一些符號來標記一些名稱,如,包名、類名、方法名、參數名、變量名等,這些符號被稱為標識符。標識符可以由任意順序的大小寫字母、數字、下劃線(_)和美元符號($)組成,但不能以數字開頭,不能是Java中的關鍵字。定義標識符時還應該遵循以下規(guī)則:1、包名所有字母一律小寫。例如:cn.itcast.test。2、類名和接口名每個單詞的首字母都要大寫。如:ArrayList、Iterator。3、常量名所有字母都大寫,單詞之間用下劃線連接。例如:DAY_OF_MONTH。4、變量名和方法名的第一個單詞首字母小寫,從第二個單詞開始每個單詞首字母大寫。例如:lineNumber、getLineNumber。5、在程序中,應該盡量使用有意義的英文單詞來定義標識符,使得程序便于閱讀。例如使用userName表示用戶名,password表示密碼。02Java中的關鍵字Java中的關鍵字關鍵字是編程語言里事先定義好并賦予了特殊含義的單詞,也稱作保留字。和其它語言一樣,Java中保留了許多關鍵字,例如,class、public等。下面列舉的是Java中所有的關鍵字。03Java中的常量Java中的常量常量就是在程序中固定不變的值,是不能改變的數據。在Java中,常量包括整型常量、浮點數常量、布爾常量、字符常量等。整型常量:整數類型的數據。例:125浮點型常量:就是在數學中用到的小數,分為float單精度浮點數和double雙精度浮點數兩種類型。例:2.36字符常量:用于表示一個字符,用一對單引號(‘’)引起來,它可以是英文字母、數字、標點符號、以及一些特殊字符。例:’k’字符串常量:用于表示一串連續(xù)的字符,一個字符串常量要用一對英文半角格式的雙引號(“”)引起來?!眐ing”布爾常量:即布爾型的兩個值true和false,用于區(qū)分真與假。例:truenull常量:只有一個值null,表示對象的引用為空。04Java中的變量Java中的變量計算機使用內存來存儲計算時所使用的數據。程序運行期間,隨時可能產生一些臨時數據,應用程序會將這些數據保存在一些內存單元中,這些內存單元我們稱之為變量。每個內存單元都用一個標識符來標識,也就是變量名;內存單元中存儲的數據就是變量的值。數據各式各樣,要先根據數據的類型為它申請一塊合適的空間Java中的變量房間房間名字房間類型入住的客人變量變量名變量類型變量值對應變量的聲明語法1

數據類型變量名;

變量名=值;

舉例: intage; age=19;語法2

數據類型變量名=值;

舉例: intage=19;變量的賦值左下圖第二行代碼的作用就是為變量賦值,在執(zhí)行第二行代碼時,程序首先取出變量x的值,與3相加后,將結果賦值給變量y,此時變量x和y在內存中的狀態(tài)發(fā)生了變化,如圖所示。05數據類型及類型轉換變量的數據類型Java是一門強類型的編程語言,它對變量的數據類型有嚴格的限定。在定義變量時必須聲明變量的類型,在為變量賦值時必須賦予和變量同一種類型的值,否則程序會報錯。變量的數據類型1、整數類型變量用來存儲整數數值,即沒有小數部分的值。整數類型分為4種不同的類型:字節(jié)型(byte)、短整型(short)、整型(int)和長整型(long)。占用空間指的是不同類型的變量分別占用的內存大小取值范圍是變量存儲的值不能超出的范圍為一個long類型的變量賦值時需要注意一點,所賦值的后面要加上一個字母“L”(或小寫“l(fā)”),說明賦值為long類型。變量的數據類型2、浮點數類型變量浮點數類型變量用來存儲小數數值。浮點數類型分為兩種:單精度浮點數(float)、雙精度浮點數(double),double型所表示的浮點數比float型更精確。在取值范圍中,E表示以10為底的指數,E后面的“+”號和“-”號代表正指數和負指數,例如1.4E-45表示1.4*10-45。在為一個float類型的變量賦值時需要注意一點,所賦值的后面一定要加上字母“F”(或“f”),而為double類型的變量賦值時,可以在所賦值的后面加上字符“D”(或“d”),也可不加。在程序中也可以為一個浮點數類型變量賦予一個整數數值.變量的數據類型3、字符類型變量用于存儲一個單一字符,在Java中用char表示。每個char類型的字符變量都會占用2個字節(jié)。賦值時,要用英文半角格式的單引號('')把字符括起來,如'a',也可以賦值為0~65535范圍內的整數,計算機會自動將這些整數轉化為所對應的字符,如數值97對應的字符為'a'。變量的數據類型4、布爾類型變量布爾類型變量用來存儲布爾值,在Java中用boolean表示,該類型的變量只有兩個值,即true和false。具體示例如下:數據的類型轉換當把一種數據類型的值賦給另一種數據類型的變量時,需要進行數據類型轉換。根據轉換方式的不同,數據類型轉換可分為兩種:自動類型轉換強制類型轉換數據的類型轉換1、自動類型轉換也叫隱式類型轉換,指的是兩種數據類型在轉換的過程中不需要顯式地進行聲明。要實現自動類型轉換,必須同時滿足兩個條件,第一是兩種數據類型彼此兼容,第二是目標類型的取值范圍大于源類型的取值范圍。數據的類型轉換1、自動類型轉換整數類型之間可以實現轉換,如byte類型的數據可以賦值給short、int、long類型的變量,short、char類型的數據可以賦值給int、long類型的變量,int類型的數據可以賦值給long類型的變量整數類型轉換為float類型,如byte、char、short、int類型的數據可以賦值給float類型的變量。其它類型轉換為double類型,如byte、char、short、int、long、float類型的數據可以賦值給double類型的變量。數據的類型轉換2、強制類型轉換強制類型轉換也叫顯式類型轉換,指的是兩種數據類型之間的轉換需要進行顯式地聲明。當兩種類型彼此不兼容,或者目標類型取值范圍小于源類型時,自動類型轉換無法進行,這時就需要進行強制類型轉換。強制類型轉換的格式如下所示:Java中的運算符目錄/Contents0102030405算數運算符賦值運算符比較運算符邏輯運算符運算符的優(yōu)先級01算術運算符算數運算符算術運算符就是用來處理四則運算的符號,這是最簡單、最常用的運算符號。算數運算符(1)在進行自增(++)和自減(--)的運算時,如果運算符放在操作數的前面則是先進行自增或自減運算,再進行其它運算。反之,如果運算符放在操作數的后面則是先進行其它運算再進行自增或自減運算。算術運算符看上去比較簡單,也很容易理解,但在實際使用時有很多需要注意的問題,具體如下:(2)在進行除法運算時,當除數和被除數都為整數時,得到的結果也是一個整數。如果除法運算有小數參與,得到的結果會是一個小數。(3)在進行取模(%)運算時,運算結果的正負取決于被模數(%左邊的數)的符號,與模數(%右邊的數)的符號無關。02賦值運算符賦值運算符賦值運算符的作用就是將常量、變量或表達式的值賦給某一個變量,表中列出了Java中的賦值運算符及用法。賦值運算符在賦值運算符的使用中,需要注意以下幾個問題:(1)在Java中可以通過一條賦值語句對多個變量進行賦值。(2)除了“=”,其它的都是特殊的賦值運算符,以“+=”為例,x+=3就相當于x=x+3,首先會進行加法運算x+3,再將運算結果賦值給變量x。-=、*=、/=、%=賦值運算符都可依此類推。03比較運算符比較運算符比較運算符用于對兩個數值或變量進行比較,其結果是一個布爾值,即true或false。比較運算符在使用時需要注意一個問題,不能將比較運算符“==”誤寫成賦值運算符“=”。04邏輯運算符邏輯運算符邏輯運算符用于對布爾型的數據進行操作,其結果仍是一個布爾型。邏輯運算符在使用邏輯運算符的過程中,需要注意以下幾個細節(jié):(1)邏輯運算符可以針對結果為布爾值的表達式進行運算。如:x>3&&y!=0。(2)運算符“&”和“&&”都表示與操作,當且僅當運算符兩邊的操作數都為true時,其結果才為true,否則結果為false。當運算符“&”和“&&”的右邊為表達式時,兩者在使用上還有一定的區(qū)別。在使用“&”進行運算時,不論左邊為true或者false,右邊的表達式都會進行運算。如果使用“&&”進行運算,當左邊為false時,右邊的表達式不會進行運算,因此“&&”被稱作短路與。(3)運算符“|”和“||”都表示或操作,當運算符兩邊的操作數任何一邊的值為true時,其結果為true,當兩邊的值都為false時,其結果才為false。同與操作類似,“||”表示短路或,當運算符“||”的左邊為true時,右邊的表達式不會進行運算。(4)運算符“^”表示異或操作,當運算符兩邊的布爾值相同時(都為true或都為false),其結果為false。當兩邊布爾值不相同時,其結果為true。05運算符的優(yōu)先級運算符的優(yōu)先級在對一些比較復雜的表達式進行運算時,要明確表達式中所有運算符參與運算的先后順序,把這種順序稱作運算符的優(yōu)先級。分支結構-1if語句目錄/Contents010203單分支if語句雙分支if…else…語句多分支if…elseif……else語句01單分支if語句單分支if語句if語句是指如果滿足某種條件,就進行某種處理,其語法格式如下所示:上述語法格式中,判斷條件是一個布爾值,當值為true時,才會執(zhí)行{}中的語句。單分支if語句if語句的執(zhí)行流程如下圖所示。02雙分支if…else……語句雙分支if…else……語句if…else語句是指如果滿足某種條件,就進行某種處理,否則就進行另一種處理,其語法格式如下所示:雙分支if…else……語句if…else語句的執(zhí)行流程如下圖所示。雙分支if…else……語句在Java中有一種特殊的運算叫做三元運算,它和if-else語句類似,語法如下:三元運算通常用于對某個變量進行賦值,當判斷條件成立時,運算結果為表達式1的值,否則結果為表達式2的值。03多分支if…elseif……else語句多分支if…elseif……else語句if…elseif…else語句用于對多個條件進行判斷,進行多種不同的處理,其語法格式如下所示:多分支if…elseif……else語句if…elseif…else語句的執(zhí)行流程如下圖所示:分支結構-2switch語句Switch條件語句switch語句也是一種很常見的選擇語句。和if條件語句不同,它只能針對某個表達式的值做出判斷,從而決定執(zhí)行哪一段代碼。使用switch關鍵字來描述一個表達式,使用case關鍵字來描述和表達式結果比較的目標值,當表達式的值和某個目標值匹配時,會執(zhí)行對應case下的語句,switch語句的基本語法見右圖:Switch條件語句例如,在程序中使用數字1~7表示周一到周日如果想根據某個輸入的數字輸出中文格式的星期值,可以通過右邊所示的代碼來實現。Switch條件語句switchcase語句有如下規(guī)則:switch語句中的變量類型可以是:byte、short、int或者char。從JavaSE7開始,switch支持字符串String類型了,同時case標簽必須為字符串常量或字面量。switch語句可以擁有多個case語句。每個case后面跟一個要比較的值和冒號。case語句中的值的數據類型必須與變量的數據類型相同,而且只能是常量。當變量的值與case語句的值相等時,那么case語句之后的語句開始執(zhí)行,直到break語句出現才會跳出switch語句。當遇到break語句時,switch語句終止。程序跳轉到switch語句后面的語句執(zhí)行。case語句不必須要包含break語句。如果沒有break語句出現,程序會繼續(xù)執(zhí)行下一條case語句,直到出現break語句。switch語句可以包含一個default分支,該分支一般是switch語句的最后一個分支(可以在任何位置,但建議在最后一個)。default在沒有case語句的值和變量值相等的時候執(zhí)行。default分支不需要break語句。循環(huán)結構-1while和do…while…語句目錄/Contents0102while循環(huán)語句do…while…語句03while與do…while…的區(qū)別01while循環(huán)語句while循環(huán)語句while語句和if條件語句有點類似,都是根據條件判斷來決定是否執(zhí)行后面的代碼,區(qū)別在于,while循環(huán)語句會反復地進行條件判斷,只要條件成立,{}內的執(zhí)行語句就會執(zhí)行,直到條件不成立,while循環(huán)結束。while循環(huán)語句的語法結構如下所示:while循環(huán)語句while循環(huán)語句的執(zhí)行流程如下圖所示。02do…while…語句do…while…循環(huán)語句do…while循環(huán)語句和while循環(huán)語句功能類似先執(zhí)行一次循環(huán)體,然后在判斷布爾表達式是不是true,如果是就繼續(xù)執(zhí)行循環(huán)體,在判斷布爾表達式,直到為false就結束循環(huán)。while循環(huán)語句的語法結構如下所示:do…while…循環(huán)語句do…while循環(huán)語句的執(zhí)行流程如下圖所示。03while與do…while…的區(qū)別while與do…while…的區(qū)別while是先判斷在執(zhí)行如果判斷不成立,就不會執(zhí)行;do…while…是先執(zhí)行再判斷,不管判斷是否成立都會執(zhí)行一次inta=8;

while(a<10){

System.out.println(“a的值為:”+a);

}System.out.println(程序結束”);輸出結果:程序結束inta=8;

do{

System.out.println(“a的值為:”+a);

}

while(a<10);System.out.println(程序結束”);輸出結果:a的值為8

程序結束循環(huán)結構-2for語句目錄/Contents0102for循環(huán)語句循環(huán)嵌套語句01for循環(huán)語句for循環(huán)語句for循環(huán)語句是最常用的循環(huán)語句,一般用在循環(huán)次數已知的情況下,其語法格式如下所示:在上述語法格式中,for后面的()中包括三部分內容,初始化表達式、循環(huán)條件和操作表達式,它們之間用“;”分隔,{}中的執(zhí)行語句為循環(huán)體for循環(huán)語句如果用①表示初始化表達式、②表示循環(huán)條件、③表示操作表達式、④表示循環(huán)體,則for循環(huán)的執(zhí)行流程如下所示:02循環(huán)嵌套語句循環(huán)嵌套語句嵌套循環(huán)是指在一個循環(huán)語句的循環(huán)體中再定義一個循環(huán)語句的語法結構。while、do…while、for循環(huán)語句都可以進行嵌套,并且它們之間也可以互相嵌套,如最常見的在for循環(huán)中嵌套for循環(huán),格式如下:循環(huán)結構-3跳轉語句目錄/Contents0102break語句continue語句02break與continue的區(qū)別01break語句break語句跳轉語句用于實現循環(huán)過程中流程的跳轉,Java中的跳轉語句有break和continue。break語句:直接跳出當前循環(huán)體(while、for、dowhile)或程序塊(switch)。其中switch…case…執(zhí)行時,一定會先進行匹配,匹配成功返回當前case的值,再根據是否有break,判斷是否繼續(xù)輸出,或是跳出判斷。一旦執(zhí)行break,整個switch語句立刻結束。用在循環(huán)語句中時,一旦執(zhí)行,整個循環(huán)結束。for

(int

i=

0;i<

5;i++){

if

(i==

2){

System.out.println(“跳出for循環(huán)");

break;

}

System.out.println(i);}System.out.println(“程序結束”);02continue語句continue語句continue語句:用在循環(huán)語句中,它的作用是終止本次循環(huán),執(zhí)行下一次循環(huán)。一旦執(zhí)行,立刻跳過當前循環(huán)剩余內容,馬上開始下一次循環(huán)。for

(int

i=

0;i<

5;i++){

if

(i==

2){

System.out.println(“跳出本次循環(huán),進行下一次循環(huán)");

continue;

}System.out.println(i);

}

System.out.println(“程序結束”);

03break與continue的區(qū)別break與continue的區(qū)別前面的例子,運行后的結果比較:在break測試中,當i==2,直接跳出了for循環(huán),不再執(zhí)行之后的循環(huán)測試continue時,當i==3,直接跳過了continue之后的輸出語句,進入下一次循環(huán)。因此,break與continue的區(qū)別如下:break是跳出來整個循環(huán),不會再執(zhí)行接下來的循環(huán)。continue至少跳過一次循環(huán),后面的循環(huán)如果滿足條件,依舊會執(zhí)行。方法情境引入需求:假設有一個游戲程序,程序在運行過程中,要不斷地發(fā)射炮彈。發(fā)射炮彈的動作需要編寫100行的代碼,在每次實現發(fā)射炮彈的地方都需要重復地編寫這100行代碼,這樣程序會變得很臃腫,可讀性也非常差。方法概述情境引入為了解決代碼重復編寫的問題,可以將發(fā)射炮彈的代碼提取出來,放在一個{}中,并為這段代碼起個名字,這樣在每次發(fā)射炮彈的地方通過這個名字來調用發(fā)射炮彈的代碼就可以了。上述過程中,所提取出來的代碼可以被看作是程序中定義的一個方法,程序在需要發(fā)射炮彈時調用該方法即可。方法概述方法的定義及格式完成特定功能的一段代碼方法:修飾符返回值類型方法名(參數類型參數名1,參數類型參數名2…){

方法體; return返回值;}格式:方法格式的解釋說明修飾符

publicstatic返回值類型

用于限定返回值的數據類型方法名

一個名稱要符合命名規(guī)則,用于調用方法參數類型

限定調用方法時傳入參數的數據類型方法格式的解釋說明參數名

一個變量名,接收調用方法時傳入的參數方法體

完成功能的代碼return

結束方法以及返回方法指定類型的值

返回值

由return帶回的結果,返回給調用者方法案例返回值類型明確功能結果的數據類型參數列表明確有幾個參數,以及參數的類型如何寫一個方法呢?兩個明確案例:求兩個整型數據之和有返回值的方法練習練習一:鍵盤錄入兩個數據,返回兩個數中的較大值練習二:鍵盤錄入兩個數據,比較兩個數是否相等有返回值的方法調用單獨調用,沒有意義輸出調用,有意義,但不推薦,因為不一定需要把結果輸出賦值調用,推薦方式方法注意事項方法不調用不執(zhí)行方法與方法是平級關系,不能嵌套定義方法定義的時候參數之間用逗號隔開方法調用的時候不用再傳遞數據類型如果方法有明確的返回值,一定要有return帶回一個值沒有返回值的方法調用沒有返回值的方法就是返回值類型為void的方法只能單獨調用返回值為void類型的方法練習練習一:鍵盤錄入行數和列數,輸出對應的星形練習二:鍵盤錄入一個數據n(1<=n<=9),輸出對應的nn乘法表方法的重載在同一個類中,允許存在一個以上的同名方法,只要它們的參數個數或者參數類型不同即可。方法重載概述方法重載方法重載方法重載特點與返回值類型無關,只看方法名和參數列表在調用時,虛擬機通過參數列表的不同來區(qū)分同名方法方法重載案例比較兩個數據是否相等。參數類型分別為兩個byte類型,兩個short類型,兩個int類型,兩個long類型,并在main方法中進行測試方法重載數組一維數組情境引入數組概述需求:現在需要統(tǒng)計某班級學生的《Java程序設計》課程成績情況,例如計算該門課程的平均成績、找到最高分等。假設該班級有50名學生。intstu1=95;intstu2=89;intstu3=79;intstu4=64;intstu5=76;intstu6=88;……avg=(stu1+stu2+stu3+stu4+stu5…+stu50)/5050個變量50個變量太繁瑣數組概述數組概念數組是存儲同一種數據類型多個元素的集合。也可以看成是一個容器。數組既可以存儲基本數據類型,也可以存儲引用數據類型。數組概念數組定義格式格式1:數據類型[]數組名;格式2:數據類型數組名[];數組初始化Java中的數組必須先初始化,然后才能使用。所謂初始化:就是為數組中的數組元素分配內存空間,并為每個數組元素賦值。數組初始化數組的初始化方式動態(tài)初始化:初始化時只指定數組長度,由系統(tǒng)為數組分配初始值。靜態(tài)初始化:初始化時指定每個數組元素的初始值,由系統(tǒng)決定數組長度。數組初始化數據類型[]數組名=new數據類型[數組長度];格式:創(chuàng)建數組對象int[]arrs=newint[3];解釋:定義了一個int類型的數組,數組名稱為arrs,這個數組中可以存放3個int類型的值。示例1:動態(tài)初始化:初始化時只指定數組長度,由系統(tǒng)為數組分配初始值。數組長度其實就是數組中元素的個數數組元素的獲取數組名[索引]索引其實就是每個元素的編號,從0開始,最大索引是數組的長度-1。格式:Java中的內存分配Java程序在運行時,需要在內存中的分配空間。為了提高運算效率,就對空間進行了不同區(qū)域的劃分,因為每一片區(qū)域都有特定的處理數據方式和內存管理方式。Java中的內存分配棧堆方法區(qū)本地方法區(qū)寄存器存儲局部變量存儲new關鍵字創(chuàng)建的對象面向對象部分講和系統(tǒng)相關給CPU使用Java中的內存圖解數組元素默認值數據類型默認初始化值byte,short,int,long0float,double0.0char‘\u0000’booleanfalse引用類型null數組的賦值定義一個數組,輸出該數組元素值。給數組元素賦值,再次輸出該數組元素值。示例2:數組元素的賦值數組的賦值定義第一個數組,定義完畢后,給數組元素賦值。賦值完畢后,在輸出數組名稱和元素。定義第二個數組,定義完畢后,給數組元素賦值。賦值完畢后,在輸出數組名稱和元素。定義第三個數組,把第一個數組的地址值賦值給它。(注意類型一致),通過第三個數組的名稱去把元素重復賦值。最后,再次輸出第一個數組數組名稱和元素。示例22:數組地址賦值數組初始化數據類型[]數組名=new數據類型[]{元素1,元素2,…};格式:int[]arr=newint[]{1,2,3};解釋:定義了一個int類型的數組,這個數組中可以存放3個int類型的值,并且值分別是1,2,3。簡化的寫法int[]arr={1,2,3};示例3:靜態(tài)初始化:初始化時指定每個數組元素的初始值,由系統(tǒng)決定數組長度。數組操作常見的兩個問題數組索引越界常見問題ArrayIndexOutOfBoundsException訪問了數組中不存在的索引。空指針異常NullPointerException數組引用沒有指向實體,卻在操作實體中的元素。示例4:在程序中演示數組的常用操作依次輸出數組中的每一個元素數組的遍歷根據鍵盤錄入索引,查找對應星期數組查表法獲取數組中的最大值最小值數組獲取最值查找指定元素在數組中第一次出現的索引數組元素查找數組常用操作數組二維數組情境引入二維數組概述需求:我們計算機軟件技術專業(yè)每個班有很多個學生,所以,可以用數組來存儲,而我們又同時有很多個班。這個也應該用一個數組來存儲。如何來表示這樣的數據呢?Java就提供了二維數組供我們使用。二維數組其實就是一個元素為一維數組的數組。數據類型[][]變量名=new數據類型[m][n];m表示這個二維數組有多少個一維數組n表示每一個一維數組的元素個數格式1:二維數組定義格式二維數組定義格式舉例:int[][]arr=newint[3][2];定義了一個二維數組arr這個二維數組有3個一維數組,名稱是arr[0],arr[1],arr[2]每個一維數組有2個元素,可以通過arr[m][n]來獲取,表示獲取第m+1個一維數組的第n+1個元素int[][]arr=newint[3][];arr[0]=newint[2];arr[1]=newint[3]arr[2]=newint[1];舉例:二維數組定義格式數據類型[][]變量名=new數據類型[m][];m表示這個二維數組有多少個一維數組沒有直接給出一維數組元素個數,可動態(tài)給出格式2:格式3:二維數組定義格式簡化版格式:舉例:數據類型[][]變量名=new數據類型[][]{{元素…},{元素…},{元素…}};數據類型[][]變量名={{元素…},{元素…},{元素…}};int[][]arr={{1,2,3},{4,5},{6}};公司年銷售額求和某公司按照季度和月份統(tǒng)計的數據如下:單位(萬元)第一季度:22,66,44第二季度:77,33,88第三季度:25,45,65第四季度:11,66,99二維數組遍歷——練習類與對象類與對象關系

我們學習編程語言,就是為了模擬現實世界的事物,實現信息化。比如:去超市買東西的計費系統(tǒng),去銀行辦業(yè)務的系統(tǒng)。類與對象關系

我們如何表示一個現實世界事物呢?屬性就是該事物的描述信息行為就是該事物能夠做什么

舉例:學生事物類與對象關系一組相關的屬性和行為的集合類:該類事物的具體體現對象:類

學生對象學生張三舉例:類的定義現實世界的事物屬性

人的身高,體重等行為

人可以學習,吃飯等Java中用class描述事物成員變量

就是事物的屬性成員方法

就是事物的行為定義類——定義類的成員成員變量成員方法)類與對象案例學生類(講解):手機類(學生練習)如何定義按照事物到類的過程一步步分析如何使用創(chuàng)建對象:類名對象名=new類名();對象名.成員變量對象名.成員方法對象內存圖一個對象的基本初始化過程一個對象的內存圖類與對象成員變量、局部變量與構造方法成員變量與局部變量的區(qū)別成員變量

類中方法外局部變量

方法內或者方法聲明上在類中的位置不同成員變量

隨著對象的存在而存在,隨著對象的消失而消失局部變量隨著方法的調用而存在,隨著方法的調用完畢而消失生命周期不同成員變量

堆內存局部變量

棧內存在內存中的位置不同成員變量

有默認的初始化值局部變量

沒有默認的初始化值,必須先定義,賦值,才能使用。初始化值不同成員變量和局部變量的區(qū)別構造方法給對象的數據進行初始化作用:方法名與類名相同沒有返回值類型,連void都沒有沒有具體的返回值格式:構造方法如果你不提供構造方法,系統(tǒng)會給出默認構造方法如果你提供了構造方法,系統(tǒng)將不再提供構造方法也是可以重載的注意事項:一個基本類的標準代碼寫法

類成員變量構造方法無參構造方法帶參構造方法成員方法getXxx()setXxx()給成員變量賦值的方式無參構造方法+setXxx()帶參構造方法一個基本類的標準代碼案例標準的學生類(講解)加入一個方法show(),輸出學生對象的成員變量信息。標準的手機類(練習)注意目前的代碼是為了練習的一種標準格式給成員變量賦值有兩種方式,可以只寫一種如果不單獨獲取數據,可以不寫getXxx()方法類的初始化過程Students=newStudent();在內存中做了哪些事情?加載Student.class文件進內存在棧內存為s開辟空間在堆內存為學生對象開辟空間對學生對象的成員變量進行默認初始化對學生對象的成員變量進行顯示初始化通過構造方法對學生對象的成員變量賦值學生對象初始化完畢,把對象地址賦值給s變量面向對象練習練習1:定義一個類Demo,其中定義一個求兩個數據和的方法,定義一個測試了Test,進行測試。練習2:定義一個長方形類,定義求周長和面積的方法,然后定義一個測試了Test2,進行測試。練習3:定義一個員工類,自己分析出幾個成員,然后給出成員變量,構造方法,getXxx()/setXxx()方法,以及一個顯示所有成員信息的方法。并測試。練習4:定義一個類MyMath,提供基本的加減乘除功能,然后進行測試。封裝封裝概述隱藏對象的屬性和實現細節(jié),僅對外提供公共訪問方式封裝:提高代碼的復用性。提高程序的安全性。好處:將不需要對外提供的內容都隱藏起來。把屬性隱藏,提供公共方法對其訪問。原則:private關鍵字一個權限修飾符??尚揎棾蓡T(成員變量和成員方法)被private修飾的成員只在本類中才能訪問。private關鍵字:把成員變量用private修飾提供對應的getXxx()/setXxx()方法private的應用:案例演示this關鍵字代表所在類的對象引用this:局部變量名稱與成員變量名稱沖突什么時候使用this呢?static關鍵字可以修飾成員變量和成員方法static:

隨著類的加載而加載優(yōu)先于對象存在被類的所有對象共享判斷是否使用靜態(tài)關鍵字的條件可以通過類名調用特點:static關鍵字

在靜態(tài)方法中是沒有this關鍵字的靜態(tài)方法只能訪問靜態(tài)的成員變量和靜態(tài)的成員方法注意事項:靜態(tài)的內存圖靜態(tài)的內容存在于方法區(qū)的靜態(tài)區(qū)靜態(tài)變量和成員變量的區(qū)別所屬不同靜態(tài)變量屬于類,所以也稱為為類變量成員變量屬于對象,所以也稱為實例變量(對象變量)內存中位置不同靜態(tài)變量存儲于方法區(qū)的靜態(tài)區(qū)成員變量存儲于堆內存內存出現時間不同

靜態(tài)變量隨著類的加載而加載,隨著類的消失而消失

成員變量隨著對象的創(chuàng)建而存在,隨著對象的消失而消失調用不同

靜態(tài)變量可以通過類名調用,也可以通過對象調用

成員變量只能通過對象名調用代碼塊局部代碼塊

聲明在方法中;限定變量的作用域;用于提高內存利用率構造代碼塊

聲明在類中方法外;每次調用構造方法前,都會先執(zhí)行構造代碼塊。作用:可以把多個構造方法中的共同代碼放到一起,對對象進行初始化。靜態(tài)代碼塊

聲明在類中方法外,并加上static修飾;用于給類進行初始化,在類加載的時候就執(zhí)行,并且只執(zhí)行一次。同步代碼塊代碼塊:使用{}括起來的代碼根據其位置和聲明的不同,可以分為代碼塊——課堂練習先看程序,再寫程序的執(zhí)行結果。classStudent{ static{ System.out.println("Student靜態(tài)代碼塊"); }

{ System.out.println("Student構造代碼塊"); }

publicStudent(){ System.out.println("Student構造方法"); }}代碼塊——課堂練習先看程序,再寫程序的執(zhí)行結果。classStudentDemo{ static{ System.out.println("我是StudentDemo類中的靜態(tài)代碼塊"); }

publicstaticvoidmain(String[]args){ System.out.println("我是main方法");

Students1=newStudent(); Students2=newStudent(); }}第4章面向對象編程繼承情境引入我們在做事情的時候,如果在現有一定基礎之上再創(chuàng)作新的內容,就會比較輕松一些。

在程序開發(fā)中,我們怎樣才能提高代碼的可重用性,從而達到提高效率的目的呢?生活中的繼承生活中,繼承的例子隨處可見167動物食草動物食肉動物誰是父類?誰是子類?能說出繼承的特點嗎?繼承需要符合的關系:父類更通用、子類更具體生活中的繼承子類具有父類的一般特性(包括屬性和行為),以及自身特殊的特性168巴士是汽車嗎?卡車是汽車嗎?出租車是汽車嗎?最大載客數量報站引擎數量外觀顏色剎車加速汽車最大載重量卸貨所屬公司最大載客數量打發(fā)票屬性行為請問:出租車包含哪些屬性和行為呢?為什么需要繼承?開發(fā)教師類,其中教師分為Java教師以及.NET教師,各自的要求如下:Java教師屬性:姓名、所屬教研室方法:授課(步驟:打開Eclipse、實施理論課授課)、自我介紹.NET教師屬性:姓名、所屬教研室方法:授課(步驟:打開Visualstudio2005、實施理論課授課)、自我介紹169請問:以下這個解決方案中存在著什么問題?170publicclassDotNetTeacher{privateStringname;//教師姓名privateStringdepartment;//教研室publicDotNetTeacher(StringmyName,StringmyDepat){name=myName;department=myDepart;}publicvoidgiveLession(){System.out.println("啟動VisualStudio2005");System.out.println("知識點講解");System.out.println("總結提問");}publicvoidintroduction(){ System.out.println("大家好!我是" +department+"的"+name+".");}}publicclassJavaTeacher{privateStringname;//教師姓名privateStringdepartment;//教研室publicJavaTeacher(StringmyName,StringmyDepart){name=myName;department=myDepart;}publicvoidgiveLession(){System.out.println("啟動

Eclipse");System.out.println("知識點講解");System.out.println("總結提問");}publicvoidintroduction(){ System.out.println("大家好!我是" +department+"的"+name+".");}}代碼存在重復,違背了“writeonce,onlyonce”的原則如何改進?有沒有可能建立繼承關系,讓子類自動繼承父類的屬性和方法?171Java教師是教師嗎?.NET教師是教師嗎?publicclassTeacher{privateStringname;//教師姓名privateStringdepartment;//教研室publicTeacher(StringmyName,StringmyDepart){name=myName;department=myDepart;}publicvoidgiveLesson(){System.out.println("知識點講解");System.out.println("總結提問");}publicvoidintroduction(){ System.out.println("大家好!我是“

+department+"的"+name+"。");}}現在,所有子類中相同的代碼都抽取到父類中了屬

性行

為姓名教研室授課自我介紹教師Java教師.NET教師為什么需要繼承4-4172publicclassJavaTeacher2extendsTeacher{publicJavaTeacher2(StringmyName,StringmyDepart){super(myName,myDepart);}publicvoidgiveLesson(){System.out.println("啟動Eclipse");super.giveLesson();}}publicclassDotNetTeacher2extendsTeacher{publicDotNetTeacher2(StringmyName,StringmyDepart){super(myName,myDepart);}publicvoidgiveLesson(){System.out.println("啟動VisualStudio.NET");super.giveLesson();}}使用繼承,可以有效實現代碼復用子類自動繼承父類的屬性和方法,子類中不再存在重復代碼如何實現繼承?在Java語言中,用extends關鍵字來表示一個類繼承了另一個類,例如:173publicclassJavaTeacher2

extends

AccpTeacher{//其余代碼省略}在父類中只定義一些通用的屬性與方法,例如:publicclassTeacher{privateStringname;//教師姓名privateStringdepartment;//所在教研室publicTeacher(StringmyName,StringmyDepart){//初始化屬性值}publicvoidgiveLesson(){//授課方法的具體實現}publicvoidintroduction(){//自我介紹方法的具體實現

}}如何實現繼承子類自動繼承父類的屬性和方法,子類中可以定義特定的屬性和方法174publicclassTeacher{Stringname;//教師姓名Stringdepartment;//所在教研室publicTeacher(StringmyName,StringmyDepart){//初始化屬性值}publicvoidgiveLesson(){ //授課方法的具體實現}publicvoidintroduction(){ //自我介紹方法的具體實現

}}publicclassJavaTeacher2extendsTeacher{publicJavaTeacher2(StringmyName,StringmyDepart){super(myName,myDepart);}publicvoidgiveLesson(){System.out.println("啟動Eclipse");super.giveLesson();}}由于giveLesson()方法與父類的實現有所不同,因此重寫了該方法方法重寫:子類和父類的方法具有相同的名稱、參數列表、返回類型父類中的屬性和方法可以被子類繼承如何實現繼承?子類的構造方法中,通過super關鍵字調用父類的構造方法175publicclassJavaTeacher2extendsTeacher{publicJavaTeacher2(StringmyName,StringmyDepart){super(myName,myDepart);}}方法重寫后,通過super關鍵字調用父類的方法publicclassJavaTeacher2extendsTeacher{publicvoidgiveLesson(){System.out.println("啟動Eclipse");super.giveLesson();}}通過調用父類的構造方法,完成對屬性值的初始化一切類的“祖先”——Object在Java中,所有的Java類都直接或間接地繼承了java.lang.Object類176publicclassMyObject{//…}publicclassMyObectextends

Object{

//…}在Eclipse中調用MyObject對象的成員,會自動彈出繼承自Object的所有方法小結1請編碼實現動物世界的繼承關系:動物(Animal)具有行為:吃(eat)、睡覺(sleep)動物包括:兔子(Rabbit),老虎(Tiger)這些動物吃的行為各不相同(兔子吃草,老虎吃肉);但睡覺的行為是一致的。請通過繼承實現以上需求,并編寫測試類AnimalTest進行測試。177感謝觀看方法重載與方法重寫情境引入在生活中,其實我們經常遇到方法重載的情況,例如:同一臺打印機,既可以打印黑白照片,也可以打印彩色照片……生活中的方法重載181類方法方法參數方法實現司機轎車巴士火車駕駛啟動、行駛、……等待乘客上車、啟動、行駛、到站停車、……正點發(fā)車、行駛、到站停車、……如果用代碼實現,我們需要三個方法,這些方法的方法名稱相同,參數類型不同方法重載的代碼示例1方法重載并不陌生java.io.PrintStream類的println方法能夠打印數據并換行,根據數據類型的不同,有多種實現方式182publicclassTest{publicstaticvoidmain(String[]args){inti=0;charc='z';Stringstr="hello";System.out.println(i);System.out.println(c);System.out.println(str);}}PrintStreamprintln(int)println(char)println(String)……方法名相同,參數類型不同調用不同的println方法方法重載方法重載的代碼示例2java.lang.Math類的max()方法能夠從兩個數字中取出最大值,它有多種實現方式運行時,Java虛擬機先判斷給定參數的類型,然后決定到底執(zhí)行哪個max()方法183Mathmax(inta,intb)max(floata,floatb)max(longa,longb)max(doublea,doubleb)publicclassTest{publicstaticvoidmain(String[]args){Math.max(1,2);Math.max(1.0F,2.F);Math.max(1.0,2);}}方法重載構造方法重載2-1構造方法重載是方法重載的典型示例184publicclassTeacher7{privateStringname;//教師姓名privateStringdepartment=“軟件教研室”;//所在教研室PublicTeacher7(Stringname){ =name;//設定教師姓名}publicTeacher7(Stringname,Stringdepartment){=name;//設定教師姓名this.department=department;//設定教師教研室}publicStringintroduction(){ return"大家好!我是"+department

+"的"+name;}}構造方法重載構造方法重載2-2通過調用不同的構造方法來表達對象的多種初始化行為例如:默認情況下,教師來自軟件教研室,初始化時,只需提供教師姓名有時,需要提供所在教研室名稱及教師姓名185publicclassTeacher7Test{publicstaticvoidmain(String[]args){Teacher7teacher1=newTeacher7("李芳");System.out.println(roduction());Teacher7teacher2=newTeacher7("張欣",

“網絡教研室");System.out.println(roduction());}}大家好!我是軟件教研室的李芳大家好!我是網絡教研室的張欣方法的重載(overload)在同一個類中,一個以上的方法名稱相同,參數列表不同,這種定義方法叫做方法的重載。

186例如:

publicintsummn(intm,intn){returnm+n;}publicintsummn(intm,intn,intk){returnm+n+k;}187例如:

publicintsummn(intm,intn){returnm+n;}publicintsummn(intx,inty){returnx+y;}//是重載嗎?188不是方法的重寫在子類中,聲明和父類中完全相同(方法名字、參數類型、個數和順序、返回值類型)的方法,叫做方法的重寫。方法的重載和方法的重寫,都是實現類的多態(tài)性的重要途徑。

189重寫隱藏了父類中的同名成員。如果子類中成員m是重寫的,則在子類中訪問m時,訪問的是子類中的,而不是父類中的m。190方法重寫示例:

classVehicle{voidrun(){System.out.println("Vehicleisrunning");}}classBikeextendsVehicle{ @override voidrun(){ System.out.println("theBikeofVehicleisrunning"); }publicstaticvoidmain(Stringargs[]){Bikeobj=newBike();obj.run();}}191

輸出結果:theBikeofVehicleisrunning訪問被重寫的方法:

有時,需要在子類中訪問父類中被重寫的方法,可使用super關鍵字來實現。

super代表當前類的直接父類。

192//定義Animal類classAnimal{ Stringname="動物";

voidshout(){//定義動物叫的方法 System.out.println("動物發(fā)出叫聲"); }}classDogextendsAnimal{//定義Dog類繼承動物類 Stringname="犬類";

voidshout(){//重寫父類的shout()方法

super.shout();//訪問父類的成員方法

}193

//定義打印name的方法

voidprintName(){ System.out.println("name="+);//訪問父類的成員變量

}}//定義測試類publicclassExample03{ publicstaticvoidmain(String[]args){ Dogdog=newDog();//創(chuàng)建一個Dog對象

dog.shout();//調用dog對象重寫的shout()方法

dog.printName();//調用dog對象的的printName()方法

}}194動物發(fā)出叫聲name=動物使用super關鍵字訪問父類的構造方法:

super([參數1,參數2…])//定義Animal類classAnimal{ //定義Animal類有參的構造方法

publicAnimal(Stringname){ System.out.println("我是一只"+name); }}//定義Dog類繼承Animal類classDogextendsAnimal{ publicDog(){ super("沙皮狗");//調用父類有參的構造方法

}}195//定義測試類publicclassExample04{ publicstaticvoidmain(String[]args){ Dogdog=newDog();//實例化子類Dog對象

}}196final關鍵字final關鍵字有“無法改變”或者“最終”的含義,因此被final修飾的類、變量和方法將具有以下特性:final修飾的類不能被繼承。final修飾的方法不能被子類重寫。final修飾的變量(成員變量和局部變量)是常量,只能賦值一次。197final關鍵字修飾類finalclassAnimal{//使用final關鍵字修飾Animal類時,子類會報錯classAnimal{ //方法體為空}classDogextendsAnimal{//Dog類繼承Animal類 //方法體為空}classExample06{//定義測試類 publicstaticvoidmain(String[]args){ Dogdog=newDog();//創(chuàng)建Dog類的實例對象 }}198final關鍵字修飾變量classAnimal{

//使用final關鍵字修飾shout()方法后,如果子類重寫父類的這個方法,編譯會報錯

//publicfinalvoidshout(){ publicvoidshout(){ //程序代碼}}//定義Dog類繼承Animal類classDogextendsAnimal{ //重寫Animal類的shout()方法

publicvoidshout(){ //程序代碼

}}199//定義測試類classExample07{ publicstaticvoidmain(String[]args){ Dogdog=newDog();//創(chuàng)建Dog類的實例對象

}}感謝觀看抽象類情境引入:

當定義一個類時,常常需要定義一些方法來描述該類的行為特征,但有時這些方法的實現方式是無法確定的。例如當我們定義Animal類時,shout()方法用于表示動物的叫聲,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論