1.匿名对象
理解:通常在创建类的对象时,其格式为:类名 对象名 = new 类名();而匿名对象是指在创建时,没有明确的去定义一个变量名,并且创建对象和调用方法可以同时进行,格式为:new 类名().方法;但匿名对象只能调用一次。
new Person().sleep();//创建一个person类的匿名对象,去调用sleep方法
Person P = new Person();//创建类的对象p
p.sleep();//调用sleep方法
2.方法的重载
定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。(不考虑方法的权限修饰符、返回值类型、形参变量名、方法体)当调用指定方法时,需指明所调方法中的参数列表。
public void getSum(int i){
}
public void getSum(String s, int m){
}
public void getSum(int m, String s){//考虑形参顺序
}
public void getSum(double d,int j){
}
3.可变个数形参的方法(jdk 5.0新增的内容)
使用:
- 当调用可变个数形参的方法时,传入的参数个数可以是0个或多个。
- 当可变个数形参的方法与本类中其他方法的方法名相同,形参不同的方法之间时构成重载。
- 在一个方法中最多只能声明一个可变形参,且在末尾声明。
- 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组不可同时使用。
//两方法不可同时使用
public void show(String ... strs){
}
public void show(String[] strs){
}
4.值传递
- 变量
(1)基本数据类型:赋值的是变量所保存的数据值;
(2)引用数据类型;赋值的是变量所保存的数据的地址值
public class ValueTransferTest {
public static void main(String[] args) {
//基本数据类型
int m = 10;
int n = m;
System.out.println("m = " + m +", n = " + n);
//m = 10, n = 10
n = 20;
System.out.println("m = " + m +", n = " + n);
//m = 10, n = 20
//引用数据类型
Order o1 = new Order();
o1.orderId = 1001;
Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向堆空间中的同一个存储空间
System.out.println("o1.OrderId = "+ o1.orderId + ",o2.orderId = " + o2.orderId);
//o1.OrderId = 1001,o2.orderId = 1001
o2.orderId = 1002;
System.out.println("o1.OrderId = "+ o1.orderId + ",o2.orderId = " + o2.orderId);
//o1.OrderId = 1002,o2.orderId = 1002
}
}
class Order{
int orderId;
}
-
形参和实参
(1)形参:方法定义时,声明的小括号内的参数
(2)实参:方法调用时,实际传递给形参的数据值传递机制:
(1)基本数据类型:实参赋给形参的是实参真实存储的数据值
(2)引用数据类型:实参赋给形参的是实参存储数据的地址值
public class ValueTransferTest1 {
public static void main(String[] args) {
int m = 10;//实参
int n = 20;
System.out.println("m =" + m + ", n = " + n);//m =10, n = 20
ValueTransferTest1 test = new ValueTransferTest1();
test.swap(m,n);//实参
System.out.println("m =" + m + ", n = " + n);//对应swap方法中无输出,结果为:m =10, n = 20
// System.out.println("m =" + m + ", n = " + n); 对应swap方法中有输出,结果为:m =20, n = 10
}
public void swap(int m,int n){//形参
int temp = m;
m = n;
n = temp;
// System.out.println("m =" + m + ", n = " + n);
}
}
5.递归方法
定义:一个方法内调用它自身
方法递归包含了一种隐性的循环,它会重复执行某段代码,单这种重复无需循环控制
递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环
//已知有一个数列,f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n)
//其中n是大于0的整数,求f(10)的值
public int f(int n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return 4;
} else {
return 2 * f(n - 1) + f(n - 2);//将式中f(n+2)当成f(n)
}
}