面向对象(上)之二

本文围绕Java编程展开,介绍了匿名对象,即不定义句柄直接调用方法的对象;阐述了方法重载,指同一类中同名但参数列表不同的方法;讲解了JDK5新特性可变个数形参,以及方法递归,即方法体内调用自身,还给出了各特性的应用示例。

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;
    }
}
View Code
  • PersonTest.java
package day07;

public class PersonTest {
    public static void main(String[] args) {
        System.out.println(new Person().getName());
    }
}
View Code
  • 使用情况:
  • ①如果对一个对象只需要进行一次方法的调用,那么就可以使用匿名对象了。
  • ②我们经常将匿名对象作为实参传递给一个方法调用。

 

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;
    }
}
View Code

 

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;
    }

}
View Code

 

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);
        }
    }


}
View Code

 

转载于:https://www.cnblogs.com/xuweiweiwoaini/p/10817534.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值