Skip to content

方法

方法声明

  • 语法格式

访问修饰符 返回类型 方法名(参数列表)

方法分类

  • 根据方法是否带参数,是否有返回值,可分为四类:
  1. 无参数无返回值

  2. 无参数有返回值

  3. 有参数无返回值

  4. 有参数有返回值

方法重载

同一个类中,方法名相同,参数列表不同,即为方法重载。

方法的重载的规则:

  1. 方法名必须相同

  2. 参数列表必须不同(个数不同、类型不同、类型顺序不同)。

  3. 方法的重载与返回值类型以及访问权限修饰符无关

java
public class MethodDemo {
    public void getMaxNumber(float a, float b) {
        float max = a > b ? a : b;
        System.out.println("max = " + max);
    }

    public void getMaxNumber(double a, double b) {
        double max = a > b ? a : b;
        System.out.println("max = " + max);
    }

	public void getMaxNumber(boolean a, double b) {

    }

    public void getMaxNumber( double b,boolean a) {

    }
}

上述操作是被允许的,因为方法名相同,参数列表不同。

可变参数

可变参数的语法格式为:类型... 变量名。

java
public class ArgsDemo {
    public int getSum(int... nums) {
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        return sum;
    }

    public static void main(String[] args) {
        ArgsDemo md = new ArgsDemo();
        System.out.println(md.getSum(1, 2, 3, 4, 5));
    }
}

可变参数中的方法重载(会优先调用参数类型和数量完全匹配的固定参数方法)

java
public class ArgsDemo {
    public int getSum(int... nums) {
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        return sum;
    }

    public int getSum(int a, int b) {
        return a + b;
    }
    public static void main(String[] args) {
        ArgsDemo md = new ArgsDemo();
        //此时会优先匹配到getSum(int a, int b),而不是匹配到getSum(int... nums)
        System.out.println(md.getSum(1, 2));
    }
}

面试题

值传递和引用传递的区别?

Java 官方明确指出 Java 中只有值传递

基本数据类型属于'值传递',传递的就是值的副本,值的拷贝,在方法中对参数的修改不会影响原变量

引用数据类型属于'引用传递' 传递的是地址,也就是引用,在方法中对参数的修改会影响原变量

String 类型是特殊的引用数据类型 作为参数不会影响原变量 因为 String 是不可变

java
import java.util.Arrays;

public class TestArrayInterView {
    public static void m1(int num){
        num++;
    }
    public static void m2(int [] nums){
        System.out.println("nums = " + nums);
        for (int i = 0; i < nums.length; i++) {
            nums[i]++;
        }
    }
    public static void main(String[] args) {
        int a = 10;
        m1(a);
        System.out.println("a = " + a); // 10

        int [] b = {1,2,3,4,5};
        m2(b);
        System.out.println("b = " + b);
        System.out.println(Arrays.toString(b)); // 2,3,4,5,6
    }


}

Keep Reading, Keep Writing, Keep Coding