方法
理解:具有特定功能的代码块
好处:解决代码的冗余
语法结构
访问修饰符 static 返回值类型 方法名([参数列表]){
...代码块...
}
分类:
- 无参无返回值方法
- 带参数的方法
- 带返回值的方法
1、 无参无返回值的方法
语法结构
public static void 方法名(){
...代码块...
}
注意
public
是修饰符的一种,表示公有void
表示无返回值- 方法在类中声明
- 方法与方法之间是平级关系
- 方法没有被调用,就是摆设
练习1:模拟游戏人物动作
public class Demo{
public static void main(String[] args){
//当方法在调用类的内部时
run();
play();
//当方法不在调用类内部时
Demo.run();
Demo.play();
}
//走位
public static void run(){
System.out.println("走位");
}
//释放技能
public static void play(){
System.out.println("释放技能");
}
}
练习2:设计一个方法,打印三角形
public class Demo{
public static void main(String[] args){
printRectangle();
}
//打印三角形的函数
public static void printRectangle(){
for(int i=0;i<5;i++){
for(int j =0;j<i;j++){
System.out.print(("*"));
}
System.out.print(" ");
}
}
}
2、带参数的方法
语法结构
public static void 方法名([参数列表]){
...代码块...
}
注意
- 方法声明时规定的参数:实参/形参
- 形参必须声明类型
- 形参属于方法的变量,作用域在方法内部,形参也是局部变量
- 局部变量:方法里面声明的变量
- 调用方法时传入的参数:实参
- 形参和实参的类型必须兼容
- 实参和形参可以有多个,用逗号分割
练习1:设计一个方法,打印三角形,三角形的行数由调用方传入
public class Demo{
public static void main(String[] args){
printRectangle(5); }
//打印三角形
public static void printRectangle(int n){
for(int i=0;i<=n;i++){
for(int j=0;j<i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
练习2:设计一个方法,传入两个int
值,输出最大值
public class Demo{
public static void main(String[] args){
getMax(10,20);
}
//判断最大值
public static void getMax(int a, int b){
int max = (a>b)?a:b;
System.out.println(max);
}
}
3、带返回值的方法
语法结构
public static 返回值类型 方法名([参数列表]){
...代码块...
return 数据;//1.结束当前方法 2.将数据返回给调用方
}
注意
- 带返回值的方法有没有参数依据具体需求
- 声明方法时需要设置返回值类型
return
后接的是具体的数据- 方法功能单一性==(一个方法的功能不要过于强大,不便于后续维护或调用)==
- 方法声明是规定的返回值类型 和
return
后的数据必须兼容 - 返回值只能有一个,如果想返回多个值必须使用数组、集合。。。
练习1:设计一个方法,传入两个int
值,返回最大值,在控制台输入三个int
值,输出最大值
import java.util.Scanner;
public class Demo{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scn.nextInt();
System.out.println("请输入第二个数字:");
int b = scn.nextInt();
System.out.println("请输入第三个数字:");
int c = scn.nextInt();
int max = getMax(a,b);
max = getMax(max,c);
System.out.println("最大值为:" + max);
}
//判断最大值
public static int getMax(int a, int b){
return (a>b)?a:b;
}
}
4、方法的重载
概念:方法之间的关系
条件:
- 方法必须在同一个类中
- 方法名必须一致
- 参数列表的长度或类型不一致
- 与返回值无关
好处:系统会根据实参的类型自动匹配对应的方法
设计方法的步骤:
- 考虑方法名(见名知意)
- 考虑形参个数?类型?
- 考虑需不需要返回值?返回值的类型?
应用场景:同一个类中,多个方法功能大概一致,但是细节实现不一样,考虑使用重载
练习1:设计一个方法,传入两个int值,返回最大值;
设计一个方法,传入两个double值,返回最大值;
设计一个方法,传入三个int值,返回最大值;
设计一个方法,传入三个double值,返回最大值;
public class Demo{
public static void main(String[] args){
System.out.println(getMax(10,12));
System.out.println(getMax(10,10.2,11.0));
}
//两个int值
public static int getMax(int a, int b){
return (a>b)?a:b;
}
//两个double值
public static int getMax(int a, int b, int c){
int max = (a>b)?a:b;
max = (max>c)?max:c;
return max;
}
//三个int值
public static double getMax(double a, double b){
return (a>b)?a:b;
}
//三个double值
public static double getMax(double a, double b,double c){
double max = (a>b)?a:b;
max = (max>c)?max:c;
return max;
}
}
5、方法的递归
概念:方法调用自身
注意:递归是一种程序设计思想
经验:
- 找规律:什么情况下应该使用递归?
- 找出口:什么情况下解决该方法?
练习1:不死神兔(斐波那契数列):有1对兔子,从出生后的第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月有几对兔子
设计一个方法,传入月份,获取当月兔子的对数
import java.util.Scanner;
public class Demo{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入月份:");
int num = fib(10);
System.out.println("第10个月后得到兔子有" +num+ "对");
}
//斐波那契额数列
public static int fib(int n){
if(n==1||n==2){
return 1;
}else{
return fib(n-1)+fib(n-2);
}
}
}