当前位置: 首页 > news >正文

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

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

相关文章:

  • 如何使用极狐GitLab 议题看板?
  • 【25软考网工】第四章(2)WLAN通信技术、WLAN频谱与信道
  • CMU-15445(1)——环境搭建
  • Missashe考研日记-day29
  • CUDA编程 - 测量每个block内线程块的执行时间 - 如何应用到自己的项目中 - clock()
  • 数据库对象概述
  • layui时间范围
  • AI时代下前端的未来发展与当下状况
  • 100%提升信号完整性:阻抗匹配在高速SerDes中的实践与影响
  • 论文阅读_Citrus_在医学语言模型中利用专家认知路径以支持高级医疗决策
  • 【Vue.js】组件数据通信——基于Props 实现父组件--> 子组件传递数据(最基础案例)
  • 【网络入侵检测】基于源码分析Suricata的统计模块
  • conda和bash主环境的清理
  • C#进阶学习(十六)C#中的迭代器
  • 昆明理工大学2025年891计算机专业核心考研真题解析
  • 【函数解析】腐蚀与膨胀操作 skimage.morphology.dilation / erosion
  • Python pip下载包及依赖到指定文件夹
  • MAC如何安装多版本jdk(以8,11,17为例)
  • SplitReason:在复杂步骤借助更大尺寸模型推理,1.5B+32B,实现准确率28%提升+8倍速度提升
  • 医院信息管理系统全解析
  • 北京公园使用指南
  • 从 “沪惠保” 到 “沪骑保”看普惠保险的 “上海样式”
  • 伊朗爆炸港口已恢复货物进出口工作
  • 多家媒体及网红走进云南曲靖沾益:感受珠江源头
  • 央媒谈多地景区试水“免费开放”:盲目跟风会顾此失彼
  • 哈马斯官员:只要以军持续占领,哈马斯就不会放下武器