Java SE(4)——方法详解

1.方法的概念&使用

1.1 什么是方法?

Java中的方法类似于C语言中的函数,是用于执行特定任务的代码块。
那么用方法组织起来的代码块和普通的代码相比有什么优势呢?

1.当代码规模较大且应用场景较为复杂时,方法能够模块化地组织代码,让代码更清晰,可读性更高
2.让代码能够被重复利用(方法的多次调用)
3.基于现有的方法进行开发,减少开发成本

不使用方法

    public static void main(String[] args) {
        int year1 = 1900;
        int year2 = 1901;
        //判断year1是否为闰年
        if (year1 % 4 == 0 && year1 % 100 != 0 || year1 % 400 == 0){
            System.out.println(year1 + "是闰年");
        }else {
            System.out.println(year1 + "不是闰年");
        }
        //判断year2是否为闰年
        if (year2 % 4 == 0 && year2 % 100 != 0 || year2 % 400 == 0){
            System.out.println(year2 + "是闰年");
        }else {
            System.out.println(year2 + "不是闰年");
        }
    }

使用方法

    public static void isLeapYear(int year){
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
            System.out.println(year + "是闰年");

        }else {
            System.out.println(year + "不是闰年");
        }
    }
    public static void main(String[] args) {
        int year1 = 1900;
        int year2 = 1901;
        isLeapYear(year1);
        isLeapYear(year2);
    }

1.2 方法定义

语法格式:

修饰符 返回值 方法名(形参类型 形参1,形参类型 形参2,…) {
//方法体
return(返回值)
}

示例一:判断闰年

    public static void isLeapYear(int year){
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
            System.out.println(year + "是闰年");

        }else {
            System.out.println(year + "不是闰年");
        }
    }

示例二:判断最大值

    public static int max(int x,int y){
        return x > y ? x : y;
    }

方法组成部分介绍:
1.public和static都是方法的修饰符,决定了方法的性质,但不影响方法本身的执行逻辑,修饰符在后面类和对象的博文中再详细介绍,目前定义方法统一使用public+static
2.修饰符后面的void表示无返回值,意味着可以没有return;int表示该方法必须返回一个int类型的数据。当然,方法的返回值也可以是其他基本数据类型,引用类型,自定义类型
3.方法名:用于标识方法的名称,一般的命名规范采用小驼峰(第一个单词首字母小写,后面单词的首字母大写)
4.参数列表:方法可以接受任意数量/类型参数,参数=类型+名称,参数之间使用逗号隔开。上面的示例中,isLeapYear(int year)表示接受一个整形参数;max(int x,int y)表示接受两个整形参数
5.方法体:花括号内的代码块,它是方法的具体实现

1.3 方法调用

在这里插入图片描述

注意:

  • 定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行
  • 调用方法的时候,需要使用方法名+参数列表的形式进行调用
  • 如果有返回值,需要接收返回值结果
  • Java中的方法不需要进行声明,定义完成后可直接调用

1.4 实参和形参的关系

形参(形式参数)
定义:定义方法时参数列表中的变量,用于接收调用者传递过来的值
作用域:仅限于方法体内部,生命周期和方法一致

实参(实际参数)
定义:调用方法时传递给方法的值或变量
作用域:这与实参所在的域和性质有关

传递方法:
1.按值传递:这意味着传递的值是实参的副本,接收数据的形参在内存中拥有独立的空间。对形参的改变不会映射到实参上面
在这里插入图片描述
在这里插入图片描述
由此可见,调用swap方法后,swap方法内部的a和b变量已经完成了交换,但是main方法中实际的参数a和b没有改变
2.引用类型的传递:1对于引用类型(如数组),传递的是引用的副本。这意味着实参和形参都指向同一个对象,因此通过形参来修改对象的内部状态会影响实参
在这里插入图片描述

2.方法重载

2.1 意义

以上面的add方法为例,完成两个整型变量的相加没问题,但是如果想完成两个float数的相加,就会报错在这里插入图片描述
解决办法一:重新定义一个方法用于完成两个float数的相加
在这里插入图片描述
但是,如果要完成两个double数的相加,又要定义一个新的方法。这样就会导致要定义许多不同方法名的方法,比较麻烦。所以,Java中就提出了一个新的概念,方法重载
2.方法重载
在这里插入图片描述
在同一作用域中,可以存在方法名相同的方法,但参数列表一定不同,编译器通过方法签名来区分这些方法

注意:

  • 方法名必须相同
  • 参数列表必须不同(参数类型/参数顺序/参数个数,至少有一项不同,和参数名无关)
  • 与返回值是否相同无关

2.2 方法签名

在同一个作用域中,不能定义两个相同名称的标识符。比如,在同一个main方法中无法定义两个名字一样的变量,因为对于变量来说,变量名就是标识符。但是,上面介绍到了方法的重载,这意味着在同一个作用域/类(类在后面的博文中介绍)可以存在两个方法名相同的方法,这是因为方法的标识符并不是方法名,而是方法签名
方法签名:经过编译器编译后的方法的最终名称。具体组成=方法全路径名+参数列表(只包含参数类型,不包含参数名称)+返回值类型

3.方法递归

概念:方法在执行过程中调用自身
递归的必要条件:

  • 将原问题划分成其⼦问题,注意:子问题必须要与原问题的解法相同
  • 要有递归出口

示例:求n的阶乘

    public static int factor(int n){
        if(n == 1){
            return 1;
        }
        return factor(n - 1) * n;
    }
    public static void main(String[] args) {
        System.out.println(factor(5));
    }

递归过程:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值