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

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

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

http://www.xdnf.cn/news/2555.html

相关文章:

  • Rust 学习笔记:关于切片的两个练习题
  • 复现:Mamba-UNet:降水临近预报的创新解决方案
  • LBS服务(基于位置的服务)与LLM(大型语言模型)交互功能分析
  • Vue+Echarts 3D地图效果
  • 配置扩展ACL
  • 前端连接websocket服务报错 Unexpected response code: 301
  • GTC2025全球流量大会:领驭科技以AI云端之力,助力中国企业出海破浪前行
  • Typecho博客使用阿里云cdn和oss:handsome主题进阶版
  • Vue 中局部指令(directives)的用法详解
  • STM32 RTC配置
  • JavaScript 中的类(Class)语法
  • Vue 组件通信方式总览
  • OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
  • Maven多模块工程版本管理:flatten-maven-plugin扁平化POM
  • 打火机检测数据集VOC+YOLO格式925张1类别
  • 使用POI和EasyExcel使用导入
  • 实战指南:搭建AIRIOT全场景智慧养老管理平台系统全流程解析
  • 2025系统架构师---基于规则的系统架构风格‌
  • 【硬件系统架构】哈佛架构
  • Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
  • 媒体查询使用
  • 《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
  • 无刷空心杯电机及机器人灵巧手的技术解析与发展趋势
  • 关系型数据库的SQL语句
  • Paramiko 完全指南
  • 2. 第一个网页:前端基础入门
  • MySQL 表的约束(二)
  • 数据结构*栈
  • 微信小程序连续多个特殊字符自动换行解决方法
  • DSP48E2 的 MAC模式功能仿真