提綱:
<code>1、方法的概念 2、方法語法 3、方法使用 4、參數 5、返回值 6、方法的分類 7、作業/<code>
一、方法的概念
1.1、什麼是方法
<code>Java中的方法,類似於其他語言的函數,一段用來完成特定功能的代碼。這段代碼可以被多次調用並執行。 函數:function 方法:method/<code>
1.2、為什麼使用方法/函數
<code>如果程序中某個功能需要執行多次的時候,CV大法,代碼有以下問題: 1、代碼過於臃腫! 2、閱讀性極差! 3、維護性也差!/<code>
1.3、方法的作用
<code>1、避免重複代碼,增強程序的可讀性。 2、提高程序的可維護性。/<code>
二、方法的語法
2.1、方法的使用
<code>step1:方法聲明,只是做一個方法聲明,裡面寫清楚方法的代碼。但是這些代碼並不執行。 step2:方法的調用,調用幾次,方法中的代碼就執行幾次。 /<code>
2.2、方法的語法
<code>1.聲明一個方法的語法: 比照葫蘆畫瓢:照main函數聲明一個方法 public static void main(String[] args){} /* public static :不要問!!! void:一個方法的返回值,void詞義"空的",就表示該方法沒有返回值。 返回值:一個方法執行後,返回給調用處的結果。未完待續。。。 main,方法名,滿足標識符的命名規範。 (),是方法的標誌。 參數:未完待續。。 {},裡面的代碼就是方法體(method body)。 */ 2.聲明方法的語法格式: [修飾符1,修飾符2...] 返回值類型 方法名(形式參數){ 方法體;//方法中的代碼 } /<code>
注意點:方法在哪裡聲明啊?類裡,其他方法外。一定不能把一個方法的聲明寫在另一個方法裡。
示例代碼:
<code>public class Test1Method { public static void main(String[] args){//程序的入口,JVM /* 方法是條狗,哪裡需要哪裡吼!! 方法名 */ //1.此處要求1-10的和 //step2:調用方法 getSum();//調用處 System.out.println("此處是其他的代碼。。10行。。"); //2.此處又需要求1-10的和 getSum();//調用處 System.out.println("helloworld..."); //3.又需要求1-10的和 getSum();//調用處 System.out.println("main...over..."); } //定義一個我自己寫方法-->用於求和,1-10的和 public static void getSum(){ int sum = 0; for(int i= 1;i <= 20;i++){ sum += i; } System.out.println("1-20的和:"+sum); } }/<code>
示例代碼:
<code>public class Test3Method { //定義的方法,用於打印一行分割線 public static void printLine(){ for(int i= 0;i<20;i++){ System.out.print("-"); } System.out.println(); } public static void main(String[] args) { //打印《改良版靜夜思》這首詩,每打印一句詩,來一行分割線 System.out.println("窗前明月光"); printLine(); System.out.println("疑是地上霜"); printLine(); System.out.println("舉頭望明月"); printLine(); System.out.println("地上鞋三雙"); printLine(); } } /<code>
三、方法的參數
什麼是參數?當前方法執行的時候所需要的外部(調用處)傳入的數據。
- 形式參數:簡稱叫形參。聲明方法的時候,用於接收外部傳入的數據。
- 實際參數:簡稱叫實參。調用方法的時候,給形參所賦值,實際的數據。
調用方法的時候,用實際參數給形式參數進行賦值,這個過程被稱為傳參。(參數傳遞:實參-->形參)
1、當我們在設計一個方法的時候,要看方法中有幾個數值無法確定,需要由調用處傳入,那麼就設計幾個參數。多個參數之間使用,分隔開。
2、方法調用的時候:實參一定一定嚴格匹配形參:實參是按照順序一一配給形參。個數,類型,順序,嚴格匹配。
示例代碼:
<code>public class Test1Param { //該方法用於求1-10的和 /* 將方法中,不知道具體的數值的變量,不要聲明在方法裡,寫成參數。 參數: 形參的用途:專門用於接收,調用方法的時候,外部傳入的數據 實參:在調用方法的時候,傳給形參的實際的數值。 */ public static void getSum(int n){//形式參數,簡稱形參 int sum = 0;//局部變量:必須賦值才能使用 for(int i= 1;i <= n;i++){ sum += i; } System.out.println("1-"+ n +"的和:"+sum); } public static void main(String[] args){//JVM自動 //求和,1-10的和 getSum(10);//實際參數 //。。。 //求和,1-20的和 getSum(20);//n=20 //... //求和,1-100的和 getSum(100);//n=100 } }/<code>
方法調用時,實參必須嚴格匹配形參。示例代碼:
<code>public class Test2Param { //該方法用於比較2個int數的大小 public static void compare(int a,int b){ System.out.println(a); System.out.println(b); if(a > b){ System.out.println(a + " > " + b); }else if(a < b){ System.out.println(a + " < " + b); }else{ System.out.println(a + " = " + b); } } //測試參數: public static void test1(int a,double b,String c){ System.out.println("a:"+a); System.out.println("b:"+b); System.out.println("c:"+c); } public static void test2(){ for(int i= 1;i<=10;i++){ System.out.println("hello world。。"); } } public static void main(String[] args) { //課堂練習:設計一個方法,用於比較2個數的大小 compare(5,10); test1(10,"haha",3.14); System.out.println("Hello World!"); } } /<code>
四、方法的返回值
<code>1、什麼叫返回值? 返回值:表示一個方法執行之後,需要返回給調用處的結果。需要在調用處聲明一個變量,來接收這個結果。 返回值的注意點: A:一個方法可以有返回值,也可以沒有。 如果有,那麼返回值的類型,要在聲明聲明方法的時候寫清楚,如果沒有返回值就寫void(空的)。 public static 返回值類型/void 方法名(形式參數){ 方法體; } B:如果一個方法有返回值,那麼只能返回一個。 C:如果一個方法聲明瞭有返回值,那麼在方法中,必須使用return語句將數值返回。 /<code>
4.1、return語句
詞義:"返回"
<code>return語句有兩個作用 1、將一個方法的結果返回給調用處。 2、結束該方法的執行。/<code>
示例代碼:
<code>class Test3Return { //聲明方法的時候,需要寫清楚該方法的返回值,是什麼類型就寫什麼類型, //如果該方法沒有返回值,就寫void public static int getSum(){ int sum = 0; for(int i=1;i<=10;i++){ sum += i; } return sum;//將sum的值,傳遞給方法的調用處 } public static void main(String[] args) { //一個方法有返回值,舉例:設計一個方法,求1-10的和。需要將結果,在main中打印。 int res = getSum();//相當於int res = sum System.out.println("1-10的和:" + res);//55 System.out.println(getSum());//55 } } /<code>
return語句的注意點:
<code>A:一個方法聲明瞭有返回值,那麼方法中必須使用return關鍵字將結果返回給調用處。 B:一個方法聲明瞭有返回值,那麼方法中如果有分支,循環語句等,要保證無論執行哪個分支,都要有return語句可以被執行到。 C:一個方法聲明瞭有返回值,那麼return後的數值必須和聲明的數據類型一致。(自動轉型) D:一個方法如果沒有返回值,那麼也可以使用return語句,結束方法的執行。 E:習慣上return後沒有語句了。/<code>
示例代碼:
<code>class Test4Return { //1.方法聲明有返回值,那麼方法中必須有return語句,返回結果。 public static int test1(){ return 1; } //2.方法上聲明的返回值類型,和實際返回的數值的類型,要匹配。 //但是包含那些兼容的可以自動轉型的類型 //int:byte,short,char,int //double:byte,short,char,int,long,float,double public static byte test2(){ int b1 = 3; return (byte)b1; } public static int test3(){ return 1;//回傳數據,結束方法 //return 2;//無法訪問的語句 } //如果一個方法中沒有返回值,使用return就是結束方法。 public static void test4(){ int age = -30; if(age < 0){ return ; } System.out.println(age); } public static int test5(){ int age = -30; if(age > 0){//分支,循環--->看條件 return age; }else{ return 0; } } public static void test6(){ for(int i=1;i<=10;i++){ if(i==5){ //break;//結束了這個循環,代碼向下繼續執行。。 return;//結束這個方法的執行。。 } System.out.println(i); } System.out.println("test6...over..."); } //思考test7代碼是否有誤? public static int test7(){ for(int i= 1;i<=10;i++){ return i; } } public static void main(String[] args) { //System.out.println(test5()); test6(); } } /<code>
4.2、方法的分類
<code>1.無參無返回值的方法: public static void methodName(){ } 2.有參無返回值的方法: public static void methodName(形式參數){ } 3.無參有返回值的方法: public static returnType methodName(){ } 4.有參有返回值的方法: public static returnType methodName(形式參數){ }/<code>
五、遞歸方法
遞歸:英文單詞:Recursion
<code>函數/方法,調用? 方法在有需要的位置調用即可。 一個方法中可以調用另一個方法。 一個方法中也可以自己調用自己。遞歸方法。/<code>
可能出現的問題:Exception in thread "main" java.lang.StackOverflowError,棧空間溢出異常。
- 方法自己調用自己
- 要有出口,逐漸的向出口靠近
示例代碼:
<code>public class Test1Recursion { //遞歸方法 public static int getSum(int n){ System.out.println("******"); if(n == 1){ return 1; }else{ return getSum(n - 1) + n; } } public static void main(String[] args){ /* 求1-5的和: +1+2+3+4+5 +1+2+3+4 +5 求1-n的和:getSum(n),該方法用於表示求1-n的和。 getSum(5) :getSum(4) + 5 :getSum(3) + 4 :getSum(2) + 3 getSum(1) + 2 1 */ int res = getSum(5); System.out.println(res); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); } }/<code>
六、作業
1、設計一個方法,接收2個整數作為參數,返回較大的一個數。
2、設計一個方法,求n的階乘。並返回結果。
3、設計一個方法,使用*打印正方形。正方形的邊長,由參數傳入。