




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、語言程序設(shè)計(jì)劉炯西安電子科技大學(xué) 通信工程學(xué)院第五章 方法學(xué)習(xí)目標(biāo)創(chuàng)建方法,調(diào)用方法,給方法傳遞參數(shù)使用方法重載,了解方法的歧義重載判斷局部變量的作用域了解如何使用Math類中的方法學(xué)習(xí)方法抽象的概念將類放入包中方法(Method)方法是為執(zhí)行一個(gè)操作而組合在一起的語句組public static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result;返回值方法體參數(shù)列表返回值類型方法頭方法名稱方法修飾int m = max(x, y);定義方法調(diào)用方法形
2、參實(shí)參方法必須包括方法名和參數(shù)列表定義在方法頭中的變量被稱為形式參數(shù)(formal parameters,簡稱型參)當(dāng)調(diào)用方法時(shí),就要給參數(shù)傳遞一個(gè)值,這個(gè)值被稱為實(shí)際參數(shù)(actual parameter 或 argument,簡稱實(shí)參)方法可以返回結(jié)果(返回值)。返回值類型是方法要返回的值的數(shù)據(jù)類型。有些方法執(zhí)行某些要求的操作,不返回值,這種情況下,返回值類型為關(guān)鍵字void。例如,在main方法中返回值類型就是void。調(diào)用方法舉例public class MethodExample public static void main(String args) int x = 10; int
3、 y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result; public class MethodExample public static void main(String args) int x = 10; in
4、t y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result; 跟蹤方法調(diào)用初始化 x, ypublic class MethodExample public static void main(String args)
5、 int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result; 跟蹤方法調(diào)用調(diào)用 max(x, y)public class MethodExample public static voi
6、d main(String args) int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result; 跟蹤方法調(diào)用調(diào)用 max(x, y)將 x 的值傳遞給 n1將 y 的值傳遞給 n2p
7、ublic class MethodExample public static void main(String args) int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result;
8、跟蹤方法調(diào)用聲明變量(用于返回結(jié)果)public class MethodExample public static void main(String args) int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result =
9、n2; return result; 跟蹤方法調(diào)用n1 = 10, n2 = 13public class MethodExample public static void main(String args) int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result; if (n1 = n2) resu
10、lt = n1; else result = n2; return result; 跟蹤方法調(diào)用result = 13public class MethodExample public static void main(String args) int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1, int n2 ) int result;
11、 if (n1 = n2) result = n1; else result = n2; return result; 跟蹤方法調(diào)用返回 result 的值:13public class MethodExample public static void main(String args) int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); public static int max ( int n1
12、, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result; 跟蹤方法調(diào)用將返回值賦給 maxNumber, = 13public class MethodExample public static void main(String args) int x = 10; int y = 13; int maxNumber = max(x, y); System.out.printf(The maximum between %d and %d is %dn, x, y, maxNumber); p
13、ublic static int max ( int n1, int n2 ) int result; if (n1 = n2) result = n1; else result = n2; return result; 跟蹤方法調(diào)用輸出結(jié)果注可以在方法體中,提前 return。方法中的 return 語句稱為方法的退出點(diǎn)。下面是簡化后的 max 方法:public static int max ( int n1, int n2 ) if (n1 = n2) return n1; else return n2;在有返回值的方法中,return語句是必須的要注意必須在所有的情況下,程序都有返回值
14、。如下例:編譯器會(huì)認(rèn)為,該方法有可能不會(huì)有返回值,因此會(huì)報(bào)錯(cuò)(雖然邏輯上是完整的)要解決這個(gè)問題,改為:public static int sign ( int n) if (n 0) return 1; else if (n = 0) return 0; else if (n 0) return 1; else if (n = 0) return 0; else return -1;方法可以重復(fù)使用方法的一個(gè)好處就是可重復(fù)使用。max方法不僅可以在MethodExample中使用,還可以在其他類中調(diào)用。如果創(chuàng)建一個(gè)新類Test,可以通過 類名.方法名 調(diào)用max方法(例如:MethodExa
15、mple.max)通過值傳遞代碼示例:public class PassByValueExample public static void main(String args) int x = 1; int y = 2; System.out.printf(Before invoke the swap method: x = %d, y = %dn, x, y); swap(x, y); System.out.printf(After invoke the swap method: x= %d, y = %dn, x, y); public static void swap ( int n1,
16、int n2 ) System.out.printf(tInside the swap methodn); System.out.printf(ttBefore swap: n1 = %d, n2 = %dn, n1, n2); int temp = n1; n1 = n2; n2 = temp; System.out.printf(ttAfter swap: n1 = %d, n2 = %dn, n1, n2); Before invoke the swap method: x = 1, y = 2 Inside the swap method Before swap: n1 = 1, n2
17、 = 2 After swap: n1 = 2, n2 = 1After invoke the swap method: x= 1, y = 2輸出結(jié)果:可以看到,這次 swap 失敗了。x、y 的值并沒有被交換這是因?yàn)樵?Java 中,方法調(diào)用是“通過值傳遞參數(shù)的”!在方法調(diào)用時(shí),實(shí)參的值,被copy給形參。因此,在方法內(nèi)部改變形參的值,并不會(huì)影響到實(shí)參的值。public static void main (String args) int x = 1; int y = 2; swap(x, y);public static void swap(int n1, int n2) int tem
18、p = n1; n1 = n2; n2 = temp;實(shí)參形參copy重載方法(Overload)如果存在多個(gè)同名方法,而這些方法的參數(shù)表不同(或許參數(shù)個(gè)數(shù)不同,或許參數(shù)類型不同,或許兩者都不同),這種現(xiàn)象稱為重載。例子:public class OverloadTest public static void main(String args) System.out.printf(The maximum between %d and %d is %dn, 1, 2, max(1, 2); System.out.printf(The maximum between %f and %f is %f
19、n, 1.0, 2.0, max(1.0, 2.0); System.out.printf(The maximum between %f, %f, and %f is %fn, 1.0, 2.0, 3.0, max(1.0, 2.0, 3.0); public static int max ( int n1, int n2 ) if (n1 = n2) return n1; else return n2; public static double max ( double n1, double n2 ) return (n1 = n2) ? n1 : n2; public static dou
20、ble max( double n1, double n2, double n3 ) return max(max(n1, n2), n3); 歧義調(diào)用有時(shí)一個(gè)方法調(diào)用會(huì)有兩個(gè)或更多可能的匹配,編譯器無法判斷哪個(gè)更為合適。這稱為歧義調(diào)用(ambiguous invocation)。歧義調(diào)用會(huì)產(chǎn)生編譯錯(cuò)誤,考慮如下代碼:max(int, double)max(double, int)都可能與max(1, 2)匹配。由于兩個(gè)方法誰也不比誰更合適,所以這個(gè)調(diào)用是有歧義的,導(dǎo)致編譯錯(cuò)誤。歧義調(diào)用的例子:解決方法:System.out.println(max(1, (double)2); 或System
21、.out.println(max(double)1, 2);public class AmbiguousOverloadTest public static void main(String args) System.out.println(max(1, 2); public static double max ( double n1, int n2 ) if (n1 = n2) return n1; else return n2; public static double max ( int n1, double n2 ) if (n1 = n2) return n1; else retur
22、n n2; 編譯錯(cuò)誤下面的方法,那些是重載方法?public class OverloadExample public static int max ( int n1, int n2 ) / . . public static double max ( int n1, int n2 ) / . . public static int max ( int a1, int a2 ) / . . public static int max( short s1, short s2) / . . 參數(shù)表不變,只改變返回值,不是重載只改變了參數(shù)表中的形參的命名,類型未變化,不是重載局部變量的作用域局部變量
23、:方法內(nèi)定義的變量。作用域:變量能被引用到的程序段。局部變量的作用域從該變量的說明開始到包含該變量的體結(jié)束為止,局部變量必須先聲明后使用。在不嵌套的不同體中,可以用相同的變量名多次聲明局部變量,但在嵌套體中不能兩次聲明一個(gè)局部變量。 在for循環(huán)頭中初始化操作聲明的變量,其作用域是整個(gè)for循環(huán)。但是在循環(huán)體內(nèi)聲明的變量,其作用域只限于循環(huán)體內(nèi),從它的說明到包含它的體結(jié)尾這一部分public static void method1 () for (int i=0; i10; i+) / . . int j = 10; / . . i的作用域j的作用域public static void met
24、hod1 () int x = 0; int y = 0; for (int i=0; i10; i+) x = x + i; for (int i=0; i10; i+) y = y + i; public static void method2 () int i = 0; int x = 0; for (int i=0; i10; i+) x = x + i; 正確:在兩個(gè)非嵌套的程序塊中,可以重復(fù)定義變量。錯(cuò)誤:在兩個(gè)嵌套的程序塊中,不可以重復(fù)定義變量。方法抽象可以將方法體看作一個(gè)黑盒子,包括了方法實(shí)現(xiàn)的細(xì)節(jié)。一旦編寫好一個(gè)方法就可以在任何地方重復(fù)使用。信息隱藏。對(duì)用戶隱藏實(shí)現(xiàn)的細(xì)節(jié)。減
25、少復(fù)雜度。方法頭方法體輸入?yún)?shù)(可選)返回值(可選)黑盒子Math類中的方法Math 類包含用于執(zhí)行基本數(shù)學(xué)運(yùn)算的方法,如初等指數(shù)、對(duì)數(shù)、平方根和三角函數(shù)。 Math 類的 JDK 文檔類常量:public static double PIpublic static double E三角函數(shù)public static double sin(double a)如:Math.sin(Math.PI/2) 得到1.0public static double cos(double a)如:Math.cos(Math.PI/2) 得到 0.0public static double tan(double
26、 a)public static double acos(double a)public static double asin(double a)public static double atan(double a)指數(shù)函數(shù)public static double exp(double a) eapublic static double log(double a) ln(a)public static double log10(double a) log10(a)public static double pow(double a, double b) abpublic static doubl
27、e sqrt(double a) a的正平方根取整public static double ceil(double a)得到向上與a最接近的整數(shù)public static double floor(double a)得到向下與a最接近的整數(shù)public static double rint(double a)得到與a最接近的整數(shù)。如果到兩個(gè)整數(shù)的距離相等,則返回其中的奇數(shù)public static int round(float a)四舍五入:(int)Math.floor(a + 0.5)public static double round(double a)四舍五入:(long)Math.
28、floor(x + 0.5)min/max/abspublic static double min(double a, double b)public static float min(float a, float b)public static long min(long a, long b)public static int min(int a, int b)public static double max(double a, double b)public static float max(float a, float b)public static long max(long a, l
29、ong b)public static int max(int a, int b)public static double abs(double a)public static float abs(float a)public static long abs(long a)public static int abs(int a)randompublic static double random()得到 0.0, 1.0) 之間的一個(gè)隨機(jī)數(shù)生成 0 - 9 之間均勻分布的隨機(jī)數(shù) (int) (Math.random() * 10)生成 50 99 之間均勻分布的隨機(jī)數(shù) 50 + (int) (M
30、ath.random() * 50)通常, a + (Math.random() * b)生成在 a, a+b) 之間的隨機(jī)數(shù)例:生成隨機(jī)字符生成隨機(jī)Unicode字符每個(gè)字符都有一個(gè)唯一的統(tǒng)一碼(Unicode),它在0到十六進(jìn)制FFFF(即十進(jìn)制的65535)之間。生成一個(gè)隨機(jī)字符就是生成0到65535之間的一個(gè)隨機(jī)整數(shù): (int) (Math.random() * (65535 + 1)生成隨機(jī)小寫字符小寫字母的Unicode是一串連續(xù)整數(shù),從小寫字母a的Unicode開始,然后是b,c,和z的Unicode。a的Unicode是:(int)aa - z 之間的隨機(jī)字符的Unicode
31、為: (int) ( (int)a + Math.random() * ( (int)z - (int)a + 1 )由于char運(yùn)算和數(shù)字運(yùn)算等價(jià),因此可以簡化為: (char) (a + Math.random() * (z - a + 1)一般地,可以用以下方法生成任意兩個(gè)字符 ch1和ch2 (ch1 ch2)之間的隨機(jī)字符: (char) (ch1 + Math.random() * (ch2 - ch1 + 1)public class RandomCharacter / 生成 ch1 到 ch2 之間的隨機(jī)字符 public static char getRandomCharac
32、ter(char ch1, char ch2) return (char) (ch1 + Math.random() * (ch2 - ch1 + 1); / 隨機(jī)生成小寫字符 public static char getRandomLowerCaseLetter() return getRandomCharacter(a, z); / 隨機(jī)生成大寫字符 public static char getRandomUpperCaseLetter() return getRandomCharacter(A, Z); / 隨機(jī)生成數(shù)字 public static char getRandomDigit
33、Character() return getRandomCharacter(0, 9); / 隨機(jī)生成 Unicode 字符 public static char getRandomCharacter() return getRandomCharacter(u0000, uFFFF); 包(package)Java允許把多個(gè)類放到一起成為一組,稱為包(package),包可以:避免命名沖突。當(dāng)開發(fā)的可重用類被其他程序員共享時(shí),命名沖突時(shí)有發(fā)生,例如,有相同名字的兩個(gè)類。為了防止類似事件發(fā)生,可將類放入包中,通過包名來引用。便于發(fā)布軟件。包將相關(guān)的類組織到一起,這樣可以很容易被發(fā)布。保護(hù)類。包可
34、以提供對(duì)類的保護(hù),允許同一個(gè)包中的類訪問類中被保護(hù)的成員,而外部類則無此權(quán)限。標(biāo)準(zhǔn)Java庫被分類成許多包,如:javax.swing。包是分層次的,并且可以有包含關(guān)系,類似于文件系統(tǒng)中的目錄。為了保證唯一性,Sun推薦使用公司/組織的倒寫的Internet域名作為包名稱,然后對(duì)不同的項(xiàng)目使用子包。如:.xidian.liujiong類必須隸屬于某個(gè)包中。類就像文件系統(tǒng)中的文件。如果某個(gè)類的包名稱為空,則稱為“缺省包”,就像文件系統(tǒng)中的根目錄一樣。java、java.lang、java.util 都是包c(diǎn)n、、.xidian、.xidian.javacourse 都是包包和類的存儲(chǔ)結(jié)構(gòu)從某個(gè)相對(duì)路徑開始按照包名創(chuàng)建目錄從c:myjava開始。這個(gè)開始路徑,被稱為“類路徑”(classpath)包:.xidian.javacourseHelloWorld類位于包:.xidian.javacourse 中類中定義包名稱在類文件的最前面,通過package來定義本類所在的包編譯HelloWorld:在命令行下,進(jìn)入 c:myjava目錄執(zhí)行:javac cn/edu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年教育決策:大數(shù)據(jù)驅(qū)動(dòng)下的學(xué)校治理與績效評(píng)價(jià)報(bào)告
- 房地產(chǎn)企業(yè)2025年財(cái)務(wù)風(fēng)險(xiǎn)控制與穩(wěn)健性發(fā)展策略報(bào)告
- 2025年元宇宙社交平臺(tái)用戶行為分析與互動(dòng)模式研究報(bào)告
- 虛擬現(xiàn)實(shí)教育產(chǎn)品在職業(yè)院校計(jì)算機(jī)專業(yè)教學(xué)中的應(yīng)用效果報(bào)告
- 2025年元宇宙社交平臺(tái)社交圈層構(gòu)建與社區(qū)生態(tài)研究報(bào)告
- 2025年元宇宙基礎(chǔ)設(shè)施建設(shè)關(guān)鍵環(huán)節(jié):區(qū)塊鏈技術(shù)應(yīng)用現(xiàn)狀與展望報(bào)告
- 2025年江蘇省常州市八年級(jí)英語第二學(xué)期期末預(yù)測試題含答案
- 深度剖析2025年教育行業(yè)招生策略與行業(yè)競爭態(tài)勢分析報(bào)告001
- 保育員考試題目及答案2019
- 保安師傅考試試題及答案
- 四川省成都市九縣區(qū)2023-2024學(xué)年高一下學(xué)期期末調(diào)研考試化學(xué)試題(解析版)
- (完整版)python學(xué)習(xí)課件
- 聯(lián)塑管材檢驗(yàn)報(bào)告模板
- 浙江省杭州市(2024年-2025年小學(xué)四年級(jí)語文)部編版質(zhì)量測試((上下)學(xué)期)試卷及答案
- 高鈉血癥護(hù)理查房
- 小學(xué)數(shù)學(xué)練習(xí)設(shè)計(jì)的有效性研究結(jié)題報(bào)告
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蝕工程施工及驗(yàn)收規(guī)范
- 汕頭市龍湖區(qū)2021年教師招聘《教育公共知識(shí)》試題及答案
- 浙江溫州十校2023至2024學(xué)年高二下學(xué)期6月期末聯(lián)考化學(xué)試題附參考答案(解析)
- AQ/T 2059-2016 磷石膏庫安全技術(shù)規(guī)程(正式版)
- 2021年廣東省深圳實(shí)驗(yàn)學(xué)校自主招生數(shù)學(xué)模擬試卷
評(píng)論
0/150
提交評(píng)論