java学习(六)方法
目标:掌握方法如何调用;理解栈数据结构;理解方法执行过程中内存是如何变化的;掌握方法的重载机制;掌握方法递归算法。
方法定义与调用
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
代码示例----无返回值
public class MethodTest_01{
public static void main(String[] args) {
MethodTest_01.sumInt(100, 200); //调用方法sumInt
MethodTest_01.sumDouble(6.0, 8.0); //调用方法sumDouble
}
public static void sumInt(int x , int y){
System.out.println(x + "+" + y + "=" + (x + y));
}
public static void sumDouble(double a , double b){
System.out.println(a + "+" + b + "=" + (a + b));
}
}
代码解释:
-
[修饰符列表] ,目前大家统一写成 public static
-
如果一个方法执行结束之后不准备返回任何数据,则返回值类型必须写 void
-
方法名,遵循驼峰命名方式
-
形式参数列表(int x, int y)
-
方法体,由一对儿大括号括起来,在形参的后面
代码示例----接收返回值
public class MethodTest_02{
public static void main(String[] args) {
//可以编译也可以正常运行
sumInt(10 , 20); //调用sumInt方法
int retValue = sumInt(100 , 200); //接收返回值,变量的数据类型和返回值类型要一致哦
System.out.println("计算结果 = " + retValue); //打印变量的值
//编译报错,返回值类型是 int,不能采用 byte 接收
//byte retValue2 = sumInt(1 , 2);
}
public static int sumInt(int a , int b){
return a + b;
}
}
栈,又称堆栈,先进后出原则
-
什么时候压栈?定义方法只是将代码存储在方法内并不会在栈内存中给分配空间,只有调用方法的时候,java虚拟机才会在“栈内存”中给该方法分配空间,此时发生压栈动作
-
什么时候弹栈?这个方法执行结束的时候,这个方法在栈内存中所对应的活动空间就会释放掉,此时发生弹栈动作。
代码执行顺序
public class MethodTest_03{
public static void main(String[] args) {
System.out.println("main begin");
m1();
System.out.println("main over");
}
public static void m1() {
System.out.println("m1 begin");
m2();
System.out.println("m1 over");
}
public static void m2() {
System.out.println("m2 begin");
System.out.println("m2 over");
}
}
main begin 先将main方法压栈,输出main begin,后面代码在main栈底部
m1 begin 再将m1方法压栈,输出m1 begin,后面代码再m1栈底部
m2 begin 再将m2方法压栈,此时m2方法栈在栈顶部 ,先输出 m2 begin
m2 over 再输出m2 over ,弹出m2栈
m1 over 此时m1栈在栈顶,输出m1 over,弹出m1栈
main over 此时栈内只有一个main栈,输出main over,弹出。执行到此栈空了,程序执行完成。
方法重载:什么是方法重载?什么情况下我们考虑使用 方法重载?
方法重载(overload)是指在一个类中定义多个同名的方法, 但要求每个方法具有不同的参数的类型或参数的个数。调用重载方法时,Java 编译器能通过检 查调用的方法的参数类型和个数选择一个恰当的方法。
代码满足以下3个条件就会方法重载
-
在同一个类当中。
-
方法名相同。
-
参数列表不同:个数不同算不同,顺序不同算不同,类型不同也算不同。