方法(函数)function

定义方法、调用方法

格式:
修饰符public static+ 返回类型 void\int+ 函数名(形参列表)
{
函数体;
Return 返回值;
}
方法不需要返回结果,则申明返回值类型为void,内部不能使用return返回数据。

方法常见问题
image.png

方法内存图

方法在没有被调用的时候,在方法区的字节码文件中存放;方法被调用的时候,需要进入到栈内存中运行。
image.png
调用方法放入栈内存,是为了充分地利用栈“先入后出,后入先出”的原理。
例如:先调用main,将main方法放入内存,代码运行后发现要调用study方法,这时从方法区将study方法调入到栈内存,这时由于栈的特性,会先执行study方法,而main
方法的运行会滞后。
总结;方法运行的地方在栈内存。


方法的参数传递机制

一般在进行值传递时,都是将实参传递给形参,而且并不是
实参:在方法内部定义的变量(例如:在main方法中定义的变量)
形参:在定义方法时,“()”中声明的参数。
引用类型的参数传递:是实参将地址传递给形参,所以,实参和形参都是指向堆内存中的同一对象,一旦在方法内部将对象进行改变,则对象则彻底改变。
基本类型和引用类型参数传递的不同:
1、都是值传递。
2、基本类型参数传输存储的数据值。
3、引用类型的参数传输的地址值。

方法参数传递案例

打印数组内容【注意可以用?:做条件选择来减少代码行数】
1. public class PrintInt {
2. public static void main(String[] args) {
3. int[]a=new int[]{11,22,33,44,55};
4. PrintInteger(a);
5. }
6. public static void PrintInteger(int a[])
7. {
8. if(a!=null&&a.length>0)//防止传入空数组报bug
9. {
10. System.out.print(“该数组内容为:[“);
11. for (int i = 0; i < a.length; i++) {
12. System.out.print(i==a.length-1?a[i]:a[i]+”, “);
13. }
14.
15. System.out.print(“]”);
16. }
17. else
18. {
19. System.out.println(“您的数组格式错误。”);
20. }
21. }
22. }

从数组中查询指定元素的索引
1. public class ArrayQuery {
2. public static void main(String[] args) {
3. int[]a=new int[]{11,22,33,44,55};
4. System.out.println(“输入元素:”);
5. Scanner sc=new Scanner(System.in);
6. int element=sc.nextInt();
7. System.out.println(“您查询的索引是:”+Indexing(a,element));
8. }
9. public static int Indexing(int[]arr,int element)
10. {
11. for (int i = 0; i < arr.length; i++) {
12. if(arr[i]==element)
13. {
14. return i;
15. }
16. }
17. return -1;
18. }

比较2个数组是否一样
1. public class JudgeSame {
2. public static void main(String[] args) {
3. int[]a=new int[]{1,2,3};
4. int[]b=new int[]{1,3};
5. System.out.println(judge(a,b));
6. }
7. public static boolean judge(int[]a,int[]b)
8. {
9. if(a.length!=b.length)return false;
10. for (int i = 0; i < a.length; i++) {
11. if(a[i]!=b[i])return false;
12. }
13. return true;
14. }
15. }


方法其他常见形式:方法重载

方法重载:同一个类中,出现了多个方法名称相同,但是形参列表是不同的。
为什么方法不会冲突:调用相同方法名的方法,会通过参数的不同来区分调用的是哪个方法,不会冲突。
使用方法重载的好处:可以在同一API下,通过形参的不同实现工程的差异,使程序员减少对API的记忆。同时,方法重载后的方法之间可以相互引用,使代码更加简洁,如例2。
image.png
image.png
image.png

注解:只关注方法的名称和形参。形参的不同是指个数、类型、顺序。
1、若方法的名称相同、形参相同,返回值类型不同,则依然认为他们没有重载;
2、若方法1:(int a); 方法2:(int b); 他们的形参名称不同,但是形参类型相同,则认为没有重载;
3、若方法1(float a,int b);方法2(int c,float d),两个方法的形参虽然类型相同,但顺序不同,则他们方法重载。
案例:
image.png

单独使用return关键字

image.png