12_方法
目录
方法
概念:实现特定功能的一段代码,可反复使用
定义语法:
public static 返回值类型 方法名称(形式参数){
//方法主体
}
一. 方法的参数
-
多数情况下,方法与调用者之间需要数据的交互;调用者必须提供必要的数据,才能使方法完成相应的功能
-
调用方法时,所传入的数据被称为“参数”
-
作用:方法的参数可以让代码功能更灵活、普适度更高、易于修改和维护
方法的调用:
- 调用方法时会优先执行方法内部代码,结束后,返回到方法调用处,继续向下执行
调用语法:
方法名称(实际参数);
经验:
- 将需要在多个位置重复使用的一组代码,定义在方法内部
- 方法定义在类的内部,与main方法并列
- “形参”等价于“局部变量的声明”
- “实参”等价于“局部变量的赋值”
- 根据具体的业务需求,来定义方法的参数
public static boolean login(String username, String password){
}//用户名、密码
public static boolean login(String name, String pwd, String checkNo){
} //用户名、密码、验证码
二. 返回值与返回值类型
返回值类型:规定返回值的具体类型(基本、引用、void)
返回值:方法执行后的返回结果
-
方法执行后,一些情况下无需返回结果,另一些情况下则必须返回结果
-
例如:存款操作无需返回结果,取款操作必须返回结果
定义语法:
public static 返回值类型 方法名称(形式参数列表){
//方法主体
return value;//返回值
}
调用语法:
变量 = 方法名称();
- 方法调用的表达式,最终即代表了所返回的结果
- 变量类型与返回值类型一致
- 定义时,即约定了返回的结果类型
return关键字:
当有返回值的方法存在分支结构时,必须保证每一条分支都具有正确的返回值 例:
if(num % 2 == 0){
return "偶数";
}else{
return "奇数";
}
return的两种用法:
应用在具有返回值类型的方法中:
return value;//表示结束当前方法,并伴有返回值,返回到方法调用处
应用在没有返回值类型(void)的方法中:
return; //表示结束当前方法,直接返回到方法调用处
三. 方法的重载
重载就是在一个类中,有相同的方法名称,但形参不同的方法
方法的重载:
- 方法名称必须相同
- 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以称为方法的重载
四. 方法总结
注意:一个类中可以定义多个方法,方法之间属于并列关系,不可嵌套
经验:一个方法只做一件事
好处:
- 减少代码冗余
- 提高复用性
- 提高可读性
- 提高可维护性
- 方便分工合作
五. 递归
什么是递归?
- 解决具有既定规律的问题时,在方法内部再次调用自身方法的一种编程方式
何时使用递归?
-
当需要解决的问题可以拆分成若干个小问题,大小问题的解决方式相同,方法中自己调用自己
-
使用循环解决的常规问题,都可以替换为递归解决
如果正确使用递归?
- 设置有效的出口条件,可以让调用链上的每个方法都可以正确返回,避免无穷递归
六. 代码
题目一:打印分隔符
public class TestMethod{
public static void main(String[] args){
System.out.println("床前明月光");
printSign();
System.out.println("疑是地上霜");
printSign();
System.out.println("举头望明月");
printSign();
System.out.println("低头思故乡");
printSign();
}
//自定义方法:在一行中输入10个减号,代表分隔符
public static void printSign(){
for(int i = 1; i <= 10; i++){
System.out.print("-");
}
System.out.println();
}
}
题目二:传入参数,打印出不同数量和样式的符号
public class TestMethod2{
public static void main(String[] args){
System.out.println("床前明月光");
printSign(1 , '-');
System.out.println("疑是地上霜");
printSign(3 , '#');
System.out.println("举头望明月");
printSign(5 , '*');
System.out.println("低头思故乡");
printSign(7 , '+');
}
//自定义方法
public static void printSign(int count , char sign){
for(int i = 1; i <= count; i++){
System.out.print(sign);
}
System.out.println();
}
}
题目三:return
public class TestReturn{
public static void main(String[] args){
int result = add(1, 2);
System.out.println(result);
int result2 = add(result, 3);
System.out.println(result2);
}
public static int add(int num1, int num2){
int sum = num1 + num2;
return sum;
}
}
题目四:return2
public class TestReturn2{
public static void main(String[] args){
double result = calc(1.5, 2.5);
System.out.println("计算结果:" + result);
String result2 = isEven(2);
System.out.println(result2);
show();
}
public static double calc(double a, double b){
double sum = a + b;
System.out.println("运算结束");
return sum;//结束当前方法,并伴有返回值,返回到方法调用处
}
public static String isEven(int num){
if(num % 2 == 0){
return "偶数";
}else{
return "奇数";
}
}
public static void show(){
for(int i = 1; i <= 10; i++){
System.out.println("当前值" + i);
if(i == 5){
return;//结束当前方法,返回到方法调用处
}
}
}
}
题目五:计算阶乘
public class TestFactorial1{
public static void main(String[] args){
System.out.println(factorial(5));
}
public static int factorial(int n){
int sum = 1;
for(int j = 2; j <= n; j++ ){
sum *= j;
}
return sum;
}
}
题目六:递归
public class TestFactorial2{
public static void main(String[] args){
System.out.println(factorial(5));
}
public static int factorial(int n){
if(n == 1){
return 1;
}
return n*factorial(n - 1);
}
}