Java SE方法的使用
1. 方法的概念及使用
1.1 什么是方法
方法就是一个代码片段,它能够使得代码被重复使用,一份代码可以在多个位置被使用
1.2 方法定义
修饰符 返回值类型 方法名称([参数类型 形参]){
方法体代码; //[]表示内容可以存在或省略
[return 返回值]
}
注:
- 修饰符:也称访问限定修饰符,包括private, default(默认), protected, public,构建方法一般使用 public static 固定搭配
- 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须使用void类型
- 方法名字:一般采用小驼峰命名 (
addSum
) - 参数列表:如果方法没有参数,则()中什么都不写;如果有参数,需要指定参数类型,多个参数之间用逗号隔开
- 方法体:方法内部要执行的语句
- 在java当中,方法必须写在类当中,且不能嵌套定义
方法可以没有返回值,没有返回值时返回值类型必须写成void
代码示例:
public class Test {
//定义一个使两个整数相加的方法
public static int sum5(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int x = 1, y = 2;
System.out.println(sum5(x, y));
}
}
1.3 方法调用的执行过程
[方法调用过程]
调用方法–> 传递参数–>找到方法地址–>执行被调方法方法体–>被调方法结束返回–>回到主调方法往下继续执行
注:
- 定义方法的时候,不会执行方法的代码,只有调用的时候才会执行
- 一个方法可以被多次调用
代码示例:
public class Test {
public static int fac(int n) { //方法fac,计算单个数字的阶层
int ret = 1;
for (int i = 1;i <= n;i++) {
ret *= i;
}
return ret;
}
public static int facSum(int k) {
int sum = 0;
for (int j = 1;j <= k;j++) {
sum += fac(j); //在这个方法里面调用方法fac来计算单个数字的阶层,如5!,然后通过循环将这些阶层都加起来
}
return sum;
}
public static void main(String[] args) {
//计算1到5的阶层之和
System.out.println(facSum(5)); //结果输出153
}
}
1.4 形参和实参的关系
形参是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
代码示例:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 25;
swap(a, b);
System.out.println("main: a = " + a + "b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + "y = " + y);
}
}
注:从代码运行结果可以看到,调用swap函数交换后,形参x和y的值发生了改变,但main方法中a和b的值却没发生改变
原因分析:
实参a和b是main方法中的两个变量,其内存空间在main方法的栈(JVM,即ava虚拟机栈)中,而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈中
因此:实参a和b与形参x和y是两个没有任何关联性的变量,在调用swap方法时,只是将实参a和b中的值拷贝一份传递给了形参x和y,因此对形参x和y操作不会对实参a和吧产生任何影响
**解决方法:**传引用类型参数(这里利用数组来进行传参)
代码示例:
public class Test {
public static void main(String[] args) {
int[] arr = {10, 20};
System.out.println("交换前:arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
swap(arr);
System.out.println("交换后:arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr1) {
int tmp = arr1[0];
arr1[0] = arr1[1];
arr1[1] = tmp;
}
}
由运行结果可知,这里的swap方法实现了数值的交换,这里运用了数组来进行传参,通过swap方法将数组arr的地址复制给arr1,使得arr1也能修改arr数组中的值
2. 方法重载
在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了
代码示例:
public class Test {
public static void main(String[] args) {
System.out.println(add(1, 2)); // 调用add(int x, int y)
System.out.println(add(1.5, 2.5)); // 调用add(double x, double y)
System.out.println(add(1.5, 2.5, 3.5)); // 调用add(double x, double y, double z)
}
public static int add(int x, int y) {
return x + y;
}
}
注:
- 方法名必须相同
- 参数列表必须不同(
参数的个数不同、参数的类型不同、参数的次序不同
) - 与返回值类型是否相同无关