Java函数

2

Java函数

  函数是面向过程的程序设计精髓,也是所有语言中最重要的一个内容,学好函数,可以设计出优雅的程序,下面给小伙伴们介绍Java函数的定义,调用,参数传递,声明,默认参数,占位参数和函数的重载。

函数定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//函数小伙伴们其实并不陌生,在第一行Java代码中就用到了函数的知识,main函数,main函数是程序运行的起始位置,程序必须要有main函数才可以运行
//和C++不同的是,C++不是一个完全面向对象的语言,而Java是完全面向对象的语言,因此函数的定义包括权限修饰符,返回值类型,函数名,参数列表和函数体,C++中普通函数没有权限修饰符这个概念。关于函数的权限修饰符会在面向对象中进行详细介绍。
//这里单独强调返回值,返回值代表函数运行结束后返回到调用处时产生的数据,如果没有返回值,类型要写void,可以不写return,如果有返回值,一定要写return
//C++中可以对函数进行声明,Java中不能对函数进行声明,写在上面的函数也可以直接调用写在下面的函数。
//函数的参数列表要写清楚参数的类型,而且不能在一个函数内部定义另一个函数,这和Python有很大的区别。
public class Function {
public static void main(String[] args) {
int a = 5;
int b = 3;

//函数的调用使用函数名(参数),如果有返回值可以用变量接收
int c = add(a, b);
int d = add(c, b);

System.out.println("c = a + b = " + c);
System.out.println("d = c + b = " + d);
}

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

1

函数重载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//占位参数意义不大,使用频率也不高,但是默认参数却经常使用。但是Java中没有默认参数和占位参数的概念,因此无法定义默认参数。
//函数重载是指,一个函数名有不同的功能实现,当传入的参数个数不同,类型不同或者顺序不同时,函数可以发生重载,调用时,根据和哪一个函数更匹配则调用相应的函数。
//特别注意,参数名和返回值不同不能成为函数重载的发生条件,编译器会报错。
public class Function {
public static void main(String[] args) {
double c = calcArea(3, 3.14);
System.out.println("圆c的面积为 " + c);

double e = calcArea(3.0, 3.14);
System.out.println("圆e的面积为 " + e);

double f = calcArea(3.14, 3);
System.out.println("圆f的面积为 " + f);
}

public static double calcArea(int r, double pi) {
System.out.println("调用了int + double类型的函数");
return r * r * pi;
}

public static double calcArea(double r, double pi) {
System.out.println("调用了double + double类型的函数");
return r * r * pi;
}

public static double calcArea(double pi, int r) {
System.out.println("调用了double + int类型的函数");
return r * r * pi;
}
}

4

参数传递

1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//Java语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数就是该对象的一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但原对象是永远不会改变的
//如果传递了两个值并进行交换,a'和b'是a和b值的拷贝,a'和b'进行了改变,原始数据a和b并没有改变。如果传递了一个数组a,则会创建一个副本a'指向a,(对a地址的拷贝),对a'指向的内容进行两个值的交换(对象的内容进行了改变),因为a和a'指向同一个内容,因此a中的内容也发生了改变,但是原对象a本身并没有发生改变。
//这里注意a的内容发生改变和a本身发生改变是两回事。如一个人吃了饭,肚子里的东西改变了,但是这个人并没有变换。
public class Function {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println("交换前 a = " + a + " b = " + b);
swap(a, b);
System.out.println("交换后 a = " + a + " b = " + b);

int[] c = {1, 2};
System.out.println("交换前 c[0] = " + c[0] + " c[1] = " + c[1]);
swap(c);
System.out.println("交换后 c[0] = " + c[0] + " c[1] = " + c[1]);
}

public static void swap(int a, int b) {
int tmp = a;
a = b;
b = tmp;
System.out.println("交换时 a = " + a + " b = " + b);
}

public static void swap(int[] c) {
int tmp = c[0];
c[0] = c[1];
c[1] = tmp;
System.out.println("交换时 c[0] = " + c[0] + " c[1] = " + c[1]);
}
}

1

Java小结

  函数是我们面向过程编程的重要思想,同时也是面向对象中封装特性的体现,有了函数我们可以节约大量的时间和空间管理我们的代码,提高了代码的复用率,但是我们要注意编程习惯,尽量一个函数实现一个功能,不要将多个功能写在同一个函数之中。

-------------本文结束感谢您的阅读-------------
0%