5.方法

方法概述

1.什么是方法

方法(method) 是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集.

注意:

  • 方法先创建在使用,成为定义
  • 方法创建后,需要调用才能使用

2.方法的定义和调用

定义方法的格式;

public static void 方法名() {
// 方法体
}

示例

public class DefineDemo {
    public static void main(String[] args) {
    }

    public static void isEvenNumber() {
        // 定义便令
        int number = 10;
        // 判断是否为偶数
        if (number % 2 == 0) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }
    }
}

方法的调用格式:

格式:方法名;

示例:isEvenNumber();

方法定义调用示例

package function;

public class FunctionDemo {
    public static void main(String[] args) {
        // 调用方法
        isEvenNumber();
    }

    public static void isEvenNumber() {
        // 定义变量
        int number = 10;
        // 判断是否为偶数
        if (number % 2 == 0) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }
    }
}

调用过程

image-20200703214401960

案例:获取两个数字中的较大者

package function;

public class getMax {

    public static void main(String[] args) {
        getmax();
    }

    // 定义一个方法,输出两个数字较大的数
    public static void getmax() {
        // 定义两个变量a,b
        int a = 10;
        int b = 20;
        // 使用分支判断比较两个数字的大小
        if (a > b) {
            System.out.println(a);
        } else {
            System.out.println(b);
        }
    }
}

3.带参数方法的定义和调用

带参数的定义

格式

public static void 方法名(参数){...}

单个参数示例

public static void 方法名 (数据类型 变量名) {...}
public static void isEvenNumber (int number) {...}

多个参数示例

public static void 方法名 (数据类型 变量名1, 数据类型 变量名2, ...) {...}
public static void getMax (int number1, int number2) {...}

注意:

  • 定义时,数据类型和变量名度不能缺少
  • 多个参函数之间用逗号隔开

带参数方法的调用

格式

方法名(参数);

格式(单个参数)

方法名(变量名/常量值);
isEvenNumber(5);

格式(多个参数)

方法名(变量名1/常量值1, 变量名2/常量名2);
getMax(5, 6);

注意:

  • 方法调用,参数的数量和类型必须与方法定义中设置相匹配,否则报错

示例

package function;

/*
    带参数方法的定义和调用
    定义格式:
        public static void 方法名(参数) {...}
    调用格式:
        方法名(参数)
 */

public class MethodDemo {
    public static void main(String[] args) {
        // 常量值的调用
        isEvenNumber(10);
        // 变量的调用
        int number = 10;
        isEvenNumber(number);
    }

    // 需求: 定义一个方法,接受一个参数,判断是否是偶数
    public static void isEvenNumber(int number) {
        if (number%2 == 0) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }
    }
}

形参和实参

形参: 方法中定义的参数, 等同于变量定义格式, 例如: int number

实参: 方法中调用的参数, 等同于使用变量和常量, 例如10

带参数方法示例

package function;

/*
    带参数方法的定义和调用
    定义格式:
        public static void 方法名(参数) {...}
    调用格式:
        方法名(参数)
 */

public class getMax1 {
    public static void main(String[] args) {
        // 常量值的调用
        getMax(10, 20);
        // getMax(10.0, 20.0);  // 类型不符会报错
        // 变量的调用
        int a = 10;
        int b = 20;
        getMax(a, b);
    }

    // 需求: 定义一个方法,打印两个数字中的较大者
    public static void getMax(int a, int b) {
        // 比较两个数字大小
        if (a > b) {
            System.out.println(a);
        } else {
            System.out.println(b);
        }
    }
}

4.带返回值方法的定义

带返回值方法的定义

格式

public static 数据类型 方法名(数据类型 参数) {
	return 数据;
}

范例1

public static boolean 方法名(数据类型 参数) {
	return true;
}

范例2

public static int getMax(int a, int b) {
	return 100;
}

带返回值方法的调用

格式1

方法名(参数);
isEvenNumber(5);

格式2(推荐)

数据类型 变量名 = 方法名(参数);
boolean flag = isEvenNumber(5);

示例

package function;
/*
    带返回值方法定义和调用
 */

public class MethodReturnDemo {
    public static void main(String[] args) {
        // 1.方法名(参数)
        isEvenNumber(10);

        // 2.数据类型 变量名 = 方法名(参数)
        boolean flag = isEvenNumber(10);
        System.out.println(flag);
    }
    // 需求: 定义一个方法,接受参数,判断是否为偶数,返回真假
    public static boolean isEvenNumber(int number) {
        if (number%2 == 0) {
            return true;
        } else {
            return false;
        }
    }
}

5.方法注意事项

注意事项

  1. 方法不能嵌套定义
  2. void表示无返回值,可以省略return, 也可以单独写return, 后面不加数据
package function;
/*
    注意事项:
        1. 方法不能嵌套定义
        2. void表示无返回值,可以省略return, 也可以单独写return, 后面不加数据
 */
public class MethodNotice {
    public static void main(String[] args) {

    }

    public static void methodOne() {

    }

    public static void methodTwo() {
        // return 100;  // void没有返回值,会报错
        return;
    }
}

方法通用格式

格式:

public static 返回数据类型 方法名(参数) {
	方法体;
	return 数据;
}
  • public static: 修饰符

  • 返回值类型: 方法操作后返回的数据类型

  • 方法名: 调用方法是使用的标识

  • 参数: 有数据类型和变量名组成,多个参数之间用逗号隔开

  • 方法体: 完整功能的代码块

  • return: 操作完毕,有数据返回,return返回值

定义方法,明确两点:

  • 明确返回值类型:明确方法是否有返回值, 没有,写void;有,写返回数据类型
  • 明确参数数据类型: 明确参数的类型和数量

调用方法时,明确两点:

  • void类型方法, 直接调用
  • 非void类型方法, 推荐使用变量接受调用

6.方法重载

方法重载, 指同一个类中定义了多个方法之间的关系, 满足下列条件的多个方法构成方法重载.

  • 多个方法在同一个类中
  • 多个方法具有相同的方法名
  • 多个方法的参数不同,类型不同或数量不同

特点:

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

image-20200925164142678

package function;

/*
    方法重载:
        与返回值无关
        在调用时,java虚拟机通过参数不同来区分方法
 */

public class MethodReload {
    public static void main(String[] args) {

        // 调用方法
        int result = sum(10, 20);
        System.out.println(result);

        double result2 = sum(10.0, 20.0);
        System.out.println(result2);

        int result3 = sum(10, 20, 30);
        System.out.println(result3);
    }

    // 需求1: 两个int类型数据和的方法
    public static int sum(int a, int b) {
        return a + b;
    }

    // 需求2: 两个double类型数据和的方法
    public static double sum(double a, double b) {
        return a + b;
    }

    // 需求3: 三个int类型数据和的方法
    public static int sum(int a, int b, int c) {
        return a + b + c;
    }
}

练习

需求: 按方法重载思路,设计比较两个数是否相等,兼容全整数类型(byte,short,int,long)

package function;

/*
    需求: 按方法重载思路,设计比较两个数是否相等,兼容全整数类型(byte,short,int,long)
    思路:
        1.定义compare方法,比较int类型
        2.参数变更为long类型,比较
        3.参数变更为shot类型,比较
 */

public class MethodReloadPractice {
    public static void main(String[] args) {
        // 调用方法
        System.out.println(compare(10, 20));
        System.out.println(compare((byte) 10, (byte) 20.0));
        System.out.println(compare((short) 10, (short) 20));
        System.out.println(compare(10L, 20L));
    }

    // 需求1: 两个int
    public static boolean compare(int a, int b) {
        System.out.println("int");
        return a == b;
    }

    // 需求2: 两个byte
    public static boolean compare(byte a, byte b) {
        System.out.println("byte");
        return a == b;
    }

    // 需求3: 两个short
    public static boolean compare(short a, short b) {
        System.out.println("short");
        return a == b;
    }

    // 需求4: 两个long
    public static boolean compare(long a, long b) {
        System.out.println("long");
        return a == b;
    }
}

7.方法的参数传递

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

对于基本类型的参数,形式参数的传递, 不影响实际参数的值

package function;

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

    public static void change(int number) {
        number = 200;
    }
}

// 调用change方法前:100
// 调用change方法后:100

image-20200927141509862

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

对于引用类型的参数,形式参数的传递, 影响实际参数的值

package function;

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

    public static void change(int[] arr) {
        arr[1] = 200;
    }
}

// 调用change方法前:20
// 调用change方法后:200

image-20200927141407966

8.参数传递案例

  • system.out.println("内容"); 输出内容并且换行
  • system.out.print("内容"); 输出内容不换行

需求: 遍历一个数组,要求遍历的结果是在一行上的.例如[11, 22, 33, 44, 55]

package function;

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

    // 定义一个方法,用于遍历数组
    /*
    两个明确:
    - 明确返回值类型:void
    - 明确参数: int[] arr
     */
    public static void printArr(int[] arr) {
        System.out.print("[");
        for(int x=0; x<arr.length; x++) {
            if (x == arr.length - 1) {
                System.out.print(arr[x]);
            } else {
                System.out.print(arr[x] + ", ");
            }
        }
        System.out.println("]");
    }

}

debugg概述

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

操作流程

Debug调试,称为断点调试, 断点是一个标记

  • 如何加断点

选择要设置断点的代码行,在行号的区域后单击鼠标左键.

image-20200927143415108

  • 如何运行加断点的程序

代码区右键debug执行

image-20200927143449418

  • 看哪里

看Debugger窗口

image-20200927143543039

看console窗口

image-20200927143624995

  • 点哪里

点Step(F7),或者按F7可以下一步

image-20200927143742398

  • 如何删除断点

选择删除的断点,可以删除

debug示例

package debug;

public class DebugTest {
    public static void main(String[] args) {
        // 定义求和变量
        int sum = 0;  // debug断点
        // 循环求偶数和
        for(int i=1;i<=10; i++) {
            if(i%2 == 0){
                sum += i;
            }
        }

        // 输出结果
        System.out.println("1-10之间的偶数之和是: " + sum);

    }
}

数组反转实例

需求: 已知一个数组, arr = {19, 28, 37, 46, 50}; 用程序实现把数组元素进行交换.

package exercise;

public class ArrayReverse {
    public static void main(String[] args) {
        // 定义一个数组
        int[] arr = {18, 28, 37, 46, 50};

        // 遍历数组,初始化定义两个索引变量, 开始索引小于结束索引,进行数值交换
        for(int start=0,end=arr.length-1; start<=end; start++,end--) {
            // 交换变量
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }

        // 打印数组
        printArray(arr);
    }

    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int x=0; x<arr.length; x++) {
            if(x == arr.length-1) {
                System.out.print(arr[x]);
            } else {
                System.out.print(arr[x] + ", ");
            }
        }
        System.out.println("]");
    }
}

原文地址:https://www.cnblogs.com/ryxiong-blog/p/13890172.html