方法
方法概述
方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用。
完整格式:
修饰符 返回值类型 方法名(形参列表){
方法体代码(需要执行的功能代码);
return 返回值;
}
代码演示:
public class MethodDemo1 {
public static void main(String[] args) {
// 需求:假如现在很多程序员都要进行2个整数求和的操作。
// 1、李工。
int rs = sum(10, 20);
System.out.println("和是:" + rs);
// 2、张工。
int rs2 = sum(30, 20);
System.out.println("和是:" + rs2);
}
public static int sum(int a, int b) {
int c = a + b;
return c;
}
}
方法的执行流程
当调用一个方法时,执行流程,按照下图中标注的序号执行。
① 通过sum方法名找到sum方法
② 把10传递给方法中的参数a
③ 把20传递给方法中的参数b;
④ 执行方法中的代码,此时 int c=a+b; 相当于 int c = 10+20 ; c的值为30return c 的含义是,把c的结果返回给调用处。 也就是调用sum方法的结果为30。
定义方法的注意点
- 方法的修饰符:暂时都使用public static 修饰。(目前看做是固定写法,后面是可以改动的)
- 方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据。
- 形参列表可以有多个,甚至可以没有; 如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值。
修饰符(Modifier)是一种关键字,用于修饰类、方法、变量等各种程序元
素的声明。Java中常用的修饰符包括以下几种:
① 访问修饰符:用于控制程序元素的访问权限,包括public、protected、
private和默认(不写任何修饰符)四种。
② 非访问修饰符:用于控制程序元素的行为,包括static、final、abstract、
synchronized、volatile等。
③ 其他修饰符:包括transient、native、strictfp等。
在Java中,一个程序元素可以同时拥有多个修饰符,它们的顺序可以任意排
列。例如,一个方法可以同时使用public、static、final、synchronized等多个
修饰符来限定它的访问权限、行为和线程安全性。
方法使用常见的问题
- 方法在类中没有先后顺序,但是不能把一个方法定义在另一个方法中。
- 方法的返回值类型写void(无返回申明)时,方法内不能使用 return 返回数据,如果方法的返回值类型写了具体类型,方法内部必须使用 return 返回对应类型的数据。
- return语句的下面,不能编写代码,属于无效的代码,执行不到这儿。
- 方法不调用就不会执行, 调用方法时,传给方法的数据,必须严格匹配方法的参数情况。
- 调用有返回值的方法,有3种方式:
① 可以定义变量接收结果
② 或者直接输出调用,
③ 甚至直接调用; - 调用无返回值的方法,只有1种方式: 只能直接调用。
方法在计算机中的执行原理
- 每次调用方法,方法都会从栈顶压栈执行没执行
- 每个方法执行完后,会从栈顶弹栈出去
Java的参数传递机制都是:值传递,实参存储的值的副本。
基本类型和引用类型的参数在传递的时候有什么不同?
= 都是值传递
- 基本类型的参数传递存储的数据值。
- 引用类型的参数传递存储的地址值。
可变长度参数
使用可变长度参数时,需要在参数类型之后加上三个连续的点(…),表示这是一个可变长度参数。在方法内部,可变长度参数会被当作一个数组处理,开发者可以像操作数组一样操作这个参数。需要注意的是, 每个方法只能有一个可变长度参数,而且必须是最后一个参数。
代码演示:
public class Test05 {
public static void main(String[] args) {
System.out.println(sum(1, 2, 3, 4, 5));
System.out.println(sum(1, 2, 3, 4, 5, 6, 7, 8, 9));
}
public static int sum(int... nums) {
int result = 0;
for (int num : nums) {
result += num;
}
return result;
}
}
可变长度参数只能用于方法的最后一个参数位置,并且不能和数组作为参数同时存在,否则会编译错误。
方法重载
所谓方法重载指的是:一个类中,出现多个相同的方法名,但是它们的形参列表是不同的,那么这些方法就称为方法重载了。
- 参数列表不同的情况
- 长度不一样
- 类型不一样
代码演示:
public class MethodOverLoadDemo1 {
public static void main(String[] args) {
// 目标:认识方法重载,并掌握其应用场景。
test();
test(100);
}
public static void test(){
System.out.println("===test1===");
}
public static void test(int a){
System.out.println("===test2===" + a);
}
void test(double a){
}
void test(double a, int b){
}
void test(int b, double a){
}
int test(int a, int b){
return a + b;
}
}