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

下載本文檔

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

文檔簡(jiǎn)介

第4章

方法1教學(xué)目標(biāo)(1) 理解方法的概念,掌握方法的定義方式和組成。(2) 理解方法調(diào)用的概念和工作原理。(3) 理解方法調(diào)用時(shí)的按值傳遞工作原理,能定義簡(jiǎn)單方法并調(diào)用。(4) 理解方法重載的概念,能定義和調(diào)用重載方法。(5) 理解方法中局部變量的作用域,弄清方法中變量的有效作用范圍。(6) 理解模塊化編程思想。(7) 能使用方法對(duì)簡(jiǎn)單問題進(jìn)行模塊化求解,如:求π值、輸出素?cái)?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:定義方法方法對(duì)于促進(jìn)代碼復(fù)用和提高開發(fā)效率具有重要價(jià)值4.1方法定義方法(method):為完成一個(gè)操作而組合在一起的語句組。方法的定義由方法頭(methodhead)以及方法體(methodbody)構(gòu)成。方法頭:方法名稱、參數(shù)、返回值類型9定義方法的一般語法形式:[修飾符]返回值類型方法名(參數(shù)列表){ //方法體;

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

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

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

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

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

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

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

max(inti,floatj),max(doubled1,doubled2)下列調(diào)用對(duì)應(yīng)哪個(gè)方法?max(i,f);max(i,d);max(f,d);類型兼容的匹配314-5給定一個(gè)方法:publicstaticvoidm(doubled,inti),下列哪個(gè)選項(xiàng)是不合法調(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í)參與參數(shù)列表中的形參在次序和數(shù)量上匹配,在類型上兼容Java編譯器優(yōu)先考慮精確匹配,然后考慮類型兼容的匹配33課堂討論下面的程序有什么錯(cuò)誤?34publicclassMain{publicstaticvoidmethod(inti){

}

publicstaticintmethod(intx){

returnx;

}

}4.4方法重載當(dāng)調(diào)用一個(gè)方法,有兩個(gè)或更多可能的匹配時(shí),編譯器無法判斷哪個(gè)是最精確的匹配。這時(shí)就出現(xiàn)歧義調(diào)用,產(chǎn)生編譯錯(cuò)誤。示例:程序清單4-5AmbiguousInvokeDemo.java35課堂討論給定兩個(gè)方法定義:publicstaticdoublem(doublex,doubley)publicstaticdoublem(intx,doubley)對(duì)于下面的語句,兩個(gè)方法中的哪個(gè)被調(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){},下列選項(xiàng)中哪個(gè)是合法的重載方法?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變量的作用域一個(gè)變量的作用域是指該變量在程序中能被引用的范圍。一個(gè)變量在其作用域之外被引用,Java編譯器會(huì)報(bào)告編譯錯(cuò)誤。局部變量是在方法內(nèi)部或語句塊內(nèi)部定義的變量。一個(gè)局部變量的作用域是從該變量聲明的地方開始,直到包含該變量的語句塊結(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可以在一個(gè)方法的不同語句塊中聲明同名的局部變量,但是不能在嵌套塊中或同一塊中兩次聲明同一個(gè)局部變量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;}}討論:下面兩段代碼,存在錯(cuò)誤嗎(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)造,每個(gè)方法可以看成是一個(gè)模塊。通過模塊化,可以促進(jìn)代碼復(fù)用。輾轉(zhuǎn)相除法求最大公約數(shù)和最小公倍數(shù)的示例:無模塊化:程序清單4-6GCDTestDemo.java模塊化:程序清單4-7GCDMethodDemo.java模塊化后進(jìn)行代碼復(fù)用:程序清單4-8UseGCDMethodDemo.java474.6模塊化編程通過模塊化編程,方法的實(shí)現(xiàn)對(duì)用戶而言是一個(gè)“黑盒子”,用戶只需要知道方法的輸入?yún)?shù)、返回值就可以使用它了如果需要對(duì)方法的實(shí)現(xiàn)進(jìn)行修改,只要不改變方法簽名,用戶的程序就不受影響。484.6模塊化編程通過使用方法進(jìn)行模塊化編程,能夠更好地編寫大型程序。逐步求精(分治思想):將大問題分解成多個(gè)子問題,每個(gè)子問題用一個(gè)方法實(shí)現(xiàn),形成一個(gè)個(gè)小的、容易管理的模塊。這些模塊相互協(xié)作組合在一起,就形成了一個(gè)更大、更復(fù)雜、功能更強(qiáng)大的程序,從而解決復(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í)π值的計(jì)算可以使用下面的近似值計(jì)算公式:514.7.1求π值4.7.2輸出素?cái)?shù)4.7.3十/十六進(jìn)制轉(zhuǎn)換

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論