构造器/构造方法

定义

        构造方法又叫构造器,是类的一种特殊的方法,它的作用是完成对新对象的初始化。它有以下几个特点:

  • 方法名和类名相同。
  • 没有返回值。
  • 在创建对象时,系统会自动的调用该类的构造器完成对对象的初始化。

基本语法

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

        方法体;

        }

  public Student(int Age){
    System.out.println(“构造方法”);
      }

例:

public class Main {
    public static void main(String[] args) {
        Student p1=new Student("jack",20);//创建新对象时,直接通过构造器指定其名字和年龄
        System.out.println("p1的name:");
        System.out.println("p1的age:”+p1.age");
    }
}


class Student{
    String name;
    int age;
    public Student(String Name,int Age){
    //(String Name,int Age)是构造器形参列表,规则和成员方法
        name=Name;
        age=Age;
    }
}

输出结果:

        p1的name:jack

        p1的age:20

注意事项:

        1)构造器没有返回值,也不能写void。

        2)构造器的名称和类名”Student”需相同。

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

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

构造器重载

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

例:

public class Main {
    public static void main(String[] args) {
        Student p1=new Student("jack",20);//创建第一个新对象
        Student p2=new Student("rookie");//创建第二个新对象
        System.out.println("p1的信息:");
        System.out.println("p1的name:"+p1.name+);
        System.out.println("p1的age:"+p1.age);
        System.out.println("p2的信息:");
        System.out.println("p2的name:"+p2.name);
        System.out.println("p2的age:"+p2.age);
    }
}

class Student{
    String name;
    int age;
  public Student(String Name,int Age){//第一个构造器
        name=Name;
        age=Age;
    }
  public Student(String Name){//第二个构造器
        name=Name;
    }
}

输出结果:

        p1的信息:

        p1的name:jack

        p1的age:20

        p2的信息:

        p2的name:rookie

        p2的age:0

        在创建第一个对象Student p1=new Student("jack",20)时,其中分别有String,int类型的两个参数,因此系统自动调用了第一个构造器,在此构造方法中,name和age都分别被赋予了有效值,输出为jack和20。

        而因为创建第二个对象Student p2=new Student("rookie")时,其中只有一个String参数,系统为其匹配第二个构造方法,此时只有name被赋予有效值,而age则为默认初始值0。

        此时大家可能好奇,在之前我们并未定义任何的构造方法,但编写的方法也可正常运行,这是为什么呢,这就要介绍下面的知识点:

如果程序员没有定义构造方法,系统会自动给类编写一个默认无参构造方法。

        例如我们只定义一个类Night,而不在其内部定义构造器时,系统仍会为其编写一个无参构造函数,例:

public class Main {
    public static void main(String[] args) {
    Night lone=new Night();
    }
}

class Night{
}

        系统内部产生的默认构造器:

Night(){

}

        明白这个知识点后,大家可能会产生新的疑问:既然系统原本有着一个构造方法,那么当我们为类编写新的构造方法后,原本的构造方法去哪了?他还能继续用吗?这就会引出另一个知识点:

一旦定义了自己的构造器,默认的构造器就被覆盖了。不能再继续使用,除非显式的进行定义

        例如当我们编写一个新的构造方法时,系统内部调用的构造器就变成了我们编写的构造器“public Night(String name)”。

例:

public class Main {
    public static void main(String[] args) {
    Night deep=new Night("moon");
    }
}

class Night{
    public Night(String name){
    }
}

        系统内部产生的默认构造器:

class Night{
    public Night(String name){
    }
}

        此时我们再想创建一个无赋值的新对象[Night deep=new Night() ]时,系统就会报错,除非显式的定义一下无参构造器,即:

Night(){

}

        此时无论是创建有参对象Night deep=new Night("moon");亦或者创建无参对象Night deep=new Night();系统都不会报错。

例:

public class Main {
    public static void main(String[] args) {
        Night deep = new Night("moon");
        Night lone = new Night();

    }
}

class Night {
    public Night(String name) {
    }

    Night() {
     }
}

        代码便可正常运行。 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值