方法及方法的重载(Java)
1.方法的概念
所谓方法:通俗的讲就是我们解决某件事情的办法;当然也不例外,在Java中,方法也是为了解决某件事情或实现某个功能的;
2.为什么需要方法**
不难理解,当我们做一件事情的时候,如果我们知道用何种方法去解决它,那就事半功倍了,提高了我们的工作效率,同时有了方法,也避免了走弯路;
3.方法的语法规则及练习
(一)方法的定义
修饰符 返回值类型 方法的名字(参数列表){
方法体;
return 返回值;
}
对于上面的语法规则,需要的注意事项有:
(1)修饰符
修饰符就是对方法进行限定,修饰符也是可以选择的,有静态修饰符,还有最终修饰符等等;
(2)返回值类型
a, 要注意返回值的类型不能省;
b, 方法定义时, 返回值也可以没有,比如main方法,如果没有返回值, 则返回值类型必须写成 void;
(3) 方法的名字
按照小驼峰命名规则,见名知意即可;
(4)参数列表
a,当方法没有参数时,方法名之后的()也不能省略;
b, 方法的参数个数可以是1个,也可以是2个或者多个;
(5)方法体
按照一定的次序组织的语句,注意适当加注释;
(6)return关键字
用来结束方法以及返回方法指定类型的值;
(7)在Java 中,没有方法的声明,定义方法时,也不能嵌套;
(二)方法的练习
1.定义两个整数相加的方法
public static int addInt(int a, int b) {
return a + b;
}
2,定义两个小数求最大值的方法
public static double max(double a,double b){
return a>b?a:b;
}
3,定义9*9乘法口诀表方法
public static void printMulTable() {
for (int i = 1; i < 9; i++) {
for (int j = 1; j < i; j++) {
System.out.printf("%2d * %2d = %2d", i, j, i * j);
}
System.out.println();
}
}
我们知道,定义方法的时候, 是不会执行该方法的代码,只有在调用的时候才会执行;
4,方法的调用
方法调用的过程:
调用方法------->传递参数------->找到方法地址------->执行被调方法的方法体------->被调方法结束返回------->回到主调方法继续往下执行;
public static void main(String[] args) {
printMulTable(); // 调用乘法口诀表方法
}
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println("addInt 第一次调用");
int ret=addInt(a,b) ;
System.out.println(ret); //30
System.out.println("addInt 第二次调用");
ret=addInt(100,200) ;
System.out.println(ret); //300
}
需要注意的是:一个方法是可以被多次调用的;
5.方法的重载
重载:在Java
中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了;
(1)定义求和方法的重载
public class test {
//定义两个整形变量相加
public static int add(int a, int b) {
return a + b;
}
//定义三个整形变量相加
public static int add(int a, int b, int c) {
return a + b + c;
}
//定义两个浮点型变量相加
public static double add(double a, double b) {
return a + b;
}
public static double add) {
return a + b;
}
public static double add(int a, double b) {
return a + b;
}
}
重载的注意事项:
参数列表的不同体现在以下三点
- a,参数个数的不同,如
add(int a,int b)
与add(int a,int b,int c)
的不同; - b,参数类型的不同,如
add(int)
与add(double)
的不同; - c,参数顺序的不同,如
add(int a,double b)
与add(double a,int b)
的不同;
重载与方法的返回值类型是否相同没有关系;我们可能会产生疑问,构成重载的方法名字是相同的,JVM如何知道该调用那个方法呢?
角度不同,看到的东西就不一样;
(1)对我们而言,是定义了几个不同重载的add方法;
(2)对Java
虚拟机而言,其实质是经过编译器处理之后的字节码文件,最终虚拟机看到的名字中包含:全路径+方法名+参数类型+返回值类型,对于到底调哪一个方法,编译器会对传递的实参值进行推演,如果找到了与之对应的方法,就进行调用,没找到,编译器会报错;
点击 View 下的 Show Bytecode 可以进行查看
如 test.add (II)I