Java学习笔记4(方法)

时间:2023-02-26 16:10:49

方法和c++中的函数类似,区别在于java的方法定义不限位置,而c++中的定义在主函数后面的函数调用前要声明:

求矩形面积方法示例:

public class MethodDemo{
    public static void main(String[] args){
        int area = getArea(5,6);
        System.out.println("面积是:"+area);
    }
    public static int getArea(int w, int h){
        return w * h;
    }
}

输出:面积是:30

调用过程分析:

1.从main进入,开始执行程序

2.调用getArea方法,传递参数,得到返回值

3.输出

调用过程内存分析:

1.程序运行时期,必须进入内存,运行文件:编译后的class文件进入内存

2.class文件进入方法区

3.main方法进栈运行

4.getArea方法进栈运行

5.计算结果返回给调用者

6.getArea方法运行结束,出栈,释放内存资源

7.main输出后,出栈,释放内存资源,程序结束

注意事项:

1.方法不能定义在另一个方法内

2.方法名严格区分大小写

3.参数不能少传或多传,类型一致

4.return代表结束,不可以在return下面继续写,返回类型一致

 

方法重载:

 具体的重载的概念就不介绍了,这里实现一个最简单的重载

public class MethodDemo{
    public static void main(String[] args){
        int sum = getSum(2,3,1);
        System.out.println(sum);
    }
    public static int getSum(int a, int b){
        System.out.println("int+int");
        return a+b;
    }
    public static int getSum(int a, int b, int c){
        System.out.println("int+int+int");
        return a+b+c;
    }
    public static double getSum(double a, double b){
        System.out.println("double+double");
        return a+b;
    }
}

 

再来一个难点:

public class MethodDemo{
    public static void main(String[] args){
        int[] arr = {1,2,3,4};
        System.out.println(arr[2]);//3
        change(arr);
        System.out.println(arr[2]);//100
    }
    public static void change(int[] arr){
        arr[2] = 100;
    }
}

 

解释:

1.main方法进栈运行

2.在堆中开空间放入数组ARR并赋值

3.数组首地址传给栈中的ARR,即ARR指向存有这个数组的内存空间

4.调用change传递的参数方法实际上是内存地址,change中的ARR变量的地址和main中的ARR地址相同

5.在change方法运行结束后释放内存,但是通过地址改变的arr[2]彻底变了

通俗地理解:多个人合租房子,都拿到房屋地地址,某个人进入房子装修,以后进入的人看见的都是装修后的房子