可变参数、重载、方法参数传递、递归
可变参数(即多个参数)
格式:
修饰符 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型... 形参名){ }
要求:
(1)一个方法只能有一个可变参数
(2)可变参数必须是形参列表的最后一个
(3)其实这个书写“等价于”
修饰符 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型[] 形参名){
}
代码演示:
public class ChangeArgs {
public static void main(String[] args) {
// 创建对象
Count c = new Count();
int[] arr = {
1, 4, 62, 431, 2 };
int sum1 = c.getSum1(arr);
System.out.println(sum1);
int sum2 = c.getSum2(arr);
System.out.println(sum2);
int sum3 = c.getSum2(1, 4, 62, 431, 2);
System.out.println(sum3);
}
}
class Count {
// 完成数组 所有元素的求和
// 原始写法
public int getSum1(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
// 可变参数写法
public int getSum2(int... arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
}
方法重载
- 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
- 参数列表:数据类型个数不同,数据类型不同,数据类型顺序不同。
- 重载方法调用:JVM通过方法的参数列表,调用不同的方法。
方法的参数传递机制
- 形参:在定义方法时方法名后面括号中的变量名称称为形式参数(简称形参),即形参出现在方法定义中。
- 实参:调用者方法中调用另一个方法时,方法名后面括号中的参数称为实际参数(简称实参),即实参出现在调用者方法中。
- 方法的参数传递机制:实参给形参赋值
- 方法的形参是基本数据类型时,形参值的改变不会影响实参;
- 方法的形参是引用数据类型时,形参地址值的改变不会影响实参,但是形参地址值里面的数据的改变会影响实参,例如,修改数组元素的值,或修改对象的属性值。
- 注意:String、Integer等特殊类型除外
递归方法
- 递归:指在当前方法内调用自己的这种现象。
- 递归的分类:
- 递归分为两种,直接递归和间接递归。
- 直接递归称为方法自身调用自己。
- 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
- 注意事项:
- 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
- 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
语法案例演示一:计算1-100之间所有自然数的和
public class RecursionMethod1{
public static void main(String[] args) {
Count c = new Count();
int sum = c.sum(100);
System.out.println("1-100的和:" + sum);
}
}
class Count{
public int sum(int n){
if(n == 1){
return 1;
}else{
return n + sum(n-1);
}
}
}
对象数组
数组是用来存储一组数据的容器,一组基本数据类型的数据可以用数组装,那么一组对象也可以使用数组来装。
即数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用数据类型是,我们称为对象数组。
代码演示:
class MyDate{
int year;
int month;
int day;
}
class Test{
public static void main(String[] args){
MyDate[] arr = new MyDate[3];//创建数组对象本身,指定数组的长度
for(int i=0; i<arr.length; i++){
arr[i] = new MyDate();//每一个元素要创建对象
arr[i].year = 1990 + i;
arr[i].month = 1 + i;
arr[i].day = 1 + i;
}
}
}