一、方法导论:
方法(method):就是完成特定功能的代码块
比如:
public static void main(String[] args){
System.out.println(HelloWorld);
}
主方法他其中代码的功能:是在控制台输出一个字符串数据:HelloWorld
再举个例子:植物大战僵尸
假如豌豆射手需要20行代码实现他的发射炮弹功能
寒冰射手也需要20行代码实现他的发射炮弹功能
大头菜射手也需要20行代码实现他的发射炮弹功能......
那么每个植物我们都要写发射炮弹的代码,而代码实现的功能一样,就很麻烦!
针对这种情况Java的程序员就提出方法
我们只需要把发射炮弹打包,定义一个方法:发射
接下来发炮弹的时候,直接调用发射方法就行
这时候新加入一个射手,这个植物也要发射炮弹,我们也是直接调用方法就行
二、静态方法的定义和调用
2.1、静态方法的通用定义
public static 返回值类型
//方法体(具体实现的功能)
return 数据;
}
格式说明:
public static:修饰符,目前先记住这个格式
返回值类型:方法操作完毕之后返回的数据的数据类型(如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般return可以省略)
方法名:方法的命名,调用方法时候使用的
形式参数:由数据类型和变量名组成,多个参数之间用逗号隔开
方法体:完成功能的代码块
return:如果方法操作完毕,有数据返回,用于把数据返回给调用者
定义方法时,要做到两个明确
首先明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型。
其次明确参数:主要是明确参数的类型和数量
2.2、形参和实参的区别
形参:方法定义的参数
实参:方法体中定义/直接字面量的参数
public class mothodDemo {
public static void main(String[] args) {
int number = 9;
if (isEvenNumber(number)) {
System.out.println(number + "是偶数");
} else {
System.out.println(number + "不是偶数");
}
}
public static boolean isEvenNumber(int number) {
if (number % 2 == 0) return true;
return false;
}
}
可以看到上面的这段代码中:(红色为形参,蓝色为实参)
isEvenNumber(int number)方法实现的功能是判断number是不是偶数,并且返回一个boolean类型的数据表示是不是偶数;
main(String[] args)方法实现的功能是提供主方法入口,调用了isEvenNumber方法判断实参number是否为偶数,并在控制台打印判断结果;
2.3、静态方法的调用
静态方法的调用方式有两种:
1、在同一包下的静态方法可以直接通过方法名调用,或者类名.方法名的形式调用
2、在不同包下的静态方法需要import导包,或者通过包名.类名.方法名的形式调用
还是举例说明:水仙花数
需求:设计一个方法用于判断一个整数是否是水仙花数,调用方法,把结果在控制台输出。
分析:
①方法定义使用两个明确分析该方法的参数和返回值参数:int number返回值类型:boolean
②方法调用变量接收调用
示例代码:
public class mothodTest {
public static void main(String[] args) {
int number_01 = 111;//待测试用例1
int number_02 = 153;//待测试用例2
//判断测试用例一
if (isFlowerNumber(number_01)) {
System.out.println(number_01 + "是水仙花数");
} else {
System.out.println(number_01 + "不是水仙花数");
}
//判断测试用例二
if (isFlowerNumber(number_02)) {
System.out.println(number_02 + "是水仙花数");
} else {
System.out.println(number_02 + "不是水仙花数");
}
}
//定义带参带返回值的静态方法判断水仙花树
public static boolean isFlowerNumber(int number) {
int geWei = number % 10;
int shiWei = number / 10 % 10;
int baiWei = number / 100 % 10;
if (geWei * geWei * geWei + shiWei * shiWei * shiWei + baiWei * baiWei * baiWei == number) {
return true;
} else {
return false;
}
}
}
从控制台输出的结果可以看出,我们调用了定义的带参带返回值的静态方法成功判断了111不是水仙花数,153是水仙花数。
三、静态方法的注意事项
主要分享两点容易出错的:
3.1、方法不能嵌套定义
3.2、void表示无返回值
可以省略return,也可以单独写return表示结束,后面不跟任何数据类型。
四、方法重载
4.1、什么是方法重载
方法中一个非常重要的特性:方法重载。
什么是方法重载:
方法重载:指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同
上面两个静态方法,在用一个类下,同样的返回值类型,同样的方法名,只有参数不同,实现不同的功能,这说明:在Java调用方法的时候,Java得Jvm(虚拟机)就会自动通过参数分别同名的重载方法。
4.2、方法重载的特点
知道了什么是方法重载后,我来说一下方法重载的特点:
- 类型不同或者数量不同重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
- 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
4.3、练习
求和
需求:使用方法重载的思想,设计能将两个整数/三个整数/两个浮点数求和的方法
示例代码:
/*方法重载:
多个方法在同一个类中
多个方法具有相同的方法名
多个方法的参数不相同,类型不同或者数量不同
调用方法的时候,Java虚拟机会通过参数的不同来区分同名的方法
*/
public class mothodTest_01 {
public static void main(String[] args) {
int number_01=1;
int number_02=2;
int number_03=3;
double number_04=5.2;
double number_05=2.1;
int sum_01=sum(number_01,number_02);
int sum_02=sum(number_01,number_02,number_03);
double sum_03=sum(number_04,number_05);
}
//两个int类型的整数求和
public static int sum(int a, int b) {
return a + b;
}
//三个int类型的整数求和
public static int sum(int a, int b, int c) {
return a + b + c;
}
//两个double类型的浮点数求和
public static double sum(double a, double b) {
return a + b;
}
//不能通过返回值来判定两个方法
/*public static double sum(int a,int b){
return (double)(a+b);
}*/
}
比较相等
需求:使用方法重载的思想,设计比较两个整数是否相等的方法,兼容全整数类型(byte,short,int,long)
示例代码:
/*方法重载:
多个方法在同一个类中
多个方法具有相同的方法名
多个方法的参数不相同,类型不同或者数量不同
调用方法的时候,Java虚拟机会通过参数的不同来区分同名的方法
*/
public class mothodTest_02 {
public static void main(String[] args) {
System.out.println(compare(10, 20));
System.out.println(compare((byte) 10, (byte) 20));
System.out.println(compare((short) 10, (short) 20));
System.out.println(compare(10L, 20L));
}
//int类型的比较是否相等
public static boolean compare(int a, int b) {
System.out.println("int类型的比较是否相等:");
return a == b;
}
//byte类型的比较是否相等
public static boolean compare(byte a, byte b) {
System.out.println("byte类型的比较是否相等:");
return a == b;
}
//short类型的比较是否相等
public static boolean compare(short a, short b) {
System.out.println("short类型的比较是否相等:");
return a == b;
}
//long类型的比较是否相等
public static boolean compare(long a, long b) {
System.out.println("long类型的比较是否相等:");
return a == b;
}
}