构造方法

构造方法的概念

构造方法名与类名完全相同 ,并且没有返回值类型,连void都不许有

class 类名{
    类名(形参列表){
        构造方法体;
    }
}

默认构造方法

  • 当一个类中没有定义任何构造方法时, 编译器会自动添加一个无参空构造方法, 叫做默认构造方法,如: Person(){}
  • 若类中出现了构造方法, 则编译器不再提供任何形式的构造方法

构造方法的作用

  • 使用new关键字创建对象时会自动调用构造方法实现成员变量初始化工作

案例题目

编程实现Point类的定义并向Point类添加构造方法
Point()默认创建原点对象
Point(int i, int j)根据参数创建点对象
public class Point{

    // 无参构造方法
    Point(){
        System.out.println("成功创建原点对象");
    }
    
    // 有参构造方法
    Point(int j, int j){
        System.out.println("该对象坐标为: (" + i + "," + j + ")");
    }
    
    public static void main(String[] args){
    
        //使用无参构造方法创建Point类对象
        Point p1 = new Point();
        //使用有参构造方法创建Point类对象
        Point p2 = new Point(7,4);
    }
}

/*
* 程序运行的输入结果是:
* 成功创建原点对象
* 该对象坐标为:(7,4)
*/

方法重载

方法重载的概念

  • 若方法名称相同, 参数列表不同, 这样的方法之间构造<u>重载关系(Overload)</u>

重载的体现形式

  • 方法重载的主要形式体现在: 参数的个数不同, 参数的类型不同, 参数的顺序不同. 与返回值类型和形参变量名无关. 但建议<u>返回值类型最好相同</u>
  • 判断方法能否构造成重载的核心: 调用方法时能否加以区分

练习题目

编程实现为Point类添加重载的成员方法
up() - 实现纵坐标减1的功能
up(int dy) - 实现纵坐标减去参数指定数值的功能
测试重载方法的调用规则
public  class PointTwo {

    // 自定义成员变量
    int x;
    int y;

    // 自定义构造无参方法
    PointTwo() {

    }

    // 自定义构造方法, 根据参数创建对象
    PointTwo(int i, int j) {
        x = i;
        y = j;
    }

    // 自定义成员方法up(), 用于实现纵坐标减1的功能
    void up() {
        y -= 1;
    }
    // 自定义成员方法up(int y), 用于实现纵坐标减去参数指定数值的功能
    void up(int i) {
        y -= i;
    }

    public static void main(String[] args) {
        // 创建对象, 类的实例化
        PointTwo pt = new PointTwo();
        System.out.println("(x, y) = " + "(" + pt.x + ", " + pt.y + ")");   // 0,0

        System.out.println("----------------------------------------------");
        PointTwo pt2 = new PointTwo(3,3);
        System.out.println("(x, y) = " + "(" + pt2.x + ", " + pt2.y + ")"); // 3,3 

        System.out.println("----------------------------------------------");
        pt2.up();
        System.out.println("(x, y) = " + "(" + pt2.x + ", " + pt2.y + ")"); // 3,2

        System.out.println("----------------------------------------------");
        pt2.up(-7);
        System.out.println("(x, y) = " + "(" + pt2.x + ", " + pt2.y + ")"); // 3,9
    }
}

重载的实际意义

  • 方法重载的实际意义在于: 调用者只需要记住一个方法名就可以调用各种不同的版本, 来实现各种不同的功能
  • java.io.PrintStream类中的println方法

this关键字

this的基本概念

  • 若在构造方法中出现了this关键字, 则代表当前正在构造的对象
  • 若在成员方法中出现了this关键字, 则代表当前正在调用的对象(即, 是谁调用这个成员方法, 这里的this就代表谁)
  • this关键字本质上就是当前类类型的引用变量

工作原理

  • 在构造方法中和成员方法中访问成员变量时, 编译器会加上this.的前缀.而this.相当于汉语中“我的”
  • 当不同的对象调用同一个方法时, 由于调用方法的对象不同导致this关键字不同, 从而this.方式访问的结果也就随之不同

使用方式

  • 当局部变量名与成员变量名相同时, 在方法体中会优先使用局部变量(就近原则). 若希望使用成员变量, 则需要成员变量的前面加上this.的前缀, 明确要求该变量是成员变量
  • this关键字除了可以通过this.的方式调用成员变量和成员方法外, 还可以作为方法的返回值
  • 在构造方法的第一行可以使用this()的方式来调来本类中的其它构造方法

注意事项

  • 引用类型变量用于存放对象的地址, 可以给引用类型赋值为null, 表示不指向任何对象
  • 当某个引用类型变量为null时无法对对象实施访问(因为它没有指向任何对象). 此时, 如果通过引用访问成员变量或调用方法, 会产生NullPointerException异常(即空指针异常)

方法递归调用

递归的基本概念

递归本质就是指在方法体的内部直接或间接调用当前方法自身的形式

注意事项

  • 使用递归必须有递归的规律以及退出条件
  • 使用递归必须使得问题简单化而不是复杂化
  • 若递归影响到程序的执行性能, 则使用递推取代之

chain_xx_wdm
64 声望2 粉丝

1.领养代替买卖