Java小白入門教程(7)——方法的使用

提綱:

<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、設計一個方法,使用*打印正方形。正方形的邊長,由參數傳入。


分享到:


相關文章: