14-面向对象-构造方法(构造器)

构造方法/构造器

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。

基本语法

修饰符 方法名(形参列表){

         方法体;

}

a) 构造器的修饰符可以是默认的,也可以是public 、protected 、private

b) 构造方法没有返回值

c) 方法名 和 类名 必须一样

d) 参数列表 和 成员方法一样的规则

e) 构造器的调用由系统完成,也就是说在创建对象时,系统会自动的调用该类的构造器完成对对象的初始化

练习:在创建人类对象时,使用构造器直接指定人类对象的年龄和姓名

public class Constructor01 {
    public static void main(String[] args){

        //当new一个对象时,直接通过构造器指定名字和年龄
        Person3 p = new Person3("马铃薯", 26);
        System.out.println("name = " + p.name + "\tage = " + p.age);
    }
}

//在创建人类的对象时,就直接指定这个对象的年龄和姓名
class Person3{
    //属性(成员变量,全局变量)
    String name;
    int age;
    //构造器,完成对新对象的初始化
    //1. 构造器没有返回值,也不能写void
    //2. 构造器的名称和类Person一样
    //3. (String pName, int pAge) 是构造器的形参列表,规则和成员方法一样
    public Person3(String pName, int pAge){
        System.out.println("====构造器被调用,完成对象的初始化=====");
        name = pName;
        age = pAge;
    }
}

构造器的注意事项和使用细节

1) 一个类可以定义多个不同的构造器,即构造器重载

public class ConstructorDetail {
    public static void main(String[] args){

        Person4 p1 = new Person4("马铃薯", 26);
        Person4 p2 = new Person4(26, "马铃薯");
    }
}

class Person4{
    //属性(成员变量,全局变量)
    String name;
    int age;
    //第一个构造器
    public Person4(String pName, int pAge){
        System.out.println("====第1个构造器被调用,完成对象的初始化=====");
        name = pName;
        age = pAge;
    }
    //第二个构造器
    public Person4(int pAge, String pName){
        System.out.println("====第2个构造器被调用,完成对象的初始化=====");
        age = pAge;
        name = pName;
    }
}

2) 构造器名和类名必须相同

3) 构造器没有返回值

4) 构造器是完成对象的初始化,并不是创建对象

5) 在创建对象时,系统会自动的调用该类的构造方法

6) 当没有定义构造方法时,系统会自动给类生成一个默认的无参构造方法(也叫默认构造方法)

public class Constructor02 {
    public static void main(String[] args){
        //当创建对象时就是调用默认的构造方法
        Dog d = new Dog();
    }
}

class Dog{
    //如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器)
    //使用javap指令,反编译看看
    /*
        默认构造器
        Dog{

        }
   */
}

7) 定义了自己的构造器,默认的构造器就覆盖了,不能再使用默认的无参构造器,要使用需要显式定义一下(这点很重要)

public class Constructor03 {
    public static void main(String[] args){

        //使用默认的无参构造器
        Dog2 d = new Dog2();
    }
}

class Dog2{
    String name;

    //定义了自己的构造器,默认的构造器就覆盖了
    //需要显示定义
    public Dog2(){

    }

    //自己定义构造器
    public Dog2(String dName){
        name = dName;
    }
}

 

posted @ 2023-08-04 09:20  马铃薯1  阅读(11)  评论(0编辑  收藏  举报