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

提纲:

1、方法的概念
2、方法语法
3、方法使用
4、参数
5、返回值
6、方法的分类
7、作业


一、方法的概念

1.1、什么是方法

Java中的方法,类似于其他语言的函数,一段用来完成特定功能的代码。这段代码可以被多次调用并执行。
函数:function
方法:method


1.2、为什么使用方法/函数

如果程序中某个功能需要执行多次的时候,CV大法,代码有以下问题:
  1、代码过于臃肿!
  2、阅读性极差!
  3、维护性也差!


1.3、方法的作用

1、避免重复代码,增强程序的可读性。
2、提高程序的可维护性。


二、方法的语法

2.1、方法的使用

step1:方法声明,只是做一个方法声明,里面写清楚方法的代码。但是这些代码并不执行。
step2:方法的调用,调用几次,方法中的代码就执行几次。
​


2.2、方法的语法

1.声明一个方法的语法:
比照葫芦画瓢:照main函数声明一个方法
public static void main(String[] args){}
/*
public static :不要问!!!
void:一个方法的返回值,void词义"空的",就表示该方法没有返回值。
  返回值:一个方法执行后,返回给调用处的结果。未完待续。。。
main,方法名,满足标识符的命名规范。
(),是方法的标志。
参数:未完待续。。
{},里面的代码就是方法体(method body)。
*/
​
2.声明方法的语法格式:
[修饰符1,修饰符2...] 返回值类型 方法名(形式参数){
    方法体;//方法中的代码
}
​

 

注意点:方法在哪里声明啊? 类里,其他方法外。一定不能把一个方法的声明写在另一个方法里。

示例代码:

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);
  }
​
​
​
}

示例代码:

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();
    
  
  }
}
​

 

三、方法的参数

什么是参数?当前方法执行的时候所需要的外部(调用处)传入的数据。

  • 形式参数:简称叫形参。声明方法的时候,用于接收外部传入的数据。
  • 实际参数:简称叫实参。调用方法的时候,给形参所赋值,实际的数据。

调用方法的时候,用实际参数给形式参数进行赋值,这个过程被称为传参。(参数传递:实参-->形参)

1、当我们在设计一个方法的时候,要看方法中有几个数值无法确定,需要由调用处传入,那么就设计几个参数。多个参数之间使用,分隔开。
2、方法调用的时候: 实参一定一定严格匹配形参:实参是按照顺序一一配给形参。个数,类型,顺序,严格匹配。

示例代码:

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
  }
}

方法调用时,实参必须严格匹配形参。示例代码:

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!");
  }
}
​

 


四、方法的返回值

1、什么叫返回值?
    返回值:表示一个方法执行之后,需要返回给调用处的结果。需要在调用处声明一个变量,来接收这个结果。
    
返回值的注意点:
    A:一个方法可以有返回值,也可以没有。
        如果有,那么返回值的类型,要在声明声明方法的时候写清楚,如果没有返回值就写void(空的)。
    
    public static 返回值类型/void 方法名(形式参数){
        方法体;
    }
    B:如果一个方法有返回值,那么只能返回一个。
    C:如果一个方法声明了有返回值,那么在方法中,必须使用return语句将数值返回。
    
​


4.1、return语句

词义:"返回"

return语句有两个作用
1、将一个方法的结果返回给调用处。
2、结束该方法的执行。

示例代码:

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
​
​
​
  }
}
​


return语句的注意点:

A:一个方法声明了有返回值,那么方法中必须使用return关键字将结果返回给调用处。
B:一个方法声明了有返回值,那么方法中如果有分支,循环语句等,要保证无论执行哪个分支,都要有return语句可以被执行到。
C:一个方法声明了有返回值,那么return后的数值必须和声明的数据类型一致。(自动转型)
D:一个方法如果没有返回值,那么也可以使用return语句,结束方法的执行。
E:习惯上return后没有语句了。

示例代码:

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();
    
  }
}
​

 


4.2、方法的分类

1.无参无返回值的方法:
public static void methodName(){
​
}
2.有参无返回值的方法:
public static void methodName(形式参数){
    
}
3.无参有返回值的方法:
public static returnType methodName(){
    
}
4.有参有返回值的方法:
public static returnType methodName(形式参数){
    
}

 


五、递归方法

递归:英文单词:Recursion

函数/方法,调用?
方法在有需要的位置调用即可。
一个方法中可以调用另一个方法。
一个方法中也可以自己调用自己。递归方法。

可能出现的问题:Exception in thread "main" java.lang.StackOverflowError,栈空间溢出异常。

  • 方法自己调用自己
  • 要有出口,逐渐的向出口靠近


示例代码:

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();
  }
}

 

 


六、作业

1、设计一个方法,接收2个整数作为参数,返回较大的一个数。

2、设计一个方法,求n的阶乘。并返回结果。

3、设计一个方法,使用*打印正方形。正方形的边长,由参数传入。

已标记关键词 清除标记