🔥 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Java从入门到大牛
🌠 首发时间:2023年7月9日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生
目录
- 方法简介
- 方法的其他形式
- 方法使用时的常见问题
- 方法的案例
- 计算1-n的和
- 判断一个整数的奇偶
- 方法在计算机中的执行原理
- Java的参数传递机制
- 基本类型的参数传递
- 引用类型的参数传递
- 案例:比较数组
- 案例:从数据中查询指定元素的索引
- 方法重载
- 补充知识:方法中单独使用 return 关键字
方法简介
什么是方法
方法是一种语法结构,它可以把一段代码封装成一个功能,以便我们重复调用
方法的完整格式
修饰符 返回值类型 方法名(形参列表) {
方法体代码(需要执行的功能代码)
return 返回值;
}
示例:写一个方法,功能为对 2 个整数求和并返回
public static int sum(int a, int b) {
int c = a + b;
return c;
}
方法如何执行 ?
方法定义之后,必须要调用才可以跑起来,调用格式为 方法名(参数列表);
int rs = sum(10, 20);
System.out.println(rs);
方法定义时的几个注意点
- 方法的修饰符:暂时都使用
public static
来修饰 - 方法申明了具体的返回值类型,内部就必须使用
return
来返回对应类型的数据 - 形参列表可以有多个,甚至可以没有;如果有多个形参,形参之间必须用逗号隔开,且不能给初始化值
使用方法的好处
- 提高了代码的复用性,提高了开发效率
- 让程序的逻辑更加清晰
方法的其他形式
方法定义时,需要按照方法解决的实际业务需求,来设计合理的方法形式解决问题
注意事项
- 如果方法不需要返回数据,则返回值类型必须申明成
void
(无返回值申明),此时方法内部不可以再使用return
返回数据 - 方法如果不需要接受数据,则不需要定义形参,且调用方法时也不可以再传数据给方法了
- 没有参数,且没有返回值类型(void)申明的方法,称为无参数、无返回值的方法,依次类推
方法使用时的常见问题
- 方法在类中的位置无所谓,但一个方法不能定义再另一个方法里面
- 方法的返回值类型写 void 时,方法内不能使用 return 返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用 return 返回对应类型的数据
- return 语句的下面,不能再编写代码,属于无效的代码,因为执行不到这里
- 方法不调用就不会执行,调用方法时,传给方法的数据,就必须严格匹配方法的参数情况
- 调用有返回值的方法,有 3 种方式:1、可以定义变量接收结果;2、或者直接输出调用;3、甚至直接调用
- 调用无返回值的方法,只有 1 种方式:1、只能直接调用
方法的案例
设计方法时,主要关注三个方面:
- 方法是否需要接收数据进行处理 ?
- 方法是否需要返回数据 ?
- 方法要处理的业务是什么 ?
计算1-n的和
需求
求 1-n 的和
分析
- 方法需要接收 n 具体的值,因此形参声明为:int n
- 方法需要返回 1-n 的求和结果,因此返回值类型声明为 int
- 方法内部的业务:求出 1-n 的和并返回
代码示例
public static int cal(int n) {
int sum = 0; // 保存求和的结果
// 求和
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum; // 返回求和结果
}
判断一个整数的奇偶
需求
判断一个整数的奇偶,并把判断的结果输出出来
分析
- 方法需要接收一个整数来进行判断,因此形参声明为:int number
- 方法内部判断完后直接输出结果即可,无需返回,因此返回值类型声明为 void
- 方法内部的业务:通过 if 语句判断 number 是奇数还是偶数,并输出结果
代码示例
public static void judgeNumber(int number) {
if (number % 2 == 0) {
System.out.println(number + "是偶数");
} else {
System.out.println(number + "是奇数");
}
}
方法在计算机中的执行原理
方法被调用的时候,是进入到栈内存中运行,而栈的特点是先进后出
Java的参数传递机制
Java 的参数传递机制都是值传递
- 所谓值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本
- 实参:在方法内部定义的变量
- 形参:定义方法时声明的参数列表
基本类型的参数传递
从上图中可以看出,因为传递过去的只是值的副本,所以在 change 方法内部对 a 的修改并不会影响主方法里 a 的值
引用类型的参数传递
从上图中可以看出,引用类型的参数传递传输的是存储的地址值,所以在 change 方法内部对数组 arrs 的修改相当于直接对主方法里的数组进行修改
案例:比较数组
需求
如果两个 int 类型的数组,元素个数和对应位置的元素内容都是一样的,则认为这 2 个数组是一模一样的
分析
- 该方法需要接收两个 int 类型的数组,因此形参声明为
int[] arr1, int[] arr2
- 该方法判断完需要返回:true 或 false,因此返回值类型声明为 boolean 类型
- 该方法内部的业务:判断两个数组内容是否一样
代码示例
public class Test {
public static void main(String[] args) {
int[] arr1 = {10, 20, 30};
int[] arr2 = {10, 20, 30};
if (compareArray(arr1, arr2)) {
System.out.println("arr1和arr2一样");
} else {
System.out.println("arr1和arr2不一样");
}
int[] arr3 = {10, 40, 30};
if (compareArray(arr1, arr3)) {
System.out.println("arr1和arr3一样");
} else {
System.out.println("arr1和arr3不一样");
}
}
// 判断两个数组是否一样
public static boolean compareArray(int[] arr1, int[] arr2) {
// 判断两个数组长度是否一致
if (arr1.length != arr2.length) {
return false;
}
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) { // 有一个元素不一样就返回false
return false;
}
}
// 程序如果能执行到这里,说明两个数组一样
return true;
}
}
运行结果
案例:从数据中查询指定元素的索引
需求
设计一个方法可以接收数组和要查询的元素值,最终要返回元素在该数组中的索引,如果数组不存在该元素则返回 -1
分析
- 该方法需要接收一个数组和一个数值,因此形参声明为
int[] arr, int digit
- 该方法需要返回元素值所在的索引值或者 -1,因此返回值类型声明为 int
- 该方法内部的业务:遍历数组,逐个与传入元素比对
代码示例
public class Test {
public static void main(String[] args) {
int[] arr = {43, 65, 35, 39, 48, 29};
System.out.println("39的索引为" + queryIndex(arr, 39));
System.out.println("99的索引为" + queryIndex(arr, 99));
}
// 从数组中查询指定元素的索引
public static int queryIndex(int[] arr, int digit) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == digit) {
return i;
}
}
return -1;
}
}
运行结果
方法重载
什么是方法重载
一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载了
方法重载的注意事项
- 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载了,其它的都不管
- 形参列表不同指的是:形参的个数、类型或顺序不同,不关心形参的名称
方法重载的应用场景
开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的
方法重载案例
开发一个武器系统,功能需求如下
- 可以默认发射一枚武器
- 可以指定地区发射一枚武器
- 可以指定地区发射多枚武器
代码示例
public class Test {
public static void main(String[] args) {
fire();
fire("米国");
fire("岛国", 1000);
}
// 默认发射一枚武器
public static void fire() {
System.out.println("默认发射一枚武器给米国!");
}
// 指定地区发射一枚武器
public static void fire(String location) {
System.out.println("给" + location + "发射一枚武器");
}
// 指定地区发射多枚武器
public static void fire(String location, int nums) {
System.out.println("给" + location + "发射" + nums + "枚武器");
}
}
运行结果
补充知识:方法中单独使用 return 关键字
return;
可以用在无返回值的方法中,其作用是:立即跳出并结束当前方法的执行
代码示例
public class Test {
public static void main(String[] args) {
divide(10, 0);
}
// 进行除法运算
public static void divide(int a, int b) {
if (b == 0) {
System.out.println("您的数据有误!!不执行!!");
return; // 直接跳出并结束当前divide方法的执行
}
int c = a / b;
System.out.println("除法结果是: " + c);
}
}
运行结果