1 匿名对象
- 我们可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
- 示例:
- Person.java


package day07; public class Person { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
- PersonTest.java


package day07; public class PersonTest { public static void main(String[] args) { System.out.println(new Person().getName()); } }
- 使用情况:
- ①如果对一个对象只需要进行一次方法的调用,那么就可以使用匿名对象了。
- ②我们经常将匿名对象作为实参传递给一个方法调用。
2 方法重载
2.1 重载的概念
- 在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。
2.2 重载的特点
- 和返回值类型无关,只看参数列表,且参数列表必须不同(参数哥说或参数类型)。
- 调用的时候,根据方法参数列表的不同来区别。
2.3 应用的示例
- 示例:


package day07; public class OverLoad { public int add(int a, int b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; } public int add(int a, int b, int c, int d) { return a + b + c + d; } }
3 可变个数的形参
3.1 概念
- JDK5提供的新特性,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。
3.2 JDK5前后对比
- JDK5之前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a,String[] books);
- JDK5之后:采用可变个数形参来定义方法,传入多个同一类型变量
pubilc static void test(int a,String... books);
3.3 说明
- 声明格式:
方法名(参数类型... 参数名)
- 可变参数:方法参数部分指定类型的参数格式是可变多个:0个、1个或多个。
- 可变个数形参的方法和同名的方法之间,形成方法重载。
- 可变参数方法的使用和方法参数部分使用数组是一致的。
- 方法的参数部分有可变参数,需要放在形参声明的最后。
- 在一个方法的形参位置,最多只能声明一个可变个数形参。
3.4 应用的示例
- 示例:


package day07; public class OverLoad { public static int add(int x, int... args) { int sum = x; for (int i = 0; i < args.length; i++) { sum += args[i]; } return sum; } }
4 方法递归
4.1 概念
- 方法递归:一个方法体内调用它本身。
- 方法递归包含了一种隐式的循环,它会重复的执行某段代码,但这种重复执行无须循环控制。
- 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
4.2 递归的应用
- 示例:


package day07; public class Recursion { /** * 计算1-num之间的所有自然数的和 * * @param num * @return */ public static int sum(int num) { if (1 == num) { return 1; } else { return num + sum(num - 1); } } /** * 计算1-num之间的所有自然数的乘积:n! * * @param num * @return */ public static int factorial(int num) { if (1 == num) { return 1; } else { return num * factorial(num - 1); } } /** * 已知一个数列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的正整数,求f(10)的值, * * @param num * @return */ public static int f(int num) { if (0 == num) { return 1; } else if (1 == num) { return 4; } else { return 2 * f(num - 1) + f(num - 2); } } }