Java程序設(shè)計基礎(chǔ) 課件 第4章 方法_第1頁
Java程序設(shè)計基礎(chǔ) 課件 第4章 方法_第2頁
Java程序設(shè)計基礎(chǔ) 課件 第4章 方法_第3頁
Java程序設(shè)計基礎(chǔ) 課件 第4章 方法_第4頁
Java程序設(shè)計基礎(chǔ) 課件 第4章 方法_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第4章

方法1教學(xué)目標(biāo)(1) 理解方法的概念,掌握方法的定義方式和組成。(2) 理解方法調(diào)用的概念和工作原理。(3) 理解方法調(diào)用時的按值傳遞工作原理,能定義簡單方法并調(diào)用。(4) 理解方法重載的概念,能定義和調(diào)用重載方法。(5) 理解方法中局部變量的作用域,弄清方法中變量的有效作用范圍。(6) 理解模塊化編程思想。(7) 能使用方法對簡單問題進(jìn)行模塊化求解,如:求π值、輸出素數(shù)、十進(jìn)制和十六進(jìn)制的相互轉(zhuǎn)換。2內(nèi)容334.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)內(nèi)容444.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)4.1方法定義問題:假設(shè)需要分別求出從1到10、從20到30、從35到45的整數(shù)和。51.引言4.1方法定義6intsum=0;for(inti=1;i<=10;i++)sum+=i;System.out.println("Sumfrom1to10is"+sum);sum=0;for(inti=20;i<=30;i++)sum+=i;System.out.println("Sumfrom20to30is"+sum);sum=0;for(inti=35;i<=45;i++)sum+=i;System.out.println("Sumfrom35to45is"+sum);解決方式17intsum=0;for(inti=1;i<=10;i++)sum+=i;System.out.println("Sumfrom1to10is"+sum);sum=0;for(inti=20;i<=30;i++)sum+=i;System.out.println("Sumfrom20to30is"+sum);sum=0;for(inti=35;i<=45;i++)sum+=i;System.out.println("Sumfrom35to45is"+sum);4.1方法定義解決方式1有什么問題8publicstaticintsum(inti1,inti2){intsum=0;for(inti=i1;i<=i2;i++)sum+=i;returnsum;}publicstaticvoidmain(String[]args){System.out.println("Sumfrom1to10is"+sum(1,10));System.out.println("Sumfrom20to30is"+sum(20,30));System.out.println("Sumfrom35to45is"+sum(35,45));}4.1方法定義解決方式2:定義方法方法對于促進(jìn)代碼復(fù)用和提高開發(fā)效率具有重要價值4.1方法定義方法(method):為完成一個操作而組合在一起的語句組。方法的定義由方法頭(methodhead)以及方法體(methodbody)構(gòu)成。方法頭:方法名稱、參數(shù)、返回值類型9定義方法的一般語法形式:[修飾符]返回值類型方法名(參數(shù)列表){ //方法體;

語句組[return返回值]}4.1方法定義方法(method):為完成一個操作而組合在一起的語句組。方法的定義由方法頭(methodhead)以及方法體(methodbody)構(gòu)成。方法頭:方法名稱、參數(shù)、返回值類型10定義方法的一般語法形式:[修飾符]返回值類型方法名(參數(shù)列表){ //方法體;

語句組[return返回值]}修飾符:該項是可選項,用于聲明方法的訪問范圍、類型,可以使用的關(guān)鍵字有:public、private、protected、static和final等4.1方法定義方法(method):為完成一個操作而組合在一起的語句組。方法的定義由方法頭(methodhead)以及方法體(methodbody)構(gòu)成。方法頭:方法名稱、參數(shù)、返回值類型11定義方法的一般語法形式:[修飾符]返回值類型方法名(參數(shù)列表){ //方法體;

語句組[return返回值]}返回值類型:聲明方法返回值的數(shù)據(jù)類型,可以是基本數(shù)據(jù)類型int、float或boolean等,也可以是數(shù)組、對象等引用數(shù)據(jù)類型,方法體內(nèi)的return語句要返回相應(yīng)類型的數(shù)值4.1方法定義方法(method):為完成一個操作而組合在一起的語句組。方法的定義由方法頭(methodhead)以及方法體(methodbody)構(gòu)成。方法頭:方法名稱、參數(shù)、返回值類型12定義方法的一般語法形式:[修飾符]返回值類型方法名(參數(shù)列表){ //方法體;

語句組[return返回值]}方法名:方法名是一個合法的標(biāo)識符,用于標(biāo)識所聲明的方法4.1方法定義方法(method):為完成一個操作而組合在一起的語句組。方法的定義由方法頭(methodhead)以及方法體(methodbody)構(gòu)成。方法頭:方法名稱、參數(shù)、返回值類型13定義方法的一般語法形式:[修飾符]返回值類型方法名(參數(shù)列表){ //方法體;

語句組[return返回值]}參數(shù)列表:參數(shù)列表是由0個或多個變量聲明(數(shù)據(jù)類型變量名稱)構(gòu)成,多個變量聲明之間用逗號分隔(,)形參(formalparameter)實參(actualparameter)方法名和參數(shù)列表構(gòu)成了一個方法的方法簽名(methodsignature)4.1方法定義方法(method):為完成一個操作而組合在一起的語句組。方法的定義由方法頭(methodhead)以及方法體(methodbody)構(gòu)成。方法頭:方法名稱、參數(shù)、返回值類型14定義方法的一般語法形式:[修飾符]返回值類型方法名(參數(shù)列表){ //方法體;

語句組[return返回值]}return語句:如果方法返回值類型是void,那么可以不用return語句,或者采用“return;”形式的return語句。如果方法有返回值,那么必須使用return語句返回相應(yīng)數(shù)據(jù)類型的值,返回語句的一般形式為“return返回值;”。154.1方法定義定義一個方法示例164-1一個方法的簽名包括()方法名方法名和參數(shù)列表返回值類型,方法名和參數(shù)列表參數(shù)列表ABCD提交單選題1分174-2當(dāng)創(chuàng)建的方法不需要返回任何值時,需要采用以下哪個關(guān)鍵字作為返回值類型?()nonenullvoiddoubleABCD提交單選題1分內(nèi)容18184.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)4.2方法調(diào)用方法是一個定義好的功能模塊,為了使用方法完成相應(yīng)的功能,必須調(diào)用它。方法調(diào)用就是傳遞參數(shù)給方法,然后執(zhí)行方法中的代碼,有兩種調(diào)用方式:對于帶返回值方法的調(diào)用,方法調(diào)用可以被作為一個值來處理。對于不存在返回值的方法調(diào)用,即void方法,方法調(diào)用必須是一條語句。需要注意的是,對帶返回值方法的調(diào)用也可以單獨作為一條語句,忽略其返回值即可。這種用法很少用,但是也是允許的當(dāng)程序調(diào)用一個方法時,程序控制轉(zhuǎn)移到被調(diào)用的方法。當(dāng)執(zhí)行完return語句或執(zhí)行到表示方法結(jié)束的右括號時,被調(diào)用的方法將程序控制返還給調(diào)用者。示例:程序清單4-1TestMinMethod.java194.2方法調(diào)用204.2方法調(diào)用活動記錄:當(dāng)一個方法被調(diào)用時,系統(tǒng)會在內(nèi)存中為該方法創(chuàng)建一個活動記錄,用于保存該方法的參數(shù)和變量調(diào)用棧:在內(nèi)存中存儲活動記錄的一個區(qū)域調(diào)用棧是以先進(jìn)后出的方式管理方法的活動記錄,即,最后被調(diào)用的方法的活動記錄最早從調(diào)用棧中被清除,最早執(zhí)行的方法的活動記錄最晚被清除調(diào)用棧變化示例(下頁圖)214.2方法調(diào)用22警告23對帶返回值的方法而言,return語句是必需的。下圖(a)中的方法邏輯上是正確的,但它有編譯錯誤。因為Java編譯器認(rèn)為該方法有可能不返回任何值。為了解決這個問題,刪除圖(a)

if(n<0),這樣,編譯器將發(fā)現(xiàn)不管if語句如何執(zhí)行,總可以執(zhí)行到return語句。2.方法定義與調(diào)用244-3“對返回類型為void的方法的調(diào)用本身總是一條語句,但是對帶返回值類型的方法的調(diào)用本身不能做為一條語句。“這句話是否正確()正確錯誤AB提交單選題1分254-4在void方法中可以有return語句嗎?()可以不可以AB提交單選題1分內(nèi)容26264.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)4.3按值傳遞當(dāng)調(diào)用一個方法時,需要提供與該方法參數(shù)列表中形參相匹配的實參:實參必須與方法簽名中定義的形參在順序上和數(shù)量上匹配,在類型上兼容。類型兼容是指實參的值不需要強制類型轉(zhuǎn)換(可以隱式類型轉(zhuǎn)換)就可以傳遞給形參。例如:形參是double類型,實參可以是float、int等類型按值傳遞(pass-by-value):當(dāng)調(diào)用一個帶參數(shù)的方法時,將實參的值傳遞給形參的過程當(dāng)方法的形參類型是基本數(shù)據(jù)類型時,實參既可以是類型兼容的字面值,也可以是類型兼容的變量例如:形參是double類型,實參可以是字面值:2,2.5,3.5f等,也可以是一個int型變量或float型變量或double型變量當(dāng)實參是變量時,實參的值會傳遞給形參;然后,形參的變化與實參無關(guān)274.3按值傳遞28示例:程序清單4-2TestPassByValue.java4.3按值傳遞實參按順序匹配示例:程序清單4-3TestPassOrder.java29課堂討論inti=10;floatf=4.5f;doubled=36.5;30下列哪些類型轉(zhuǎn)換是正確的:i=f;f=i;i=d;d=f;FalseTrueFalseTrue針對方法:max(inti,inty),

max(inti,floatj),max(doubled1,doubled2)下列調(diào)用對應(yīng)哪個方法?max(i,f);max(i,d);max(f,d);類型兼容的匹配314-5給定一個方法:publicstaticvoidm(doubled,inti),下列哪個選項是不合法調(diào)用()m(2.3,2)m(2,2)m(2d,2)m(2.3,2.3)ABCD提交單選題1分內(nèi)容32324.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)4.4方法重載方法重載(methodoverloading)是指可以使用相同的方法名來定義不同的方法,只要這些方法的參數(shù)列表是不同換一種說法,方法重載就是定義方法名相同的一些方法,而這些方法的方法簽名不同方法重載可以減輕程序員的命名負(fù)擔(dān),提升程序的易讀性示例:程序清單4-4SumMethodOverloading.java精確匹配:實參與參數(shù)列表中的形參在次序和數(shù)量上匹配,在類型上一致類型兼容的匹配:實參與參數(shù)列表中的形參在次序和數(shù)量上匹配,在類型上兼容Java編譯器優(yōu)先考慮精確匹配,然后考慮類型兼容的匹配33課堂討論下面的程序有什么錯誤?34publicclassMain{publicstaticvoidmethod(inti){

}

publicstaticintmethod(intx){

returnx;

}

}4.4方法重載當(dāng)調(diào)用一個方法,有兩個或更多可能的匹配時,編譯器無法判斷哪個是最精確的匹配。這時就出現(xiàn)歧義調(diào)用,產(chǎn)生編譯錯誤。示例:程序清單4-5AmbiguousInvokeDemo.java35課堂討論給定兩個方法定義:publicstaticdoublem(doublex,doubley)publicstaticdoublem(intx,doubley)對于下面的語句,兩個方法中的哪個被調(diào)用?doublez=m(4,5);doublez=m(4,5.4);doublez=m(4.5,5.4);365.重載方法4.4方法重載小結(jié):(1)重載方法的區(qū)分,與返回值類型無關(guān),只與方法名和參數(shù)列表有關(guān)。(2)重載方法的參數(shù)列表必須不同,包括:參數(shù)數(shù)量不同,參數(shù)類型不同和參數(shù)順序不同。(3)重載方法的區(qū)分,與形參名稱無關(guān)。例如,sum(intnum1,intnum2)與sum(intnum3,intnum4)在Java編譯器看來,是相同的方法,不能重復(fù)定義。37384-6已知方法的定義形式為:publicvoidplus(inta,intb){},下列選項中哪個是合法的重載方法?publicintplus(inta){}publicintplus1(intm,intn){}publicvoidplus(inta,intb){}publicintplus(inta,intb){}ABCD提交單選題1分內(nèi)容39394.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)4.5變量的作用域一個變量的作用域是指該變量在程序中能被引用的范圍。一個變量在其作用域之外被引用,Java編譯器會報告編譯錯誤。局部變量是在方法內(nèi)部或語句塊內(nèi)部定義的變量。一個局部變量的作用域是從該變量聲明的地方開始,直到包含該變量的語句塊結(jié)束為止。局部變量在使用之前必須聲明和初始化,局部變量沒有默認(rèn)賦值。40414-7方法內(nèi)部定義的變量稱為()全局變量方法變量形式參數(shù)局部變量ABCD提交單選題1分4.5變量的作用域42局部變量作用域示例課堂討論43for(inti=0;i<10;i++){//…}System.out.println(i);6.變量作用域4.5變量的作用域44可以在一個方法的不同語句塊中聲明同名的局部變量,但是不能在嵌套塊中或同一塊中兩次聲明同一個局部變量publicstaticvoidmethod(){intx=0;inty=0;for(inti=1;i<10;i++){x+=i;}for(inti=1;i<10;i++){y+=i;}}45課堂討論6.變量作用域publicstaticvoidmethod(){intx=0;inty=0;for(inti=1;i<10;i++){intx=1;x+=i;}}討論:下面兩段代碼,存在錯誤嗎(a)(b)內(nèi)容46464.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)4.6模塊化編程方法是模塊化編程的重要構(gòu)造,每個方法可以看成是一個模塊。通過模塊化,可以促進(jìn)代碼復(fù)用。輾轉(zhuǎn)相除法求最大公約數(shù)和最小公倍數(shù)的示例:無模塊化:程序清單4-6GCDTestDemo.java模塊化:程序清單4-7GCDMethodDemo.java模塊化后進(jìn)行代碼復(fù)用:程序清單4-8UseGCDMethodDemo.java474.6模塊化編程通過模塊化編程,方法的實現(xiàn)對用戶而言是一個“黑盒子”,用戶只需要知道方法的輸入?yún)?shù)、返回值就可以使用它了如果需要對方法的實現(xiàn)進(jìn)行修改,只要不改變方法簽名,用戶的程序就不受影響。484.6模塊化編程通過使用方法進(jìn)行模塊化編程,能夠更好地編寫大型程序。逐步求精(分治思想):將大問題分解成多個子問題,每個子問題用一個方法實現(xiàn),形成一個個小的、容易管理的模塊。這些模塊相互協(xié)作組合在一起,就形成了一個更大、更復(fù)雜、功能更強大的程序,從而解決復(fù)雜的大問題。JavaAPI也提供了一些通用功能模塊供程序員使用,例如,Math類的數(shù)學(xué)函數(shù)方法49內(nèi)容50504.1方法定義4.2方法調(diào)用4.3按值傳遞4.4方法重載4.5變量的作用域4.6模塊化編程4.7示例學(xué)習(xí)4.7示例學(xué)習(xí)π值的計算可以使用下面的近似值計算公式:514.7.1求π值4.7.2輸出素數(shù)4.7.3十/十六進(jìn)制轉(zhuǎn)換

模塊化方法求解:程序清單4-9ComputePIMethod.java4.7示例學(xué)習(xí)對3.2.9節(jié)代碼進(jìn)行模塊化編程:定義方法showPrimeNubmers:輸出由參數(shù)numOfPrimes指定數(shù)量的素數(shù)定義方法isPrime:判斷一個數(shù)是否素數(shù)main方法只有兩行代碼程序清單4-10PrimeMethodDemo.java524.7.1求π值4.7.2輸出素數(shù)4.7.3十/十六進(jìn)制轉(zhuǎn)換4.7示例學(xué)習(xí)

534.7.1求π值4.7.2輸出素數(shù)4.7.3十/十六進(jìn)制轉(zhuǎn)換4.7示例學(xué)習(xí)十進(jìn)制轉(zhuǎn)十六進(jìn)制:算法設(shè)計:544.7.1

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論