Java面向对象(二)——匿名对象、方法重载...

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)
  }
}
发布了49 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ashleyjun/article/details/98206608