Java中的“函数”
1.前言
首先在java里面的“函数”叫做“方法”。其次java的方法与C语言里的函数大部分都是相似的,但是还是有区别,本篇文章就会提及两者的相同与不同,希望大家可以比较学习。
2.方法的定义和使用
2.1 方法的定义
方法的语法格式:
// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
【注意事项】
1.修饰符:现阶段直接使用public static 固定搭配(这个算是一个新的内容暂时先记住就行,以后我们同样会学习)
2.返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void
3.方法名字:采用小驼峰(也就是小写字母,但大写的也可以)命名
4.参数列表:如果方法没有参数()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
5.方法体:方法内部要执行的语句
6.在java当中,方法必须写在类当中
7.在java当中,方法不能嵌套定义
8.在java当中,没有方法声明(也就是函数声明)一说,因为在Java中,方法的声明和定义被合并在一起,以减少代码的复杂性和冗余。这样的设计使得Java代码更加易于阅读和理解,并且减少了错误和bug的发生。
2.2 方法的使用
java方法的使用与C语言的函数还是一样的,给方法传参按照自己的要求去调用就可以了,下面给出一个方法使用的例子:
public class AddTwoNumbers {
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int num1 = 5;
int num2 = 10;
int sum = add(num1, num2);
System.out.println("The sum of " + num1 + " and " + num2 + " is: " + sum);
}
}
3.方法的传参
3.1 传值or传址?
对于java方法的传参同样要注意的是是/“传值调用”/还是/“传址调用”
但是在java中并没有我们传址调用所需要的指针,它的传递规则是若是基本类型则是进行传值调用
若是引用类型就是传址调用,对于传值调用以及传址调用二者之间的区别我就不再赘述了(C语言都有讲解)
3.2 方法的使用举例(交换两数的值)
在C语言中我们要交换两个数的值必须传入二者的地址然后进行交换,但是在java中我们没有指针那么又该怎么解决呢?我们可以传引用类型的参数(例如数组),见代码如下:
public class TestMethod {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
}
// 运行结果
arr[0] = 20 arr[1] = 10
4.重点:方法重载
4.1 方法重载的定义
方法重载就是方法的方法名相同,但是方法的返回值类型以及参数类型不一致
4.2 方法重载的目的
方法重载其实就是解决了对方法功能相同但是参数不同的问题。比如我要执行一个加法的功能,但是如果在C语言中用函数实现整型的加法以及浮点型的加法,因为二者的参数列表不同,就要定义两个函数,并且这两个函数的名字还不相同,导致以后我们想实现执行,函数的时候还得先判断数据的类型,再写出对应的函数名,就会很麻烦
但如果有了方法的重载那么我就不需要改变方法的名字,只需要根据自己的需求改变一下返回值以及参数列表就行,我们在正式使用的时候自己传入参数,编译器就会自动根据你传入的数据类型判断调用的是哪一个方法。
4.3 方法能够重载的原因(方法签名)
方法重载的原理是Java编译器会根据方法的参数类型和数量生成不同的方法签名,这样就可以在同一个类中定义多个方法名相同但参数不同的方法。在调用方法时,编译器会根据实参的类型和数量,选择与之匹配的方法进行调用。
方法签名就是经过编译后方法真正的名字。
4.4 方法签名的使用举例
public class TestMethod {
public static int add(int x, int y){
return x + y;
}
public static double add(double x, double y){
return x + y;
}
public static void main(String[] args) {
add(1,2);
add(1.5, 2.5);
}
}
注意:
- 方法名必须相同
- 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
- 与返回值类型是否相同无关
5.递归
java中的递归与C语言中的递归并没有什么区别,底层逻辑都是一样的,就是我们所要解决的问题可以拆分为更小的类似的子问题;
下面我浅谈一下现在我对递归的理解,我认为现在递归有两种类型:
①可以写出递推公式的,比如求阶乘或者是斐波那契数列,这两个都可以写出递推公式。
②还有一类就是不能够用数学的递推公式直接体现的,比如逐位打印一个数,这个问题也是可以拆分成更小的问题,就是这类函数并没有返回值
一入递归深似海,我这只是最浅显的一点理解,仅仅是表示我现在的一点思考,希望能够给你一点启发。
6.总结
今天学习了java的方法也就是C语言的函数,二者最大的区别莫过于方法重载,希望大家都能掌握好这个新的概念。