1.9 -方法重载、Debug调试

1.9 -方法重载、Debug调试

1 方法重载

1.1 方法重载(理解)

方法重载概念
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
多个方法在同一个类中
多个方法具有相同的方法名
多个方法的参数不相同,类型不同或者数量不同

注意:

重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回
值来判定两个方法是否相互构成重载

正确范例:
package Demo02;

public class MethodDemo01 {
    public static void main(String[] args) {
        fn();
        fn(1000);
        fn(10.11);
    }
    
    public static void fn() {
        // 方法体
    }
    
    public static void fn(int a) {
        // 方法体
    }

    public static void fn(double a) {
        // 方法体
    }
}
1.2 方法重载练习(掌握)

**需求:**使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型
(byte,short,int,long)
思路:
①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数
②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数
③定义所有的重载方法,两个byte类

package Demo02;

public class MethodDemo02 {
    public static void main(String[] args) {
        // 使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型
        // (byte,short,int,long)
        //调用方法
        System.out.println(compare(10, 20));
        System.out.println(compare((byte) 10, (byte) 20));
        System.out.println(compare((short) 10, (short) 20));
        System.out.println(compare(10L, 20L));
    }

    // 方法
    public static boolean compare(int a, int b) {
        return a == b;
    }

    public static boolean compare(byte a, byte b) {
        return a == b;
    }

    public static boolean compare(short a, short b) {
        return a == b;
    }

    public static boolean compare(long a, long b) {
        return a == b;
    }
}

2 方法的参数传递

2.1 方法参数传递基本类型(理解)

测试代码:

package Demo02;

public class MethodDemo03 {
    public static void main(String[] args) {
        int number = 100;
        System.out.println("调用change方法前:" + number);	// 100
        change(number);
        System.out.println("调用change方法后:" + number);	// 100
    }
    public static void change(int number) {
        number = 200;
    }
}

**结论:
**基本数据类型的参数,形式参数的改变,不影响实际参数
结论依据:
每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RyOEachy-1593744405487)(C:\Users\Data\AppData\Roaming\Typora\typora-user-images\image-20200703095909404.png)]

2.2 方法参数传递引用类型(理解)

测试代码

package Demo02;

public class MethodDemo04 {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        System.out.println("调用change方法前:" + arr[1]);    // 20
        change(arr);
        System.out.println("调用change方法后:" + arr[1]);    // 200
    }
    public static void change(int[] arr) {
        arr[1] = 200;
    }
}

结论:
对于引用类型的参数,形式参数的改变,影响实际参数的值
结论依据:

​ 引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所

以即使方法弹栈,堆内存中的数据也已经是改变后的结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SEfPvH0q-1593744405490)(C:\Users\Data\AppData\Roaming\Typora\typora-user-images\image-20200703100210353.png)]

2.3 数组遍历(应用)

需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55]
思路:
①因为要求结果在一行上输出,所以这里需要在学习一个新的输出语句System.out.print(“内容”);
System.out.println(“内容”); 输出内容并换行
System.out.print(“内容”); 输出内容不换行
System.out.println(); 起到换行的作用
②定义一个数组,用静态初始化完成数组元素初始化
③定义一个方法,用数组遍历通用格式对数组进行遍历
④用新的输出语句修改遍历操作
⑤调用遍历方法
代码:

package Demo02;

public class MethodDemo05 {
    public static void main(String[] args) {
        // 需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55]
        int[] arr = {11, 22, 33, 44, 55};
        MethodArray(arr);
    }

    public static void MethodArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == arr[arr.length - 1]) {
                System.out.println(arr[i] + "]");
            } else {
                System.out.print(arr[i] + ", ");
            }
        }
    }
}
2.4 数组最大值(应用)

需求:设计一个方法用于获取数组中元素的最大值
思路:
①定义一个数组,用静态初始化完成数组元素初始化
②定义一个方法,用来获取数组中的最大值,最值的认知和讲解我们在数组中已经讲解过了
③调用获取最大值方法,用变量接收返回结果
④把结果输出在控制台
代码:

package Demo02;

public class MethodDemo06 {
    public static void main(String[] args) {
        // 需求:设计一个方法用于获取数组中元素的最大值
        int[] arr = {1, 11, 23, 3, -1};
        int max = getMax(arr);
        System.out.println(max);    // 23
    }

    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            max = max > arr[i] ? max : arr[i];
        }
        return max;
    }
}

3.Debug模式

3.1什么是Debug模式【理解】

是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调
试程序。

3.2Debug模式操作流程【应用】

如何加断点 :

----Debug 可以百度相关教程,较为详细。

扩展题目:

1 目标: 交换数组的0索引和最后一个索引的元素
原数组: {11, 22, 33, 44, 55}

​ 交换后: {55, 22, 33, 44, 11}

package Demo02;

public class MethodDemo07 {
    public static void main(String[] args) {
        /*
        1 目标: 交换数组的0索引和最后一个索引的元素
            原数组: {11, 22, 33, 44, 55}
          交换后: {55, 22, 33, 44, 11}
         */
        int[] arr = {11, 22, 33, 44, 55};

        int a = arr[0];
        int b = arr[arr.length -1];
        
        arr[0] = b;
        arr[arr.length - 1] = a;

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

2 目标: 完全置换数组的元素
原数组: {11, 22, 33, 44, 55}

​ 交换后: {55, 44, 33,22, 11}

package Demo02;

public class MethodDemo08 {
    public static void main(String[] args) {
        /*
            2 目标: 完全置换数组的元素
            原数组: {11, 22, 33, 44, 55}
          交换后: {55, 44, 33,22, 11}
         */
        int[] arr = {11, 22, 33, 44, 55};
        int[] arr1 = arrayDemo(arr);
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i] + " ");
        }

        System.out.println();
        int[] array = {11, 22, 33, 44, 55};
        int[] arr2 = arrayDemo(array);
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i] + " ");
        }
    }

    // 方法1 完全替换成新的
    public static int[] arrayDemo(int[] arr) {
        int[] arr1 = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arr1[arr.length-(i+1)] = arr[i];
        }
        return arr1;
    }

    // 方法2 内容调换
    public static int[] arrayDemo2(int[] arr) {
        for (int i = 0; i < arr.length/2; i++) {
            int num1 = arr[i];
            int num2 = arr[arr.length - (i+1)];
            arr[i] = num2;
            arr[arr.length - (i+1)] = num1;
        }
        return arr;
    }
}

3 特殊知识 位运算

package Demo02;

public class MethodDemo09 {
    public static void main(String[] args) {
// ^(异或)相同为false(0),不同为true(1)    true ^ true = false      false ^ true = true
        // 计算机中都是操作二进制
        // 数字可以按位异或,将整数转成二进制
        int a = 97; // 110 0001
        int b = 5;  // 000 0101
        //          ---------------
        //      100    110 0100
        //       5  ^  000 0101
        //         ---------------
        //       97 ^  110 0001
        //      一个数异或另一个数两次会等于这个数本身(加密)

        int c = a ^ b;
        int d = a ^ b ^ b;
        System.out.println(c);
        System.out.println(d);


        int x = 4;  // 100
        // >> (右移)让这个数字除以2
        System.out.println(x >> 1); // 2
        /*
         ******      右移一位******
         * 100*              *  10*
         ******              ******
         */

        // << (左移)让这个数字乘以2
        System.out.println(x << 1);
        /*
         ******      左移一位******
         * 100*              *1000*
         ******              ******
         */
    }
}
em.out.println(x >> 1); // 2
        /*
         ******      右移一位******
         * 100*              *  10*
         ******              ******
         */

        // << (左移)让这个数字乘以2
        System.out.println(x << 1);
        /*
         ******      左移一位******
         * 100*              *1000*
         ******              ******
         */
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值