方法(二)

方法在计算机中的执行原理

  • 方法被调用的时候,是进入到栈内存中运行。

栈内存有什么特点?方法为什么要在栈中运行自己?

  • 先进后出
  • 保证一个方法调用完另一个方法后,可以回来

Java的参数传递机制

Java的参数传递机制都是:值传递

  • 所谓值传递:指的是在传输实参给方法的形参的时候,传递的是实参变量中存储的值的副本。
  • 实参:在方法内部定义的变量。
  • 形参:定义方法时 “(…)” 中所声明的参数。

 

基本类型的参数传递

public class Test {
    public static void main(String[] args) {
        int a = 10;
        chage(a);
        System.out.println("main:" + a);
    }

    private static void chage(int a) {
        System.out.println("chage1:" + a);
        a = 20;
        System.out.println("chage2:" + a);
    }
}

方法(二)_第1张图片

 

引用类型的参数传递

public class Test {
    public static void main(String[] args) {
        int[] arrs = new int[] {10,20,30};
        change(arrs);
        System.out.println("main:" + arrs[1]);
    }

    private static void change(int[] arrs) {
        System.out.println("方法内1:" + arrs[1]);
        arrs[1] = 222;
        System.out.println("方法内2:" + arrs[1]);
    }
}

方法(二)_第2张图片

 

基本类型和引用类型的参数在传递的时候有什么不同?

  • 都是值传递
  • 基本类型的参数传输存储的数据值
  • 引用类型的参数传递存储的地址值

 

案例1:打印int类型的数组内容

需求:输出一个int类型的数组内容,要求输出格式为:[ 11,22,33,44,55 ]

分析:

  1. 方法是否需要接收数据进行处理       需要接收一个int类型的数组,因此形参声明为:int[ ] arr
  2. 方法是否需要返回数据                     方法内部直接输出内容即可,无需返回,因此返回值类                                                           型声明为void
  3. 方法内部的业务                                遍历数组,并输出相应内容

public class Test {
    public static void main(String[] args) {
        int[] arr = new int[] {11,22,33,44,55};
        printArray(arr);
    }

    public static void printArray(int[] arr){

        //判断arr的内容是否为null
        if (arr == null){
            System.out.println(arr);
            return;
        }

        System.out.print("[");
        //直接遍历接收到的数组
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length-1){
                System.out.print(arr[i] + ",");
            }else {
                System.out.print(arr[i]);
            }
        }
        System.out.println("]");
    }
}

 案例2:比较两个int类型的数组是否一样,返回true或者false

需求:如果两个int类型的数组,元素个数,对应位置的元素都是一样的则认为这2个数组是一模一样的。

分析:

  1. 方法是否需要接收数据进行处理        需要接收两个int类型的数组,因此形参声明为:                                                                       int[ ] arr1,int[ ] arr2
  2. 方法是否需要返回数据                      方法判断完后需要返回:true、false,因此,返回值类                                                            型声明为boolean
  3. 方法内部的业务                                 判断两个数组内容是否一样

public class Test {
    public static void main(String[] args) {
        int[] arr1 = {10,20,30};
        int[] arr2 = {10,20,30};
        System.out.println(equals(arr1,arr2));
    }

    public static boolean equals(int[] arr1,int[] arr2){
        if (arr1 == null && arr2 == null){
            return true;
        }

        if (arr1 == null || arr2 == null){
            return false;
        }

        if (arr1.length != arr2.length) {
            return false;
        }

        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]){
                return false;
            }
        }
        return true;
    }
}

方法重载

  • 一个类中,出现多个方法的名称相同,但是它们的形参列表是不相同的,那么这些方法就称为方法重载。

方法重载的注意事项

  • 一个类中,只要一些的方法名称相同、形参列表相同,那么它们就是方法重载了,其它的都不管(如:修饰符、返回值类型是否一样都无所谓)。
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。

方法重载的应用场景

  • 开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的

方法重载案例

  • 开发武器系统,功能需求如下:
  1. 可以默认发射一枚武器
  2. 可以指定地点发射武器
  3. 可以指定地点发射多枚武器
public class Test {
    public static void main(String[] args) {
        fire();
        fire("X国");
        fire("Y国",999);
    }

    public static void fire(){
        fire("X国");
    }

    public static void fire(String country){
        fire(country,1);
    }

    public static void fire(String country,int number){
        System.out.println("发射了" + number + "枚武器给" + country);
    }
}

你可能感兴趣的:(java,开发语言)