1.构造方法

        构造方法是一种特殊的方法,可以在构造方法中构造方法,也能在成员方法中调用构造方法。

作用:创建对象(初始化新对象)。

定义构造方法格式:

class 类名{
    访问权限 类名(参数列表){            //定义构造方法
        //方法体
        //构造方法没有返回值
    }
}
class Person{
    String name;
    int age;
    Person() {                                   //构造方法
        System.out.println("这是构造方法!);
    }
    Person(String aName,int aAge) {              //构造方法
        name = aName;
        age = aAge;
    }
}

(1)构造方法与类名相同。代码段两个构造方法,方法名都是Person。

(2)不能为构造方法指定类型,也不能用return语句返回值。但构造方法有隐含返回值,该值由系统内部使用。

(3)可以重载构造方法,既能定义多个有不同参数列表的构造方法。

代码段定义了两个重载的构造方法,第一个构造方法没有形参,第二个构造方法有两个形参。

(4)编程人员不能显示地直接调用构造方法,每当使用new关键字创建对象时,JVM为新建对象在堆内存开辟空间后,JVM将自动调用构造方法初始化新对象。Java程序中,通过“new 构造方法名( 实参列表 ); ” 的形式调用构造方法,而不能直接用“构造方法名 ( 实参列表 ); ” 调用构造方法。

(5)如果自定义类中未定义构造方法,系统将为这个类提供一个默认的空间构造方法。默认的空构造方法没有参数,方法体中也没有语句。系统确保类中至少有一个构造方法。

(6)如果自定义类中定义了任何构造方法,系统将不再提供空构造方法。前面代码段定义了Person类的构造方法,因此,系统不再为Person类提供空构造方法。 

2.构造方法的定义与使用

/*调用Person3类的无参构造方法!*/
package Mai3;
public class Person3 {               //定义数据成员
    String name;
    int age;

    public Person3() {                 //定义构造方法     无参构造
        System.out.println("调用Person3类的无参构造方法!");
    }

    public Person3(String aName, int aAge) {       //初始化name和age的构造方法
        name = aName;
        age = aAge;
        //new Person(aName);                       //构造方法能调用构造方法
        show();
    }

    public String getPerson() {                 //定义成员方法,获得对象信息
        return "姓名: " + name + "\t年龄: " + age;
    }

    public void show() {
        System.out.println(getPerson());
    }
    public static void main(String[] args) {
        Person3 lisa = new Person3();                        //空构造方法实例化对象
        Person3 lia = new Person3("李暧",21);    //构造方法实例化对象
        lisa.name = "Lisa";                       //直接赋值
        lisa.age = 20;
        System.out.println(lisa.getPerson());
        //System.out.println(lia.getPerson());

    }
}

运行结果为:

调用Person3类的无参构造方法!
姓名: 李暧	年龄: 21
姓名: Lisa	年龄: 20

3.默认构造方法

    构造方法是类的一个底线,每个类至少有一个构造方法

    第一种情况,如果自定义类没有显示定义构造方法,JVM将为该类提供一个默认的空构造方法,该方法没有形参,语句体没有任何语句;

    第二种情况,如果自定义类定义了构造方法,JVM将不提供默认的空构造方法。

默认构造方法的定义:

class Person {
    //1.定义数据成员
    String name;
    ing age;
    //2.定义构造方法
    //定义空构造方法,标配
    public Person() {
    }
    //其他构造方法
    //3.定义成员方法
}