方法
Java 中的方法是和C语言中的函数的功能是相同的
假设我们需要频繁的使用某个代码,就可以用方法进行封装,在需要时直接调用
方法的优点:
- 在代码比价复杂时,方法可以使代码模块化,使对每个功能进行封装
方便后期的维护 - 一个代码多次使用到时,用方法进行封装,要使用时可以直接调用
不必重复性的写代码,节省了时间,增加了代码的可阅读性
方法的定义
例如:
public static
是方法必须写的修饰符
int
是你传递数值的类型,传什么类型写什么参数
add
是方法的名称,是自定义的,在Java 中方法名都是用小驼峰
命名
后面的是方法的参数列表
,按照传参时的类型 一 一对应{ ]
大括号里的是方法体
,就是这个方法功能的实现
最后的return
可写可不写,按照情况而定
如果有返回值,那么返回值的类型必须要和返回的实体类型一样
如果没有
,那可以写成void
方法的调用
例如:
求 1 到 5 的阶乘
实参和形参的关系
在C语言中形参是实参的临时拷贝,对形参的修改是不会影响实参的
如果想要对实参进行修改,就要传实参的地址,C语言是 (&实参)
在 Java 中是不能进行 & 操作的
在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;
}
}
方法的重载
正常遇到方法功能十分的相似,但是参数不同,都是需要重新写一个方法,而且方法名必须要不一样的,这样就需要记忆更多的方法名称,而且可能记错,导致代码出现问题
这种情况就可以使用 方法重载
方法重载
的作用:
方法重载
作用是可以对 功能相似的方法,使用相同的方法名
,更易于以后的代码编写方法重载
的区分:
方法重载
的情况下,编译器会通过方法的类型参数
进行区分- 使用
方法重载
的要求:
方法名必须相同
参数列表必须不同 ,分三种(参数的个数不同、参数的类型不同、类型的次序必须不同
)
返回的类型相同不相同无关
例如:
参数数量的不同
public static void main(String[] args) {
add(10);
add(10,15);
}
public static int add(int a) {
return a + 1;
}
public static int add (int a,int b){
return a+b;
}
- 传给 add 的参数分别是 1 个 和 2 个,这是参数数量的不同
参数的类型不同
public static void main(String[] args) {
add(10,23);
add(3.5,4.7);
}
public static int add(int a,int b) {
return a + b;
}
public static double add (double a,double b){
return a+b;
}
- 传给 add 的参数分别是
整形
和浮点型
类型的次序必须不同
public static void main(String[] args) {
add(10.5,23);
add(3,4.7);
}
public static double add(double b,int a) {
return a + b;
}
public static double add (int a,double b){
return a+b;
}
- 传给 add 的第一参数是浮点型和整形,
接收时顺序不一样
方法的递归
方法递归:自己调用自己
方法的递归必须存在二个条件:
限制条件
:限制条件是当满足这个限制条件的时候,递归便不再继续
递增条件
:每次递归调用之后越来越接近这个限制条件
递归练习题
用方法的递归求 n 的阶乘
public static void main(String[] args) {
int n = 5;
int ret = fac(n);
System.out.println(ret);
}
public static int fac(int n) {
if (n == 1) {
return 1;
}
return n * fac(n - 1);
}
按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
public static void main(String[] args) {
int n = 1234;
ack(n);
}
public static void ack(int n) {
if(n > 10) {
ack(n /10);
}
System.out.println(n % 10);
}
用方法的递归求 1 到 10的和
public static void main(String[] args) {
int ret = adk(1);
System.out.println(ret);
}
public static int adk(int n) {
int sum = 0;
if(n == 10) {
return 10;
}
return n + adk(n+1);
}
活动地址:CSDN21天学习挑战赛