写在前面:本人是借助两本参考书自学的,其中部分例子和语句均是来自参考书。第一本:《Java 编程指南》,[美] Budi Kurniawan 著,闫斌 贺莲 译。第二本:《第一行代码 Java 视频讲解版》,李兴华 马云涛 著
个人对方法的理解: 假定有一部分代码可以实现一个功能(比如求和功能),而这部分代码在一段程序里被重复使用(比如很多次求和),这时就可以将这部分代码打包成一个代码块,命名为方法,通过直接调用方法实现所需功能,而不用重复输入相同的代码,达到程序代码的简洁性。(可以将这段代码看作一个小程序,而方法名就是这个小程序的名字,调用方法就是调用这个小程序)
一、方法的定义格式:
public static 返回值类型 方法名 (参数数据类型 参数名,…) {
方法体(一系列语句);
return [返回值];
}
1、关于返回值类型
返回值类型有两种:
- Java中的数据类型,例如“ int ”、“ double ”、“ string ”等。若使用这种返回值类型,则必须用 “ return [返回值] ”。
- “ void ”,代表返回值为空。若使用 void,则最后的 return 语句可有可无,也可直接使用 “ return ;” 结束方法定义,“ [返回值] ”不强求。
2、关于方法名
方法命名规则:第一个单词的首字母小写,之后的每个单词的首字母大写,中间没有其他符号。
3、关于参数数据类型和参数
参数的数据类型即是Java中的数据类型,参数命名规则遵循标识符规则。
引用:
注意:这里介绍的方法定义格式有使用限制:“定义在主类中,并且由主方法直接调用。
关于主方法在篇一中有介绍。
简单例子1:定义返回值为空,无参数的方法
public class prtintlnfo {
public static void main(String[] args) {
printInfor(); // 调用方法 printInfor ;
System.out.println("换行"); //直接输出
printInfor(); // 再次调用方法 printInfor ;
}
public static void printInfor() { // 定义返回值为空,没有参数的方法 ;
System.out.println("xA");
System.out.println("B");
} // 由于定义的返回值为空,故可不用return语句 ;
}
二、关于方法的使用——方法重载:
参数类型不同或个数不同,即使方法名相同也代表是不同的方法,即
1、
public static void pay(double money) { }
2、
public static void pay(int money) { }
3、
public static void pay(int money,int cash) { }
是三个互不相同的方法;调用方法时不仅仅依靠方法名判断调用哪个方法,还需要判断参数类型,比如:
pay(10.0); //调用上面第1种方法
pay(10); //调用上面第2种方法
pay(0 , 5); //调用上面第3种方法
例子2:定义返回值为空,无参数的方法
public class prtintlnfo {
public static void main(String[] args) { //定义主方法
pay(10.0); // 调用方法 pay ;
pay(10);
pay(0);
pay(0.00);
pay(0,3);
pay(2,0);
pay(2,3);
pay(0,0); // 调用方法
}
public static void pay(double money) { // 定义返回值为空,参数为double型,参数名为 money,方法名为 pay 的方法 ;
if (money > 0 ) {
System.out.println("小数型有钱");
} else {
System.out.println("小数型没钱");
}
// 由于定义的返回值为空,故可以不用return语句 ;
}
public static void pay(int money) { // 定义返回值为空,参数为 int 型,参数名为 money,方法名为 pay 的方法 ;
if (money > 0 ) {
System.out.println("整数型有钱");
} else {
System.out.println("整数型没钱");
}
// 由于定义的返回值为空,故可以不用return语句 ;
}
public static void pay(int money, int cash) { // 定义返回值为空,两个参数,参数为 int 型,参数名为 money 和 cash ,方法名为 pay 的方法 ;
if (money > 0 ) {
if ( cash > 0 ) {
System.out.println("既有整钱,又有零钱");
} else {
System.out.println("有整钱,没零钱");
}
} else {
if ( cash > 0 ) {
System.out.println("没整钱,有零钱");
} else {
System.out.println("既没整钱,又没零钱,买什么东西!");
}
}
// 由于定义的返回值为空,故可以不用return语句 ;
}
}
运行结果为:
小数型有钱
整数型有钱
整数型没钱
小数型没钱
没整钱,有零钱
有整钱,没零钱
既有整钱,又有零钱
既没整钱,又没零钱,买什么东西!
例子3:利用return语句结束方法调用:
public class prtintlnfo {
public static void main(String[] args) { //定义主方法
lucky(7);
lucky(9);
}
public static void lucky ( int x) { // 定义返回值为空,参数为 int 型,参数名为 x,方法名为 lucky 的方法 ;
if (x != 7 ) {
return; //return决定了若满足if语句的条件,直接结束方法,下面的语句不再运行
} else {
System.out.println("猜对啦!7是我的幸运数字哦!!");
}
}
}
运行结果为:
猜对啦!7是我的幸运数字哦!!
引用:
注意: 虽然方法重载可以返回不同数据类型的值,但从标准开发来讲,还是建议方法重载都返回相同类型的数据,只存在参数个数上的差别。
例子3:定义有返回值,有参数的方法
public class prtintlnfo {
public static void main(String[] args) { //定义主方法
int x = add(1,3); //此时 add(1,3) 值为1,赋给x
int y = add(1,2); //此时 add(1,2) 值为2,赋给y
int z = add(0,3); //此时 add(0,3) 值为3,赋给z
System.out.println("x = " + x );
System.out.println("x = " + add(1,3) ); //也可以直接将方法的返回值进行输出
System.out.println("y = " + y);
System.out.println("z = " + z);
}
public static int add(int x, int y) { //定义返回值类型为 int 、两个数据类型为 int 的参数,参数名为 x和y 、方法名为 add 的方法
if ( x == 1){
if ( y != 2) {
return x;
}
return y;
}
return x + y;
}
}
运行结果为:
x = 1
x = 1
y = 2
z = 3
三、关于方法的使用——方法递归调用:
引用
递归调用是一种特殊的调用形式,指的是方法自己调用自己的形式.在进行递归调用操作时必须满足两个条件:
1. 必须有结束条件
2. 每次调用时都需要改变传递的参数
Tips: 在最初学习的时候尽量少用递归,如果处理不当,就有可能出下内存的溢出问题.
例子4:
public class sum {
public static void main(String[] args) { //定义主方法
System.out.println(sumsum(100) ); // 1-100的累加
}
public static int sumsum (int num) { //定义方法和参数
if (num == 1 ) { //结束递归调用的条件
return 1 ; //最后一次调用的结果返回1
}
return num + sumsum (num - 1); //递归调用
}
}
流程分析:
第一次调用:return 100 + sumsum(99)
第二次调用:return 100 + 99 + sumsum(98)
… …
最后一次调用:return 100 + 99 +… …+ 1
运行结果为:
5050