由浅到深认识Java语言(7):方法(函数)

本文介绍了Java中的方法概念,包括返回值类型、参数列表、递归以及方法的重载,通过实例演示了如何在SpringBoot项目中应用这些概念。同时提到了一个开源的SpringBoot初始化模板,可供开发者参考和学习。
摘要由CSDN通过智能技术生成

该文章Github地址:https://github.com/AntonyCheng/java-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(6):控制流程语句

14.方法(函数)(方法:类的第三成员)

一般情况下,在面向过程的语言中,称为函数,在面向对象的语言中称为方法,所以 java 中我们称之为方法,通过方法将代码封装在一起,能够提高代码的效率;

我们通过统计学校人数这样一个示例来初识方法:

import java.util.*;
class demo{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("你想知道我们学校的人数么(想/不想=1/0):");
        int agree  = scanner.nextInt();
        if(agree == 1){
            ThePeopleAmount(); //这里是方法的调用
        }else if(agree == 0){
            System.out.println("ok!");
        }else{
            System.out.println("错误!请重新输入!");
        }
    }
    public static void ThePeopleAmount(){ //这是一个方法
        //我们来统计一个学校的人数
        int gradeOne = 1000; //高一
        int gradeTwo = 1200; //高二
        int gradeThree = 800; //高三
        int all = gradeThree+gradeTwo+gradeOne;
        System.out.println("我们学校一共有"+all+"人!");
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法的定义

定义格式:

权限修饰符 (静态)标识 返回值类型 方法名(参数列表){
	方法的内容
}

注意:权限修饰符可有可无,标识处也可以不为静态的标识;

示例如下:

public static int method(int a,int[] arr){
	//方法内容如下:……
}

返回值类型

  • 所谓的返回值就是方法执行完后,要返回的值;

  • 返回给方法的调用处;

  • 定义方法时,方法的返回值类型必须和具体的返回值类型完全相同;

    public static int name(){ //方法数据类型是 int
    	//方法的内容
    	return 10;			  //返回值数据类型是 int
    }
    
  • return 之后不能有语句,因为程序是顺序执行的;

  • 如果方法的返回值处事具体的数据类型,那么方法里必须有 return + 具体类型的值;

依然以统计人数举例:

import java.util.*;
class demo{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("你想知道我们学校的人数么(想/不想=1/0):");
        int agree  = scanner.nextInt(); //此时数据类型和方法数据类型一致
        if(agree == 1){
            int all = ThePeopleAmount(); //这里是方法的调用
            System.out.println("我们学校一共有"+all+"人!");
        }else if(agree == 0){
            System.out.println("ok!");
        }else{
            System.out.println("错误!请重新输入!");
        }
    }
    public static int ThePeopleAmount(){ //这是一个整数方法
        //我们来统计一个学校的人数
        int gradeOne = 1000; //高一
        int gradeTwo = 1200; //高二
        int gradeThree = 800; //高三
        int all = gradeThree+gradeTwo+gradeOne;
        return all; // 让ThePeopleAmount() == 300;
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例:

打印金字塔:

import java.util.*;
class demo{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("你确定要打印金字塔吗?(是/否=1/0)");
        int agree = scanner.nextInt();
        if(agree == 1){
            System.out.println("请问你要打印几个金字塔?");
            int x = scanner.nextInt();
            if (x <= 0){
                System.out.println("请输入正确数据!");
            }else{
                System.out.println("这是你的金字塔:");
                for(int i = 0; i < x; i++){
                    TheBeautiful();
                }
            }
        }else if( agree == 0){
            System.out.println("okk!");
        }else{
            System.out.println("请输入正确的数字!");
        }
    }
    public static void TheBeautiful(){
        for(int i=0; i<3;i++){
            for(int j=0; j<2-i;j++){
                System.out.print(" ");
            }
            for(int k = 0; k<i+1;k++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参数列表

参数列表是为了暴露出在调用方法时,可以传入方法内部,供方法内部使用的值;

参数列表是由多个参数组成的列表,多个参数之间使用 ”,“ 隔开;

public static int addParam(int a,int b){
	int sum = a+b;
	return sum;
}

参数列表有两个维度:

  1. 形式参数列表:在方法定义时使用的参数列表;
  2. 实际参数列表:在方法调用时使用的参数列表;

方法的调用

使用一个方法就是所谓方法的调用,让方法中的方法体运行,这就是方法的调用;

方法定义好以后没有调用,方法是不会执行的;

  • 方法的调用格式:

    方法名(实参列表);

  • 实参列表该怎么写:

    实参列表的写法必须参看形参列表,也就是说实参列表的个数,数据类型,顺序必须和形参列表完全相同;

示例一:

public static void main(String[] args){
	MethodOne(10); //只要是一个 int 就行
	MethodTwo(1,2);
	MethodTwo(3,"name");
}
public static void MethodOne(int a){
	System.out.println("MethodOne");
}
public static void MethodTwo(int a,int b){
	System.out.println("MethodTwo");
}
public static void MethodThree(int a,String name){
	System.out.println("MethodThree");
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

示例二:

创建一个两数相乘的方法,将两数作为参数,调用此方法获得结果并且打印此结果;

import java.util.*;
class demo{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int a = scanner.nextInt();
        System.out.println("请输入第二个数:");
        int b = scanner.nextInt();
        System.out.println(Method(a,b));
    }
    public static int Method(int a,int b){
        System.out.println("你的答案是:");
        int result = a*b;
        return result;
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

递归(了解)

定义:程序调用自身的编程技巧称为递归,方法内调用的方法执行的动作恰好和本方法一样,我们就可以调用这个方法本身,根据不同参数再执行一遍;

**注意:**为了防止无休止的调用,递归程序必须有一个结束的点,即不再执行程序的条件;

**示例一:**求阶乘;

import java.util.*;
class demo{
    public static void main(String[] args){
        //求阶乘
        Scanner scanner = new Scanner(System.in);
        System.out.println("你要计算的阶乘:");
        int num = scanner.nextInt();
        System.out.println(Method(num));
    }
    public static int Method(int num){
        if(num==1){  //不再执行程序的条件
            return 1;
        }else{
            return num * Method(num - 1);
        }
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

而上述代码只能运行到 16 的阶乘,因为 int 类型是 32 位,最高达到 2 31 − 1 2^{31}-1 2311

所以我们可以把代码改写成 long 型;

import java.util.*;
class demo{
    public static void main(String[] args){
        //求阶乘
        Scanner scanner = new Scanner(System.in);
        System.out.println("你要计算的阶乘:");
        long num = scanner.nextInt();
        System.out.println(Method(num));
    }
    public static long Method(long num){
        if(num==1){
            return (long)1;
        }else{
            return num * Method(num - 1);
        }
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**示例二:**求斐波那契数列;

import java.util.*;
class demo{
    // 1 1 2 3 5 8 13 21 34...
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int a = scanner.nextInt();
        System.out.println("请输入第二个数:");
        int b = scanner.nextInt();
        fbnq(a,b);
    }
    public static int fbnq(int a,int b){
        if((a+b)<100){
            System.out.print(a+" ");
            return fbnq(b,a+b);
        }else{
            return 0;
        }
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法的重载

定义:

在一个类中,多个方法的方法名相同,但方法的参数列表不同,是可以同时存在的,并且构成了方法的重载;

参数列表不同指的是参数的数据类型不同:

  • 方法名相同,参数列表的个数不同
  • 方法名相同,参数列表的数据类型不同
  • 方法名相同,参数列表的顺序不同
  • 方法的重载和返回值类型,权限修饰符无关
public static void m1(int a){}
public static void m1(int b){}
//以上两种不互为重载
public static void m2(int a,double b){}
public static void m2(double a,int a){}
//以上两种互为重载
public static void m3(int a){}
public static int m3(int a){}
//以上两种不互为重载

示例如下:

import java.util.*;
class demo{
    public static void main(String[] args){
        Method(1,2);
        Method();
    }
    public static void Method(int a,int b) {
        System.out.println("int a,int b");
    }
    public static void Method(){
        System.out.println("void");
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方法重载的意义:

让开发者更加直观方便地使用一个方法,实现一种固定的功能,但是参数是可选的;

下一章:由浅到深认识Java语言(8):数组&二维数组

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值