Skip to content

11.方法

方法是完成某个功能的一组语句,通常将常用的功能写成一个方法。 定义方法就是编写一段有特定功能的代码,在程序中使用同样功能的地方,没有必要重复编写同样的代码,只要调用定义好的方法就可以。可以实现代码的重用。简化了程序的编写和维护工作。

11.1 方法的声明

java
    /**
     *  访问控制符  修饰符  返回类型 方法名字(参数列表 ...){
     *      方法体
     *  }
     */

    public static void fun1(int numa){
        System.out.println("Fun1.fun1");
    }

方法使用大括号包含语句块称为方法体,用于执行特定的功能操作。

方法体当中使用return关键字,它的作用是结束方法执行,并且把方法的执行(运算)结果返回到方法外部。 返回值:方法在执行完毕后返回给调用它的程序的数据 返回值类型:方法要返回的结果的数据类型

11.2 方法名词解释

  1. 修饰符:public 、static 被称为修饰符(后续会详细讲解它们);
  2. 返回值类型:用来说明该方法运算结果的类型。如果返回其他类型,编译就可能出错;
  3. 方法名:它作为调用时引用方法的标识;
  4. 形参列表:在方法被调用时用于接受外部传入的变量称为形式参数简称为形参,方法的形参个数可以是0个到多个,每个参数前面要声明参数的数据类型称为参数类型;每个参数要用逗号分开。也可以一个参数都没有。 方法体:它是一个语句块,执行特定的功能操作。对于有返回值类型的方法,方法体当中最后一个语句是
  5. return关键字,它的作用是把方法的执行(运算)结果返回到方法外部。
  6. return 表达式:return是关键字,作用是将return后面表达式的结果作为方法的返回值。需要注意表达式的类型,必须与方法头中声明的“返回类型”相匹配。

11.3 方法的分类

  1. 根据参数个数:
  2. 无参方法 有参方法
  3. 参数类型为基本数据类型
  4. 参数类型为引用数据类型 根据返回值类型: 有返回值的方法: 返回值类型为基本数据类型 返回值类型为引用数据类型 无返回值的方法 返回值类型使用void关键字

11.4 方法的调用

1、形参必须注明数据类型; 2、实参直接写,不需要类型声明;

3、return只能返回一次; 4、遇到return语句,方法结束执行,后续语句不执行; 5、方法的返回值,必须与方法声明中的返回值类型匹配;

6、方法定义,不能写在main()中; 7、方法是不能嵌套的。

11.5 方法的的递归

java
package com.neusoft.fun;

/**
 * 项目: javaadvice
 * 创建时间:2020/11/15  14:35
 * 作者 :jshand
 * 描述 : 方法的说明
 */
public class Fun2 {




//    public static void sayHello(){
//        System.out.println("大家好");
//        Fun2.sayHello();
//    }


    /**
     * 5!   5* 4!       4!= 4*3!  3!= 3*2     1?
    //* @param args
     //递归,可以使用循环实现 ,
     */
    public static int jc( int num ){
        if(num == 1){
            return 1;
        }
        return num * jc(num-1);
    }

    public static void main(String[] args) {
        int jc = Fun2.jc(3);
        System.out.println("jc: "+jc);
    }
}

11.6 方法的重载

方法的重载(overload) 方法的重载就是在同一个类中允许同时存在一个以上同名的方法

方法重载的规则 方法名称相同 方法的参数必须不同 参数个数不同 或 参数类型不同 方法的返回值类型可以相同,也可以不同

java
 /**
     * 有参函数
     * @param numa
     * @param numb
     */
    public static void sum(int numa ,int numb){
        System.out.println("Fun1.sum:"+(numa+numb));
    }


    //可以出现同名函数 ,根据参数列表区分, 方法的重载
    /**
     * 方法名一样,参数列表不一样
     * @param numa
     * @param numb
     */
    public static void sum(double numa ,double numb){
        System.out.println("Fun1.sum:"+(numa+numb));
    }

11.7 可变长参数

在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用

例如

print("hello");

print("hello","lisi");

print("hello","张三", "alexia");

使用...表示可变长参数,在具有可变长参数的方法中可以把参数当成数组使用

例如可以循环输出所有的参数值。

java
void fun(类型... 形参名字){
//	形参名字.length
}

系统中常见的

java
    //printf的用法
    public static void main(String[] args) {

        String name ="刘备";
        int age = 18 ;

        String address ="东北" ;
        
        System.out.printf("大家好,我是%s, 我今年%d,家住%s",name,age,address);
    }

需求,根据给定的参数列表,拼接成一个字符串,输出

java
package com.neusoft.fun;

/*
 * 项目:      javaadvice
 * 类名:       Fun4
 * 创建时间:  2020/11/17  14:38
 * 描述 :
 * 作者 :     张金山 
 * QQ:	314649444
 * Site:      https://jshand.gitee.io
 */
public class Fun4 {


    public static void main(String[] args) {

        out("大家好","我是刘备","我今年18");
    }


    public static void out(String ... msgs){

        StringBuffer stringBuffer = new StringBuffer();

        for (String msg : msgs) {
            stringBuffer.append(msg+"\t");
        }
        System.out.println(stringBuffer.toString());
    }
}

使用原则:

  1. 在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法。

    java
    public class Fun4 {
        public static void main(String[] args) {
            out("大家好","我是刘备"); //匹配的是固定长度
        }
        public static void out(String str1 ,String str2){
            System.out.println("固定长度\t"+str1 +"\t"+str2);
        }
        public static void out(String str1,String ... msgs){
    
            StringBuffer stringBuffer = new StringBuffer();
    
            for (String msg : msgs) {
                stringBuffer.append(msg+"\t");
            }
            System.out.println(stringBuffer.toString());
        }
    }
  2. 如果要调用的方法可以和两个可变参数匹配,则出现错误

  3. 一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的最后一个参数

    • 错误

    • 正确

  4. 避免带有可变长参数的方法重载。

Released under the MIT License.