Java中的函数语法和参数类型
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表达式作为参数。
