方法的引入: 请看如下代码
public class methodTest01 {
public static void main(String[] args) {
//计算a和b之和:
int a = 10;
int b = 20;
int c = a + b;
System.out.println(c);
//计算x和y的和:
int x = 100;
int y = 200;
int z = x + y;
System.out.println(z);
//计算m和n的和:
int m = 25;
int n = 10;
int r = m + n;
System.out.println(r);
}
}
上述代码完成了三个求和功能,每一次求和都要把代码重新写一遍,代码的复用型很差。上述代码表面上看是三个功能,实际上只是一个求和功能,唯独每一次参与求和的数值不同。看下面改进代码的写法:
public class methodTest02 {
public static int sum(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int result = sum(10, 20);
System.out.println(result);
int result1 = sum(100, 200);
System.out.println(result1);
int result2 = sum(25, 10);
System.out.println(result2);
}
}
运行结果:
通过代码改进之后可以看到,方法其实就是一块普通的代码片段,并且这段代码可以完成某个特定的功能,并且可以重复的去使用,只要是可以独立出来的功能,都可以定义为一个单独的方法去完成具体的功能,如果后续需要使用此功能,直接去调用就好了,还有一点就是不要把所有的代码都放到主方法(main)当中,这样的代码的复用型很差。
方法的定义:
[修饰符列表] 返回值类型 方法名 (形参列表{
方法体;
}
方法的相关规则:
1:修饰符列表这一项是可选项,不是必须的,可以除了写成public,还可以写成protected,default(缺省), private
2:返回值类型,可以是基本数据类型和引用数据类型,如果不准备返回任何数据,则返回值类型必须写成void。
3:方法名,必须是合法的标识符,遵循小驼峰的命名方式,做到见名知意。
4:形参列表(int a ,int b)每一个形参都是局部变量,形参的个数没有限制,形参之间用英文状态下的逗号隔开,形参中起作用的是形参的数据类型,与参数名无关(参数名就是变量名,变量名可以修改)例如:(int a,int b) 可以修改成(int x ,int y)。
注意:方法在调用的时候,实际传给方法的数据称为实际参数列表,简称实参。java语法中规定:实参和形参必须一一对应(个数要一样,数据类型要对应,也可能发生自动类型转换)。
请看如下代码:
public class methodTest03 {
public static int sum(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int ret = sum(10, 5);
System.out.println(ret);
}
}
发生自动类型转换的情况:
ublic class methodTest03 {
//发生自动类型转换的情况,实参10和5都是整数类型,形参是double类型,发生自动类型转换
public static double sum(double a, double b) {
return a + b;
}
public static void main(String[] args) {
double ret = sum(10, 5);
System.out.println(ret);
}
}
方法返回值:
java语言中的返回值类型可以是基本数据类型也可以是引用数据类型。方法在执行完毕之后如果不需要返回数据,返回值类型写成void,不能什么也不写。
请看如下代码:
public class methodTest04 {
public static int sum(){
//编译出错(缺少返回值),这里的返回值是int
//在方法体中的代码的最后一行加上return 数据;
}
public static void main(String[] args) {
}
}
return 要加在方法体中的代码的最后一行,它表示方法执行结束。
public class methodTest04 {
public static int sum(){
//编译出错,一个方法当中,遇到return方法执行结束
return 1;
return 0;
return 7;
}
public static void main(String[] args) {
sum();
}
}
public class methodTest04 {
public static int sum(){
//编译出错,方法当中一遇到return,方法执行结束。return后面的语句将无法执行。
return 1;
System.out.println("你好");
}
public static void main(String[] args) {
sum();
}
}
return在分支语句中容易出错。请看如下代码:
public class methodTest04 {
public static int sum() {
boolean flag = true;
if (flag) {
return 1;
}
}
public static void main(String[] args) {
sum();
}
}
错误原因:此方法在申明的时候指定了返回值类型为int, java语法要求能够百分之百的保证,在结束的时候返回int类型的数据。而return 1出现在了if语句当中,对于编译器而言,它只知道return1有可能执行,也有可能不执行 ,所以java编译器报错了。
把代码改动一下,保证return1一定会执行,(这样写就没有问题了)请看如下代码:
public class methodTest04 {
public static int sum() {
boolean flag = true;
if (flag) {
return 1;
}
return 0;
}
public static void main(String[] args) {
sum();
}
}
当方法返回值是void 的时候,可以写return;但是return 后面不能加数据,也可以什么都不写。
请看如下代码:
public class methodTest04 { public static void sum() { return;//返回值是void,return后面不能加任何数据,编译通过 } public static void main(String[] args) { sum(); } }
//编译错误:返回值是void, return 后面不能加任何数据
public class methodTest04 { public static void sum() { return 1; } public static void main(String[] args) { sum(); } }
方法重载:方法重载是指在同一个类中定义多个同名的方法,但要求参数列表不同(参数类型不同,参数个数不同,参数的顺序不同)。调用重载方法时,java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。
在同一个类当中,如果多个功能是相似的,可以考虑将它们的方法名定义成一致的,使用方法重载机制。
满足以下三个条件构成重载:
1:在同一个类中。
2:方法名相同。
3:参数列表不同(个数不同,顺心不同,数据类型不同)。
请看如下代码:
public class OverloadTest01 {
public static void sum(int a, int b) {
}
public static void sum(int a, int b, int c) {
}
public static void sum(double a, double b) {
}
public static void sum(double a, double b, double c) {
}
public static void sum(double a, int b) {
}
public static void main(String[] args) {
}
}
注意:1:方法重载和方法的返回值没有任何关系,因为当方法执行结束之后的返回值可以接收也可以不接收。
2:最终要调用哪个方法,取决于调用的时候传递 的实际参数列表。