可变个数形参的方法
jdk5.0新特性
在调用方法时,可能会出现方法形参的类型是确定的,但是个数不确定,就可以使用可变形参个数的方法
格式;
(参数类型 ... 参数名)
说明:
可变形参个数的方法在调用时,形参赋的实参的个数可以为0、1、多个
可变形参个数的方法与同一个类中,同名的多个方法之间可以构成重载
特例:可变形参个数的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数不构成重载
可变个数形参必须声明在形参列表最后
可变个数形参在一个方法的形参列表中最多出现一次
方法的值传递机制
1.方法内声明的局部变量,赋值操作:
基本数据类型,则将此变量保存的数据值传递出去。
引用数据类型,则将此变量保存的地址值传递出去。
2.方法的参数传递机制:值传递机制
2.1实参给形参赋值的过程:
如果形参是基本数据类型,则将实参保存的数据值赋给形参。
如果形参是引用数据类型,则将实参保存的地址值赋给形参。
3.Java的参数传递机制是什么?
值传递。(不是引用传递)
方法重载
1.定义:
在同一个类中,允许寻在一个以上的同名方法,只要他们的参数列表不同即可。
满足这样特征的多个方法,彼此之间构成方法的重载。
2.总结为:两同一不同
两同:同一个类、相同的方法名
一不同:参数列表不同。参数个数不同、参数类型不同
注意:方法的重载与形参的名、劝你西安修饰符、返回值类型都没有关系
3.举例
Arrays中的sort(xxx[] arr)
4.如何判断两个方法相同?
方法名相同,形参列表相同(参数个数和类型都相同)。
在一个类中,允许存在多个相同名字的方法,只要他们的形参列表不同即可
编译器如何知道调用某一个具体的方法?
先通过方法名确定一堆重载的方法,再通过不同的形参列表,确定某一个具体的方法
5.在同一个类中,不允许定义两个相同的方法。
递归方法
何为递归方法?
方法自己调用自己的现象就称为递归
分类:
直接递归、间接递归
使用说明:
递归方法包含了一种“隐式循环”
递归方法会“重复执行”某段代码,但这种重复执行无需循环控制
递归一定要向“已知方向”递归,否则就会变成无穷递归,停不下来,类似于死循环。最终发生“栈内存溢出”
递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多的时候速度比循环慢得多,所以在使用递归时要谨慎
再要求高性能的情况下尽量避免使用递归,调用递归既花时间又耗内存,考虑使用迭代循环
public class RecurionTest {
public static void main(String[] args) {
RecurionTest test = new RecurionTest();
//test.method1();
test.getSum(100);
System.out.println(test.getSum(100));
System.out.println(test.getSum1(100));
System.out.println(test.getMul(5));
System.out.println(test.f(10));
}
/**
* 举例3:快速排序
*/
/**
* 举例4:汉诺塔游戏
*/
/**
* 斐波那契数列
* 1 1 2 3 5 8 13 21 34 55 .。。
* f(n) = f(n - 1) + f(n -2)
*/
public int f(int n){
if (n == 1){
return 1;
} else if (n == 2) {
return 1;
}else {
return f(n - 1) + f(n -2);
}
}
/**
* 举例6:
* File类的对象表示一个文件目录。
* 计算指定文件目录的大小,遍历指定文件目录中的所有文件,删除指定的文件目录
*/
/**
* 举例2:n!
*/
public int getMul(int n){
if (n == 1){
return 1;
}else {
return n*getMul(n - 1);
}
}
/**
* 举例1:计算1-100内自然数的总和
*/
public int getSum(int num){
int sum = 0;
for (int i = 1; i <= num; i++) {
sum += i;
}
return sum;
}
public int getSum1(int num){
if (num == 1){
return 1;
}else {
return getSum1(num - 1) + num;
}
}
/**
* 如下递归方法的使用会导致StackOverflowError
*/
// public void method1(){
// System.out.println("method1");
// method1();
// }
}