方法的定义和调用
- 对一个功能进行提取,提取出一段代码,这就是一个方法
- 方法和方法是并列的关系,注意不要在main方法中写方法
方法的定义格式
修饰符 方法返回值类型 方法名(形参列表){
方法体;
return 方法返回值;
}
方法的定义与调用实例
import java.util.Scanner;
public class Method_test1{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.print("请输入第二个整数:");
int num2 = sc.nextInt();
study(num1,num2); // 也可以直接传入实参,例如 study(10,25);
}
public static void study(int num1,int num2){ // 形参
int sum = 0;
sum += num1;
sum += num2;
System.out.println("两数的和为"+sum);
}
}
要点
- 如果方法有返回值的话:return + 返回值
- 方法不需要返回值的话:return可以省略不写,并且方法的返回值类型为 void
- 一般使用不确定的因素当做方法的形参
方法的作用:提高代码的复用性,一个功能对应一个方法,要使用哪个功能就直接调用那个方法即可,减少重复代码
测试1
猜数字
// 猜数字:我心里有一个数字,你来猜,看是否猜对
import java.util.Scanner;
public class Method_Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("猜猜我心里的数(1-6):");
int guessNum = sc.nextInt();
guess(guessNum);
}
public static void guess(int guess){
int num = (int)(Math.random()*6)+1;
System.out.println(guess==num?"猜对了":"猜错了");
}
}
扩展
两个数是否交换成功
public class TestM{
public static void main(String[] args){
int a=10;
int b=20;
System.out.println("输出交换前的两个数:"+a+"---"+b);
changeNum(a,b);
System.out.println("输出交换后的两个数:"+a+"---"+b);
}
public static void changeNum(int num1,int num2){
int t;
t=num1;
num1=num2;
num2=t;
}
}
/*
结果为:
输出交换前的两个数:10---20
输出交换后的两个数:10---20
*/
- 在栈中,先进后出,a先被定义,放在最底层
- 一个方法有一块内存区域,在方法运行完后,这块内存区域也会消失
当a和b这两个实参的值给了num1和num2,之后的运行都是在changenNum方法的内存区域内交换值,所以num1和num2的值交换后没有返回给a和b,内存区域消失后,num1和num2也消失了
栈 | 堆 | 方法区 |
---|---|---|
— | / | / |
b 20 | / | / |
a 10 | / | / |
方法的重载
在同一个类当中,方法名相同但形参列表不同
public class Method_Test3{
public static void main(String[] args){
// 10+20
int sum = add(10,20);
System.out.println(sum);
// 20+40+80
System.out.println(add(add(20,40),80));
// 30+60+90+120
System.out.println(add(add(add(30,60),90),120));
// 9.8+4.7
System.out.println(add(9.8,4.7));
}
// 两个数相加
public static int add(int num1,int num2){
return num1+num2;
}
// 三个数相加
public static int add(int num1,int num2,int num3){
return num1+num2+num3;
}
// 四个数相加
public static int add(int num1,int num2,int num3,int num4) {
return num1 + num2 + num3 + num4;
}
// 两个double类型的数相加
public static double add(double num1,double num2){
return num1+num2;
}
- 方法的重载只需方法名一致,形参列表不同
- 形参列表的不同为:
【1】类型不同【2】个数不同【3】顺序不同 - 与方法的修饰符和返回值类型无关
- 注意int a和int b不构成重载
在方法重载中,类型级别也同样适用
byte,short,char—>int—>long—>float—>double
public class Method_Extend1 {
public static void main(String[] args) {
add(5);
}
public static void add(long num1){
System.out.println(4);
}
public static void add(float num1){
System.out.println(3);
}
public static void add(double num1){
System.out.println(2);
}
public static void add(int num1){
System.out.println(1);
}
}