五、 JAVA方法
1. 概述
概念: 一种语法结构,一段代码一个功能
作用: 便于重复调用
格式:
修饰符 返回值类型 方法名 (形参列表) {
方法体代码;
return 返回值;
}
// 求两数和的方法
public static int sum (int a, int b) {
int c = a + b;
return c;
}
注意事项:
- 返回类型 return同
- 形参列表[0, n],多个形参逗号割
好处:
- 提高代码的复用性
- 让程序逻辑清晰
2. 方法定义形式
方法定义时根据实际需求,设计合理的方法解决问题
注意事项:
- 若不需要返回值,void,不需要return
- 若不需要接收数据,不需要定义形参
方法使用时的常见问题:
- 方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面。
- 方法的返回值类型写void(无返回申明)时,方法内不能使用return返回数据;如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据
- return语句的下面,不能编写代码,属于无效的代码,执行不到这儿。
- 方法不调用就不会执行, 调用方法时,传给方法的数据,必须严格匹配方法的参数情况。
- 调用有返回值的方法,有3 种方式: 1、可以定义变量接收结果 ;2、或者直接输出调用;3、甚至直接调用
- 调用无返回值的方法,只有1种方式: 1、只能直接调用
3. 方法的案例
设计方法要考虑三个方面:
- 是否需要接收参数
- 是否需要返回数据
- 方法要处理什么样的业务
public class SunDemo {
// 求1-n的和
public static void main(String[] args) {
int rs = sum(5);
System.out.println(rs);
int[] arr = {1, 2, 3, 4, 5};
System.out.println(add(arr));
}
public static int sum (int n) {
int sumNum = 0;
for (int i = 1; i <= n; i++) {
sumNum += i;
}
return sumNum;
}
public static int add (int[] num) {
int sumNum = 0;
for (int i = 0; i < num.length; i++) {
sumNum += num[i];
}
return sumNum;
}
}
4. 方法在计算机中的执行原理
方法被调用的时候,是进入到栈内存中运行的——先进后出:可以保证某个方法被调用执行后,回到main方法,并且能在方法执行完之后及时清理。
5. 方法参数传递**
机制:值传递——实参给方法的形参传递时,传输的时实参变量中存储的值的副本
基本类型的参数传递:副本
引用类型的参数传递:副本是地址值
6. 参数传递的案例
案例1:按格式输出数组的内容
public class MethodTest1 {
public static void main(String[] args) {
// 按格式要求输出数组内容
int[] arr = {10, 20, 30};
printFormat(arr);
int[] arr1 = {};
System.out.println(arr1.length);
printFormat(arr1);
int[] arr2 = null;
// System.out.println(arr2.length); // 报错
}
public static void printFormat (int[] arr) {
if (arr == null) {
System.out.println(arr);
return;
}
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
// if (i == arr.length - 1) {
// System.out.print(arr[i]);
// } else {
// System.out.print(arr[i] + ", ");
// }
System.out.print(i == arr.length - 1? arr[i]: arr[i] + ", ");
}
System.out.print("]");
}
}
案例2:判断两个int数组是否相同
public class MethodTested {
public static void main(String[] args) {
// 判断两个int数组是否一样
int[] arr1 = {1, 2, 3, 4};
int[] arr2 = {1, 2, 3};
boolean rs = equals(arr1, arr2);
System.out.println(rs);
}
public static boolean equals (int[] arr1, int[] arr2) {
// 1. 判断a和b是否都为null
if (arr1 == null && arr2 == null) {
return true;
}
// 2. 其中一个null,另一个不是null
if (arr1 == null || arr2 == null) {
return false;
}
// 3. 判断长度是否相同
if (arr1.length != arr2.length) {
return false;
}
// 4. 比较内容
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
}
7. 方法重载
重载概念: 一个类中,多个方法名称相同,但是形参列表不同,这些方法就是方法重载。——形参的个数、类型、顺序不同
public class MethodOverLoadDemo1 {
public static void main(String[] args) {
test();
test(2);
}
// 只与名称,形参列表相关
public static void test () {
System.out.println("test1");
}
public static void test (int a) {
System.out.println("test2");
}
// 形参个数、类型、顺序
void test (double a) {
}
int test (double a, int b) {
return 1;
}
void test (int a, double b) {
}
}
重载应用场景:
为一类业务提供多种解决方案
8. 在方法中单独使用return关键字
无返回值的方法中单独使用可以立即跳出并结束当前方法的执行
public class MethodOverLoad {
public static void main(String[] args) {
chu(2, 0);
}
public static void chu(int a, int b) {
if (b == 0) {
System.out.println("除数为0");
return;
}
int c = a / b;
System.out.println(c);
}
}