欢迎访问宙启技术站
智能推送

Java中的函数语法和参数类型

发布时间:2023-06-07 17:25:49

Java是一种面向对象的编程语言,它使用函数来处理事务和实现逻辑。函数在Java中称为方法,而方法是面向对象编程的核心概念之一。Java中的方法有很多种语法和参数类型,每种语法和参数类型的应用场景都不同,本文将对Java函数语法和参数类型进行详细的介绍。

Java函数语法

在Java中,方法可以定义在类中或者接口中,也可以被其他类或者接口调用。Java的方法语法如下:

修饰符 返回类型 方法名(参数列表){
    方法体
}

其中,修饰符、返回类型和参数列表是方法定义的必要元素。

修饰符:Java中的修饰符用于控制类、方法和变量的访问,有四种修饰符:

- public:公共修饰符,可以在任何位置被访问

- protected:受保护的修饰符,可以被子类访问

- private:私有修饰符,只能在声明它的类内部被使用

- 默认的:没有修饰符的方法是默认的,可以被同一个包中的类访问

返回类型:方法可以有一个返回类型,返回类型指的是方法返回值的数据类型,如果方法不返回任何值,则返回类型是void。常用的返回类型有int、double、float、boolean等。

方法名:方法名是指方法的名称,必须符合Java的标识符规则,不能包含空格、特殊字符等。

参数列表:参数列表是指方法的输入参数,可以有多个参数,参数之间用逗号隔开,每个参数由参数类型和参数名组成。

方法体:方法体是指实现具体功能的代码块。

Java参数类型

Java中的参数类型有五种,分别是值传递、数组参数、引用传递、可变参数和lambda表达式参数。

1. 值传递

值传递指的是将参数的值复制给方法内部的变量,方法中对参数的操作不会影响实际参数的值。例如:

public static int add(int a, int b){
    a++;
    b++;
    return a+b;
}

public static void main(String[] args){
    int a = 10, b = 20;
    int c = add(a, b);
    System.out.println(c); //输出31
    System.out.println(a); //输出10
    System.out.println(b); //输出20
}

在add方法中,参数a、b的值分别被复制给a1、b1,a1、b1的值在方法中改变,但是实际参数a、b的值未改变。

2. 数组参数

数组参数指的是将数组作为方法的输入参数,数组作为引用类型,方法中对数组的操作会影响实际数组的值。例如:

public static int sum(int[] arr){
    int res = 0;
    for(int i = 0; i < arr.length; i++){
        res += arr[i];
    }
    return res;
}

public static void main(String[] args){
    int[] arr = {1,2,3,4,5};
    int res = sum(arr);
    System.out.println(res); //输出15
    System.out.println(arr[0]); //输出1
    System.out.println(arr[1]); //输出2
}

在sum方法中,参数arr是一个数组类型,sum方法对数组的操作结果影响实际数组的值。

3. 引用传递

引用传递指的是将对象或者对象的引用作为方法的输入参数。Java中的对象都是引用类型,它们的引用作为参数传递给方法时,实际上是传递了引用的副本。方法中对对象的属性进行操作会影响实际对象的属性值。例如:

public class Student{
    public String name;
    public int age;
    public Student(String name, int age){
        this.name = name;
        this.age = age;
    }
}

public static void change(Student s){
    s.name = "小明";
    s.age = 18;
    System.out.println(s.name + " " + s.age);
}

public static void main(String[] args){
    Student stu = new Student("张三", 20);
    System.out.println(stu.name + " " + stu.age); //输出张三 20
    change(stu);
    System.out.println(stu.name + " " + stu.age); //输出小明 18
}

在change方法中,参数s是Student类型,s保存了一个Student对象的引用。change方法操作s对象的属性值,实际对象的属性值也被改变。

4. 可变参数

可变参数是指方法的参数列表可以接受不定数量的参数,参数之间用逗号隔开。可变参数只能在参数列表的最后一个参数使用,实现可变参数需要使用省略号(...)。例如:

public static int add(int... nums){
    int res = 0;
    for(int i = 0; i < nums.length; i++){
        res += nums[i];
    }
    return res;
}

public static void main(String[] args){
    int a = add(1,2,3,4,5);
    int b = add(1,2,3);
    System.out.println(a); //输出15
    System.out.println(b); //输出6
}

在add方法中,省略号表示可以接受任意数量的参数,将参数封装成数组,可以对数组进行遍历求和。

5. Lambda表达式参数

Lambda表达式参数是Java 8中新添加的特性,它可以将Lambda表达式作为方法的参数,使Java的代码更加简洁明了。Lambda表达式参数是一个函数式接口的实例,在方法体中用Lambda表达式来代替回调函数。例如:

interface MessagePrinter{
    void printMessage(String message);
}

public static void showMessage(MessagePrinter printer){
    printer.printMessage("Hello Lambda!");
}

public static void main(String[] args){
    showMessage(message -> System.out.println(message));
}

在showMessage方法中,参数printer是一个函数式接口MessagePrinter的实例。通过Lambda表达式来实现printMessage方法,省略了写回调函数的麻烦。在main方法中,使用showMessage方法传递Lambda表达式作为参数。