11.方法
方法是完成某个功能的一组语句,通常将常用的功能写成一个方法。 定义方法就是编写一段有特定功能的代码,在程序中使用同样功能的地方,没有必要重复编写同样的代码,只要调用定义好的方法就可以。可以实现代码的重用。简化了程序的编写和维护工作。
11.1 方法的声明
/**
* 访问控制符 修饰符 返回类型 方法名字(参数列表 ...){
* 方法体
* }
*/
public static void fun1(int numa){
System.out.println("Fun1.fun1");
}
方法使用大括号包含语句块称为方法体,用于执行特定的功能操作。
方法体当中使用return关键字,它的作用是结束方法执行,并且把方法的执行(运算)结果返回到方法外部。 返回值:方法在执行完毕后返回给调用它的程序的数据 返回值类型:方法要返回的结果的数据类型
11.2 方法名词解释
- 修饰符:public 、static 被称为修饰符(后续会详细讲解它们);
- 返回值类型:用来说明该方法运算结果的类型。如果返回其他类型,编译就可能出错;
- 方法名:它作为调用时引用方法的标识;
- 形参列表:在方法被调用时用于接受外部传入的变量称为形式参数简称为形参,方法的形参个数可以是0个到多个,每个参数前面要声明参数的数据类型称为参数类型;每个参数要用逗号分开。也可以一个参数都没有。 方法体:它是一个语句块,执行特定的功能操作。对于有返回值类型的方法,方法体当中最后一个语句是
- return关键字,它的作用是把方法的执行(运算)结果返回到方法外部。
- return 表达式:return是关键字,作用是将return后面表达式的结果作为方法的返回值。需要注意表达式的类型,必须与方法头中声明的“返回类型”相匹配。
11.3 方法的分类
- 根据参数个数:
- 无参方法 有参方法
- 参数类型为基本数据类型
- 参数类型为引用数据类型 根据返回值类型: 有返回值的方法: 返回值类型为基本数据类型 返回值类型为引用数据类型 无返回值的方法 返回值类型使用void关键字
11.4 方法的调用
1、形参必须注明数据类型; 2、实参直接写,不需要类型声明;
3、return只能返回一次; 4、遇到return语句,方法结束执行,后续语句不执行; 5、方法的返回值,必须与方法声明中的返回值类型匹配;
6、方法定义,不能写在main()中; 7、方法是不能嵌套的。
11.5 方法的的递归
package com.neusoft.fun;
/**
* 项目: javaadvice
* 创建时间:2020/11/15 14:35
* 作者 :jshand
* 描述 : 方法的说明
*/
public class Fun2 {
// public static void sayHello(){
// System.out.println("大家好");
// Fun2.sayHello();
// }
/**
* 5! 5* 4! 4!= 4*3! 3!= 3*2 1?
//* @param args
//递归,可以使用循环实现 ,
*/
public static int jc( int num ){
if(num == 1){
return 1;
}
return num * jc(num-1);
}
public static void main(String[] args) {
int jc = Fun2.jc(3);
System.out.println("jc: "+jc);
}
}
11.6 方法的重载
方法的重载(overload) 方法的重载就是在同一个类中允许同时存在一个以上同名的方法
方法重载的规则 方法名称相同 方法的参数必须不同 参数个数不同 或 参数类型不同 方法的返回值类型可以相同,也可以不同
/**
* 有参函数
* @param numa
* @param numb
*/
public static void sum(int numa ,int numb){
System.out.println("Fun1.sum:"+(numa+numb));
}
//可以出现同名函数 ,根据参数列表区分, 方法的重载
/**
* 方法名一样,参数列表不一样
* @param numa
* @param numb
*/
public static void sum(double numa ,double numb){
System.out.println("Fun1.sum:"+(numa+numb));
}
11.7 可变长参数
在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用
例如
print("hello");
print("hello","lisi");
print("hello","张三", "alexia");
使用...表示可变长参数,在具有可变长参数的方法中可以把参数当成数组使用
例如可以循环输出所有的参数值。
void fun(类型... 形参名字){
// 形参名字.length
}
系统中常见的
//printf的用法
public static void main(String[] args) {
String name ="刘备";
int age = 18 ;
String address ="东北" ;
System.out.printf("大家好,我是%s, 我今年%d,家住%s",name,age,address);
}
需求,根据给定的参数列表,拼接成一个字符串,输出
package com.neusoft.fun;
/*
* 项目: javaadvice
* 类名: Fun4
* 创建时间: 2020/11/17 14:38
* 描述 :
* 作者 : 张金山
* QQ: 314649444
* Site: https://jshand.gitee.io
*/
public class Fun4 {
public static void main(String[] args) {
out("大家好","我是刘备","我今年18");
}
public static void out(String ... msgs){
StringBuffer stringBuffer = new StringBuffer();
for (String msg : msgs) {
stringBuffer.append(msg+"\t");
}
System.out.println(stringBuffer.toString());
}
}
使用原则:
在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法。
javapublic class Fun4 { public static void main(String[] args) { out("大家好","我是刘备"); //匹配的是固定长度 } public static void out(String str1 ,String str2){ System.out.println("固定长度\t"+str1 +"\t"+str2); } public static void out(String str1,String ... msgs){ StringBuffer stringBuffer = new StringBuffer(); for (String msg : msgs) { stringBuffer.append(msg+"\t"); } System.out.println(stringBuffer.toString()); } }
如果要调用的方法可以和两个可变参数匹配,则出现错误
一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的最后一个参数
错误
正确
避免带有可变长参数的方法重载。
