方法调用、重载、递归

1 方法定义

[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}

例如代码:
public static void sumInt(int a , int b){
	int c = a + b;
	System.out.println(a + "+" + b + "=" + c);
}
public static是修饰符列表;
void是返回值类型;
sumInt是方法名;
(int a , int b)是形式参数列表,简称形参,每一个形参都是局部变量;
形参后面使用一对儿大括号括起来的是方法体,方法体是完成功能的核心代码,方法体中的代码有执行顺序的要求,遵循自上而下的顺序依次逐行执行,不存在跳行执行的情况。
再如代码:
public static int sumInt(int a , int b){
	int c = a + b;
    return c;
}
以上程序中sumInt之前的int是返回值类型。
  • [修饰符列表],此项是可选项,不是必须的。
  • 返回值类型,此项可以是Java语言当中任何一种数据类型,包括基本数据类型,也包括所有的引用数据类型,当然,如果一个方法执行结束之后不准备返回任何数据,则返回值类型必须写void。返回值类型例如:byte,short,int,long,float,double,boolean,char,String,void等。
  • 方法名,此项需要是合法的标识符,开发规范中要求方法名首字母小写,后面每个单词首字母大写,遵循驼峰命名方式,见名知意,例如:login、getUsername、findAllUser等。
  • 形式参数列表(int a, int b),此项又被称为形参,其实每一个形参都是“局部变量”,形参的个数为0~N个,如果是多个参数,则采用半角“,”进行分隔,形参中起决定性作用的是参数的数据类型,参数名就是变量名,变量名是可以修改的,也就是说(int a , int b)也可以写成(int x , int y)。
  • 方法体,由一对儿大括号括起来,在形参的后面,这个大括号当中的是实现功能的核心代码,方法体由Java语句构成,方法体当中的代码只能遵循自上而下的顺序依次逐行执行,不能跳行执行,核心代码在执行过程中如果需要外部提供数据,则通过形参进行获取。

2 方法调用

调用方法的语法格式是(前提是方法的修饰符列表中带有static关键字):“类名.方法名(实际参数列表);”,例如以下代码:

/**
 * @author wcs
 * @date 2021/8/4 17:43
 */
public class MethodTest01 {
    public static void main(String[] args) {
        MethodTest01.sumInt(12, 23);
        MethodTest01.sumDouble(23.3, 34.45);
    }

    public static void sumInt(int x, int y) {
        System.out.println(x + y);
    }

    public static void sumDouble(double a, double b) {
        System.out.println(a + b);
    }
}

运行结果:

image-20210804174746793

需要注意的是:

  1. 方法在调用的时候,实际传给这个方法的数据被称为实际参数列表,简称实参,Java语法中有这样的规定:实参和形参必须一一对应,所谓的一一对应就是,个数要一样,数据类型要对应相同。
  2. 当在a()方法执行过程中调用b()方法的时候,并且a()方法和b()方法在同一个类当中,此时“类名.”可以省略不写,但如果a()方法和b()方法不在同一个类当中,“类名.”则不能省略。

3 方法重载

不用方法重载:

/**
 * @author wcs
 * @date 2021/8/4 18:27
 */
public class MethodTest02 {
    public static void main(String[] args) {
        int x = sumInt(12, 34);
        long y = sumLong(3L, 4L);
        System.out.println(x);
        System.out.println(y);
    }

    public static int sumInt(int a, int b) {
        return a + b;
    }

    public static long sumLong(long a, long b) {
        return a + b;
    }
}

缺点:两个方法功能不同,但相似。程序员需要记住更多的方法名。

使用方法重载后:

/**
 * @author wcs
 * @date 2021/8/4 18:37
 */
public class MethodTest03 {
    public static void main(String[] args) {
        int x = sum(12, 34);
        long y = sum(3L, 4L);
        System.out.println(x);
        System.out.println(y);
    }

    public static int sum(int a, int b) {
        return a + b;
    }

    public static long sum(long a, long b) {
        return a + b;
    }
}

在Java语言中,是怎么进行方法的区分的呢?

首先Java编译器会通过方法名进行区分。

但是在Java语言中允许方法名相同的情况出现。

如果方法名相同的情况下,编译器会通过方法的参数类型进行方法的区分。

3.1 什么时候使用方法重载

在同一个类当中,如果“功能1”和“功能2”它们的功能是相似的,那么可以考虑方法重载。

条件1:在同一个类当中

条件2:方法名相同

条件3:参数列表不同

​ 参数个数不同算不同、参数的类型不同算不同、参数的顺序不同算不同。

同时满足以上3个条件,那么可以认定方法和方法之间发生了重载机制。

/**
 * @author wcs
 * @date 2021/8/4 18:54
 */
public class MethodTest04 {
    public static void main(String[] args) {
        m1(2);
        m1(23, 34);
        
        m2(2, 3.4);
        m2(45.3, 22);

        m3("张三");
        m3(33F);
    }

    //参数个数不同
    public static void m1(int a) {
        System.out.println("hello");
    }

    public static void m1(int b, int c) {
        System.out.println("world");
    }

    //参数顺序不同
    public static void m2(int a, double b) {
        System.out.println("int a,double b");
    }

    public static void m2(double b, int a) {
        System.out.println("double b,int a");
    }

    //c参数类型不同
    public static void m3(String name) {
        System.out.println(name);
    }

    public static void m3(float f) {
        System.out.println(f);
    }
}

运行结果:

image-20210804190316340

方法重载和返回值类型以及修饰符列表无关。

4 递归方法

方法自身调用自身就是方法递归。

/**
 * @author wcs
 * @date 2021/8/4 19:17
 */
public class MethodTest05 {
    public static void main(String[] args) {
        dosome();
    }

    public static void dosome() {
        System.out.println("开始执行");
        dosome();
        //永远不会执行到。
        System.out.println("执行完毕");
    }
}

以上便是递归算法,一直调用自身,直到内存占满。所以递归一定要有结束条件。(假设条件是对的,递归有的时候也会出现栈内存溢出错误,因为有可能递归的太深,栈内存不够了,还没执行到结束条件就已经压栈压满了。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值