方法概述
什么是方法
方法(method):就是完成特定功能的代码块
上图三个框分别是main方法、method1方法和method2方法。
方法的好处
像在游戏《植物大战僵尸》中,如果所有控制植物投射炮弹的代码在每一个不同的植物代码中都要重新写一遍,那么这个代码的重复度就太高了,复用性太差。而方法的好处就是提高了代码的复用性。
方法的定义和调用
方法定义
方法调用
注意:
- 方法定义完毕后,需要调用才能执行;
- 方法必须先定义后调用,否则程序将报错。
Debug 查看方法调用的执行流程
注意:
- 进入一个方法的时候,需要用 Step Into F7
- 在方法内部,看每一行代码的执行流程,使用 Step Over F8
- 注意观察方法的出现和消失,以及变量的变化
带参数方法的定义和调用
方法定义
方法调用
形参和实参
带返回值方法的定义和调用
方法定义
方法调用
方法的注意事项
注意事项:
- 方法不能嵌套定义
- void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
方法通用格式
- public static 修饰符,目前先记住这个格式。
- 返回值类型 方法操作完毕之后返回的数据的数据类型;
如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return。 - 方法名 调用方法时候使用的标识。
- 参数 由数据类型和变量名组成,多个参数之间用逗号隔开。
- 方法体 完成功能的代码块。
- return 如果方法操作完毕,有数据返回,用于把数据返回给调用者。
定义方法时,要做到两个明确:
- 明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型;
- 明确参数:主要是明确参数的类型和数量。
调用方法时:
- void类型的方法,直接调用即可
- 非void类型的方法,推荐用变量接收调用
方法重载
什么是方法重载
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
方法重载的特点
- 类型不同或者数量不同重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式;
- 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载。
上图打勾为构成重载,打叉为不构成重载。
练习
输出较大值v1.0
需求:设计一个方法用于打印两个数中的较大数。
分析:
① 定义一个方法,用于打印两个数字中的较大数,例如:getMax();
② 方法中定义两个变量,用于保存两个数字;
③ 使用if语句对两个数字的大小关系进行处理;
④ 在main()方法中调用定义好的方法。
/*
案例: 方法练习(输出较大值)
定义方法,方法中定义两个变量,判断较大值并打印
调用方法查看结果
*/
public class Demo02 {
public static void main(String[] args) {
//调用方法
getMax();
}
//定义方法
public static void getMax() {
//定义两个变量
int a = 10;
int b = 20;
//打印较大值
if (a > b) {
System.out.println(a);
} else if (a < b) {
System.out.println(b);
} else {
System.out.println("相等");
}
}
}
输出较大值v2.0
需求:设计一个方法用于打印两个数中的较大数,数据来自于方法参数。
分析:
① 定义一个方法,用于打印两个数字中的较大数,例如:getMax();
② 为方法定义两个参数,用于接收两个数字;
③ 使用if语句对两个数字的大小关系进行处理;
④ 在main()方法中调用定义好的方法(使用字面量);
⑤ 在main()方法中调用定义好的方法(使用变量)。
/*
案例: 方法练习(输出较大值) -> 带参数
定义方法,接收两个整数,判断较大值并打印
调用方法查看结果
*/
public class Demo03 {
public static void main(String[] args) {
//调用方法
getMax(10,20);
}
//定义方法
public static void getMax(int a,int b) {
// //定义两个变量
// int a = 10;
// int b = 20;
//打印较大值
if (a > b) {
System.out.println(a);
} else if (a < b) {
System.out.println(b);
} else {
System.out.println("相等");
}
}
}
输出较大值v3.0
需求:设计一个方法可以获取两个数的较大值,数据来自于参数。
分析:
① 定义一个方法,用于获取两个数字中的较大数,例如:getMax();
② 使用if语句对两个数字的大小关系进行处理;
③ 根据题设分别设置两种情况下对应的返回结果;
④ 在main()方法中调用定义好的方法并使用变量保存。
/*
案例: 方法练习(输出较大值) -> 带参数带返回值
定义方法,接收两个整数,判断较大值并返回
调用方法接收返回值,并打印
*/
public class Demo04 {
public static void main(String[] args) {
//调用方法
int max = getMax(10, 20);
System.out.println("max:" + max);
}
//定义方法
public static int getMax(int a, int b) {
//返回较大值
if (a > b) {
return a;
} else {
return b;
}
}
}
带返回值方法练习
需求1: 定义方法isEvenNumber, 接收一个整数, 判断是否是偶数, 返回boolean;
需求2: 定义方法getMax, 接收两个整数,判断较大值, 并返回。
/*
案例: 带返回值方法练习
需求1: 定义方法isEvenNumber, 接收一个整数, 判断是否是偶数, 返回boolean
需求2: 定义方法getMax, 接收两个整数,判断较大值, 并返回
测试两个方法
*/
public class Demo05 {
public static void main(String[] args) {
//3.测试方法
int max = getMax(100,20);
System.out.println("max:" + max); //后续操作: 打印
boolean result = isEvenNumber(11);
if(result == true){
//如果返回的是true,证明是一个偶数
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
//1. 定义方法: 接收两个整数,判断较大值,并返回
//返回值类型:int 参数列表:int a,int b
public static int getMax(int a,int b){
//判断较大值,并返回
if(a > b){
return a;
}else {
return b;
}
}
//2. 定义方法: 接收一个整数,判断是否是偶数,返回boolean结果
//返回值类型:boolean 参数列表:int num
public static boolean isEvenNumber(int num){
//判断是否是偶数,返回boolean结果
if(num % 2 == 0){
//是偶数返回true
return true;
}else {
return false;
}
}
}
求和
需求:设计一个方法用于求1-n之间的数据和(n>1),返回值为空。调用方法,把结果在控制台输出。
分析:
① 方法定义
使用两个明确分析该方法的参数和返回值
参数:int n
返回值类型:void
② 方法调用
/*
案例: 方法练习1(求和)
设计一个方法用于求[1-n]之间的数据和(n>1),打印求和结果
*/
public class Demo06 {
public static void main(String[] args) {
//6.调用方法
printSum(-10);
}
//1.定义方法
public static void printSum(int n){
//7.对n进行判断
if(n < 1){
System.out.println("你输入的数据必须大于1");
//8.结束方法
return;
}
//2.定义求和变量
int sum = 0;
//3.使用for循环获取范围内数据
for (int i = 1; i <= n ; i++) {
//4.累加
sum += i;
}
//5.打印结果
System.out.println("sum:" + sum);
}
}
比较相等
需求:设计一个方法用于比较两个整数是否相等,调用方法,把结果在控制台输出。
分析:
① 方法定义:
使用两个明确分析该方法的参数和返回值
参数:int a,int b
返回值类型:boolean
② 方法调用:
变量接收调用
/*
案例: 方法练习2(比较相等)
设计一个方法比较两个整数是否相等,返回布尔的结果
使用不同的方式完成比较(三元,if)
*/
public class Demo07 {
public static void main(String[] args) {
//4.调用方法
if(isSame(10,11)){
System.out.println("相同");
}else {
System.out.println("不相同");
}
}
//1.定义方法 返回值类型:boolean 参数列表:int a,int b
public static boolean isSame(int a,int b){
//2.使用if进行比较, 返回比较结果
// if(a == b){
// return true;
// }else {
// return false;
// }
//3.使用三元进行比较, 返回比较结果
return a == b ? true : false;
}
}
较大值
需求:设计一个方法用于获取三个整数较大值,调用方法,把结果在控制台输出。
分析:
① 方法定义
使用两个明确分析该方法的参数和返回值
参数:int a,int b,int c
返回值类型:int
② 方法调用
变量接收调用
/*
案例: 方法练习3(较大值)
*/
public class Demo08 {
public static void main(String[] args) {
System.out.println(getMax(10, 20, 30));
}
public static int getMax(int a, int b, int c) {
//2.三元判断
return (a > b ? a : b) > c ? (a > b ? a : b) : c;
//1.if语句判断
// if(a >= b){
// //排除b的情况下,比较a和c,谁大谁就是max
// if(a >= c){
// return a;
// }else {
// return c;
// }
// }else {
// //在排除a的情况下,比较b和c,谁大谁就是max
// if(b >= c){
// return b;
// }else {
// return c;
// }
// }
}
}
水仙花
需求:设计一个方法用于判断一个整数是否是水仙花数,调用方法,把结果在控制台输出。
分析:
① 方法定义
使用两个明确分析该方法的参数和返回值
参数:int number
返回值类型:boolean
② 方法调用
变量接收调用
/*
案例: 方法练习4(水仙花)
设计方法,判断一个整数是否是水仙花数,调用测试
*/
public class Demo09 {
public static void main(String[] args) {
//调用方法
System.out.println(isFlower(371));
System.out.println(isFlower(666));
//思考: 怎么样避免传递的错误数据(不是三位数)?
System.out.println(isFlower(10000));
}
public static boolean isFlower(int num) {
//判断num的合法性
if(num < 100 || num > 999){
System.out.print("输入的数据不是三位数!");
return false;
}
//数值拆分
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100;
//判断,并返回结果
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == num) {
return true;
} else {
return false;
}
}
}