新建第一个类StructureCar:

package introduction;

public class StructureCar {

    private String make;

    public void setMake(String make) {
        this.make = make;
    }
    public String getMake() {
        return make;
    }

}

新建第二个类ConstructorDemo:

package introduction;

public class ConstructorDemo {

    public static void main(String[] args) {
    //当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
    StructureCar c1 = new StructureCar();
    c1.setMake("Auto");
    System.out.println(c1.getMake());

    }

}

一、构造函数专门用于初始化对象。

 

二、每个类在创建后都默认有一个空参数的构造函数,构造函数中默认有return语句,用于结束函数。

 

三、怎样新建一个构造函数:

package introduction;

public class StructureCar {
    /*
     * 构造函数歌手:
     * 1、函数名和类名相同
     * 2、没有返回值类型
     * 3、没有具体的返回值
     */
    private String make;
    //这是一个构造函数
    public StructureCar() {
    
    }
    
    public void setMake(String make) {
        this.make = make;
    }
    public String getMake() {
        return make;
    }

}

 

四、一个类中允许存在多个构造函数,同名不同参(参数的个数和类型不同)。

 

五、方法名相同,参数列表不同的方法我们可以称之为重载。

 

六、重新新建两个变量,并在构造函数中对他们进行初始package introduction;public class StructureCar {

/*
     * 构造函数歌手:
     * 1、函数名和类名相同
     * 2、没有返回值类型
     * 3、没有具体的返回值
     */
    private String make;
    int year;
    int speed;
    //这是一个构造函数
    public StructureCar() {
        this.year = 2000;
        this.speed = 1990;
    //体现已经调用了这个构造方法
   System.out.println(
"空参构造函数"); } public void setMake(String make) { this.make = make; } public String getMake() { return make; } }

在ConstructorDemo类中打印刚刚加上的两个变量:

package introduction;

public class ConstructorDemo {

    public static void main(String[] args) {
    //当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
    StructureCar c1 = new StructureCar();
    
    System.out.println(c1.speed);
    System.out.println(c1.year);
    }

}

打印结果为:

从打印结果中我们可以看到“空参构造函数”打印在变量“year、speed”之前,因为我们在创建“c1”对象时“空参构造函数”就已经执行了,同时还给变量“year、speed”进行了初始化赋值,但是在打印结果中我们可以看到“空参构造函数”比变量的赋值结果先打印在显示栏中,其实在对象建立时这些都已经赋值完成了,只不过在其它类中打印变量的语句在对象建立之后才执行,所以我们看到的打印结果才会出现这种现象。

 

七、如果我们想创建对象时变量就能够按照自己的要求被初始化,那么我们创建一个带参数的构造函数:

package introduction;

public class StructureCar {
    /*
     * 构造函数歌手:
     * 1、函数名和类名相同
     * 2、没有返回值类型
     * 3、没有具体的返回值
     */
    private String make;
    int year;
    int speed;
    //这是一个构造函数
    public StructureCar() {
        this.year = 2000;
        this.speed = 1990;
        //体现已经调用了这个构造方法
        System.out.println("空参构造函数");
    }
    /*
     * 这个构造函数和上面的构造函数不同之处:
     * 上面的构造函数year、speed变量是固定的,创建完对象后,对象的初始化值都是“0”,
     * 而下面这种构造函数在创建对象时就可以按照自己的意愿给year、speed变量传值
     */
    public StructureCar(int year,int speed) {
    this.year = year;
    this.speed = speed;
    }
    public void setMake(String make) {
        this.make = make;
    }
    public String getMake() {
        return make;
    }

}

在ConstructorDemo类中进行调用打印:

package introduction;

public class ConstructorDemo {

    public static void main(String[] args) {
    //当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
    StructureCar c1 = new StructureCar();
    
    System.out.println(c1.speed);
    System.out.println(c1.year);
    System.out.println("---------分割线---------");
    //创建对象时进行初始化
    StructureCar c2 = new StructureCar(2018,120);
    System.out.println(c2.speed);
    System.out.println(c2.year);
    }
}

结果为:

 

八、在构造方法内部调用构造方法(构造函数调用构造函数):

调用的格式:this();

package introduction;

public class StructureCar {
    /*
     * 构造函数歌手:
     * 1、函数名和类名相同
     * 2、没有返回值类型
     * 3、没有具体的返回值
     */
    private String make;
    int year;
    int speed;
    //这是一个构造函数
    public StructureCar() {        
     //调用带参的构造函数
     this(2100,1880); //this.year = 2000; //this.speed = 1990; //体现已经调用了这个构造方法 System.out.println("空参构造函数"); } /* * 这个构造函数和上面的构造函数不同之处: * 上面的构造函数year、speed变量是固定的,创建完对象后,对象的初始化值都是“0”, * 而下面这种构造函数在创建对象时就可以按照自己的意愿给year、speed变量传值 */ public StructureCar(int year,int speed) { this.year = year; this.speed = speed; } public void setMake(String make) { this.make = make; } public String getMake() { return make; } }

在ConstructorDemo类中进行调用打印:

package introduction;

public class ConstructorDemo {

public static void main(String[] args) {
//当创建这个对象时,就是调用了car这个类里面空参数构造函数给这个对象进行初始化
StructureCar c1 = new StructureCar();
System.out.println(c1.speed);
System.out.println(c1.year);
}
}

结果为:

注意:调用时被调用的构造函数必须放在调用的构造方法的第一行,否则会报错

正确(如下所示必须放在第二行,否则会报错):

1 public StructureCar() {
2         this(2100,1880);
3         this.year = 2000;
4         this.speed = 1990;
5         //体现已经调用了这个构造方法
6         System.out.println("空参构造函数");
7     }

 错误:

 

 九、构造方法和普通方法的区别:

1、运行上:

构造函数在创建对象时就已经执行,只执行一次。

在对象创建后,需要时才被调用,能够调用多次。

2、构造函数在类中是以重载形式来体现,方法名一样,参数列表不一样。

3、在一个类中,如果自定义了一个构造函数,默认的构造函数就不存在了

posted on 2018-08-21 16:02  时光以北暮南城  阅读(334)  评论(0编辑  收藏  举报