方法介绍?
-
什么是方法?
- 方法就是一段代码的集合,这段代码完成了某个功能,业务场景。
- 一个方法就是一个功能。
-
为什么使用方法?
避免main方法中的代码堆积,造成后期代码拓展和维护的成本增加。
-
如何使用方法?
- 格式与main方法大致相同。
public static void(返回类型) 方法名(参数列表){}
2.在main方法中通过方法名调用需要执行的方法。
3.方法()中的内容,参数,就相当于一根天线。用来接收调用者发送的数据信息。
4.方法计算出来的值,其他的方法也可以使用。
5.一个方法如果声明了void,证明该方法无返回值。不能写return返回语句。
6.如果一个方法存在返回结果,方法的void应修改为返回结果的数据类型。
7.在方法体的最后一行可以写return语句返回具体的值。
-
调用方法流程
方法重载
-
方法重载的含义
- 在一个类中编写方法时,如果出现多个方法的所做的事情是一样时,为了满足见名知意的规范,我们可以起同样的方法名。
- 在一个类中定义同名方法是可以的,并将之称之为重载。
-
注意事项
-
就进原则:当调用语句中的数据类型,在调用方法中找不到完全匹配的时候,它会按照就近原则,选取调用方法。
就近顺序:byte>short>int>char>long>float>double.从小往大的方向匹配。
如果没有基本数据类型,就会寻找基本数据类型的包装类,最后才会寻找可变参数。
当出现两个方法都符合匹配次序的话,程序会报错。
-
两同三不同:只有符合两同和三不同中的一个时,方法才能重载。
两同:同名,同类
不同:参数列表类型不同,参数列表顺序不同,参数列表长度不同。
-
代码示例
-
计算圆柱体的面积
/** 计算圆柱体的表面积 1:声明一个方法计算圆的面积 2:声明一个方法矩形的面积 3:声明一个方法计算累加和 1:如何声明? 照着main方法抄 2:这个方法完成什么功能 知道了方法中的逻辑如何编写 3:这个方法的执行需不需要帮忙? 参数列表 1:方法就是一个功能模块,完成某个功能。 不要重复造轮子。方法是可以复用的。 2: 变量:首字母小写 其它每个单词的字母均大写 类: 首字母大写 其它每个单词的字母均大写 方法:首字母小写 其它每个单词的字母均大写 */ import java.util.Scanner; public class Demo05{ public static void main(String[] args){ System.out.println("请输入计算的圆的半径>>>>>>"); //创建一个Scanner对象 Scanner input = new Scanner(System.in); //通过Scanner对象中的nextInt方法获取用户输入的int值 int r = input.nextInt(); double area = getArea(r); System.out.println("请输入计算的圆柱体的高>>>>>>"); //通过Scanner对象中的nextInt方法获取用户输入的int值 int width = input.nextInt(); //计算半径为r的圆的周长 double length = getZC(r); //计算矩形的表面积 double jArea = getArea(length,width); //计算圆柱体的表面积 double sumArea = getYZT(area,jArea); System.out.println("以半径为"+r+"的,高为"+width+"的圆柱体的表面积是:"+sumArea); } //调用语句的参数名和方法名参数列表的参数名可不相同 public static double getYZT(double yArea,double jArea){ return yArea*2+jArea; } /** //@+单词 注解 @param r 需要计算的圆的半径 @return double 返回计算的圆的周长 */ public static double getZC(int r){ //参数判定 代码的健壮性更好 ? 防御性编程 if(r==0){ return 0; } //计算周长 double pi = 3.14; double zc = 2*pi*r; //返回周长 return zc; } /** 计算矩形的面积 */ public static double getArea(double length,int width){ double area = length*width; //System.out.println(area); return area; } /** 计算半径r的圆的面积 */ public static double getArea(int r){ //声明一个变量存放pi的值 double pi = 3.1415; //声明圆的半径 //int r = 4; //计算面积 double area = pi*r*r; System.out.println("半径是"+r+"的圆的面积是"+area); return area; } } //以半径为4的,高为4的圆柱体的表面积是:201.008
-
面试题
按照最近原则判定以下程序输出内容:
public class Demo07{
public static void main(String[] args){
char ch = 'A'; info(ch);
}
public static void info(char ch){
System.out.println("info char");
}
public static void info(int ch){
System.out.println("info int");
}
public static void info(long ch){
System.out.println("info long");
}
public static void info(double ch){
System.out.println("info double");
}
}
//执行完全匹配的,结果输出info char
public class Demo08{
public static void main(String[] args){
info(12,12.1f);
}
public static void info(char ch,double d){
System.out.println("info char ch,double d");
}
public static void info(int ch,double d){
System.out.println("int ch,double d");
}
public static void info(long ch,float d){
System.out.println("long ch,float d");
}
}
//程序报错,因为存在两个可以调用的方法
public class Demo06{
public static void main(String[] args){
info(12);
}
public static void info(long l){ //基本数据类型,编号1
System.out.println("info long l");
}
public static void info(Integer in){ //基本数据类型的包装类,编号2
System.out.println("Integer in");
}
/* jdk1.5之后,支持可变参数 */
public static void info(int ... ins){ //可变参数,编号3
System.out.println("Integer ... ins");
}
}
//当编号1,2,3都存在时,执行,编号1;当只有编号2,3时,执行编号2;只存在编号3时,执行编号3.
递归
一种编程技巧,在程序中方法自己调用自己。
优势:更快写出代码,复杂度低。
劣势:消耗内存大。
注意:可以使用递归的一定可以使用循环,使用循环的不一定可以使用递归。
使用场景:算法,数据结构。
尾递归:做到栈帧复用的递归。
经典案例:斐波那契数列(尾递归)
package com.mage.var;
public class Test01{
public static void main(String[] args){
int num = 4;
long result = method(num,1,1);
System.out.println("第"+num+"项斐波那契数列是"+result);
}
public static long method(long num,long ret1,long ret2 ) {
if(num==1) {
return ret1;
}else {
return method(num-1,ret2,ret1+ret2);
}
}
}
//结果为:第4项斐波那契数列是3
网友评论