方法和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]彻底变了
通俗地理解:多个人合租房子,都拿到房屋地地址,某个人进入房子装修,以后进入的人看见的都是装修后的房子