Java方法的使用,方法使用的几种情况,方法的重载,方法递归的理解思路
前言
本文我们将学习Java里的方法,老师出了一个问题,想要大家来计算两个数之间的和,小明非常聪明,想要通过编写程序来解决,于是他非常机智的写了一段求两个数之间的和的代码,但很快他发现了问题,老师竟然出了100道题!!!,小明此时很郁闷,难道他要把求和的代码写100次吗,这就引出了我们接下来要学的——Java方法的使用
一、什么是方法?
方法是定义在类中的具有特定功能的一段独立小程序,我们可以事先把重复利用的代码写在一个方法体中,这样以后我们再想要用到这段代码的时候就不需要重新写一遍了,直接通过这段代码的名字(方法名)即可调用。
方法的格式:
修饰符 返回值类型 方法名(数据类型1 变量名1,数据类型2 变量名2...){
语句;
return(返回值类型为void则不需要return)
}
可能初学者对方法的格式有时会记不清楚,实际上方法的定义一共就四部分:
1.修饰符,有:public private protected static(修饰符后面会讲)等,对于初学者来说在学面向对象之前用到的只有public + static,其中public也可以不写,也就是说修饰符部分只需要写static即可,现在只需要记住如果该方法要在main函数中运行,必须要加上static。
2.返回值类型,目前就是我们之前所学的八大基本数据类型short、int、long、float、double、byte、char、boolean,如果我们调用这个方法不需要他给我们一个返回值,那么就要写上void,返回值这里不可省略
3.方法名,就是我们要调用这个方法时用到的名字,一个程序当中有很多很多中方法,那java怎么知道我们要调用哪个方法呢,正是通过方法名来实现的,方法名要遵循驼峰准则,见名知意,第一个单词的首字母小写,后面单词的首字母大写(比如获取名字可以用getName,设置名字可用setName),方法名后括号里的参数则是要填写这个方法中需要用到的参数,比如求两个数的和,你调用这个方法的时候你需要告诉程序要求哪两个数的和,不然程序它哪里知道,当然如果没有参数的话也可以不写(比如方法当中有Scanner,参数是程序运行时自己输入的,这个时候就不需要写参数)
4.方法体,就是我们方法中最重要的部分,方法体里面定义了当我们调用这个方法的时候要实现的某种功能,如果最后有返回值则一定要有return 变量,否则程序无法执行
需要的注意问题:
Java中不允许嵌套方法,也就是不能在方法中定义其他方法,但是可以在方法中调用其他方法
二、方法的几种实现形式
方法中的返回值和参数之间没有必然的联系,大致可分为以下四种情况
1、有返回值有参的方法
定义一个方法,实现给定长和宽可以求得矩形的面积
分析题目我们可以知道,调用该方法的最终目的是要获得这个矩形的面积,也就是说我们是需要这个返回值的,所以该方法有返回值double类型,并且我们需要告诉该程序要求一个长和宽为多少的矩形,所以该方法需要我们提供两个参数
实现代码如下:
//定义一个求矩形面积的方法
public static double area(double length,double width){
double area = length * width;
return area;
}
2、有返回值无参的方法
定义一个方法,实现将用户输入的数字打印出来
分析题目我们可以知道,我们最终需要的是我们输入的数字,所以有返回值int,但是这个方法需要的数字是通过我们输入得到的,只需要在方法中调用sc.nextInt()方法即可,所以该方法无需传入参数
实现代码如下:
//键盘录入,得到一个整数
public static int scInt(){
Scanner sc = new Scanner(System.in);
int i1 = sc.nextInt();
return i1;
}
3、无返回值有参的方法
定义一个方法,实现打印N行,每行M个*
分析题目我们可以知道,我们调用这个方法要达到的效果是让程序根据我们输入的行数和个数来打印*号,所以该方法有两个参数,打印星号是由程序直接输出的,所以该方法无需返回值,用void定义即可
实现代码如下:
//打印M行,每行N个**
public static void priStar(int i,int j){
for (int k = 1; k <= i; k++) {
for (int l = 1; l <= j; l++) {
System.out.print("*");
}
System.out.println();
}
}
4、无返回值无参的方法
定义一个方法,实现打印3行,每行3个*
分析题目我们可以知道,题目中需求已经给定,不需要用户自己去定义,而且打印也无需参数,故该方法没有返回值,且无参,我们每次调用该方法时固定输出三行三列的*号
实现代码如下:
//打印三行,每行三个***
public static void priStar(){
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
System.out.print("*");
}
System.out.println();
}
}
三、方法的重载
方法的重载从字面上理解就是方法的重新载入,既然是重新载入,那么方法体内的东西必然是不变的,这就像我们买东西一样,买东西的流程是不变的,而且我们是买东西,总不能是卖东西(名称不变)要改变的只可能是商品的数量和商品的类型而已,方法的重载就是这样,总结起来只有五个字:同名不同参也就是方法名相同,返回值类型、参数的类型和数量都可以不同
以求两个数相加的方法为例,当我们调用这个方法的时候可能传入的是两个整数,也有可能传入的是两个小数,也有可能传入的是三个整数,对于这种传入参数的类型不同,但是实现逻辑一致的问题就需要用到方法的重载
实现代码如下:
//两个整数相加
public static int numAdd(int i1, int i2){
return i1 + i2;
}
//两个小数相加
public static int numAdd(double d1, double d2){
return d1 + d2;
}
//三个整数相加
public static int numAdd(int i1, int i2, int i3){
return i1 + i2 + i3;
}
这个时候我们再调用这个方法的时候,java就会根据你输入的参数类型和数量自动调用相应的方法
四、方法的递归
之前我们说过,不能在方法中定义其他方法,但是可以在方法内部调用方法,方法的递归就是在我们定义方法的时候调用自身,也就是自己调用自己
要用递归首先要满足两个条件:
1.方法调用本身
2.有跳出自身调用自身这个过程的条件
以求n的阶乘为例,首先分析该方法是有返回值的,返回值就是n的阶乘,并且该方法需要我们传入一个参数,该参数是我们要求哪个数的阶乘,所以该方法是有返回值有参的方法
实现代码如下:
//求n的阶乘
public static int factorial(int i){
}
其次我们分析如果求10的阶乘那么也相当于求10 * 9的阶乘,只要知道了9的阶乘,那么就可以求出结果,9的阶乘相当于9 * 8的阶乘,依次类推,一直到2 * 1,这就相当于一个人要寻找一个答案,他去问第一个人,第一个人告诉他要想得到答案得去找第二个人,第二个人同样让他去找第三人,直到他找到了最后一个知道答案的人,最后一个知道答案的人看这个人历经千辛万苦满足了资格,于是告诉了他答案,这个人拿着答案回去,并且把答案告诉了这一路上他问过的所有人,最终解决了问题,也就是说我们求10的阶乘,相当于让10去找9的阶乘问答案是多少,9的阶乘说,我的答案在8的阶乘那里,以此类推,直到找到1这个答案,最后有了1这个答案,2的阶乘知道了自己,3的阶乘也知道了自己,一直往回走,所有人都知道了自己的答案,10的阶乘最终也知道了自己的答案,最后我们也成功知道了答案(狗头)
实现代码如下:
//求n的阶乘
public static int factorial(int i){
if(i == 1){
return 1;
}
return i * factorial(i - 1)
}
总结
本节主要介绍了方法的使用,方法使用的几种情况,方法的重载,以及初学者对于方法递归的理解思路,如有不足,欢迎指出,希望本文对大家有所帮助