Java中,構(gòu)造器(Constructor)是一種特殊的方法,用于在創(chuàng)建對象時(shí)初始化對象的屬性。每個(gè)類都至少有一個(gè)構(gòu)造器,如果程序沒有提供構(gòu)造器,Java編譯器會為該類生成一個(gè)默認(rèn)的構(gòu)造器。
構(gòu)造器與普通方法的不同之處在于:
? 構(gòu)造器的方法名必須與類名相同; ? 構(gòu)造器沒有返回類型; ? 每個(gè)類可以有多個(gè)構(gòu)造器,構(gòu)造器可以重載; ? 如果一個(gè)類沒有定義構(gòu)造器,Java編譯器會為其生成默認(rèn)構(gòu)造器,該構(gòu)造器將所有實(shí)例變量初始化為默認(rèn)值; ? 如果一個(gè)類定義了至少一個(gè)構(gòu)造器,Java編譯器就不會再生成默認(rèn)構(gòu)造器了;
下面使用代碼來演示Java構(gòu)造器和構(gòu)造方法的使用:
public class Student { private String name; private int age; // 構(gòu)造器一 public Student() { name = "Unknown"; age = 0; } // 構(gòu)造器二 public Student(String n, int a) { name = n; age = a; } // 設(shè)置姓名 public void setName(String n) { name = n; } // 設(shè)置年齡 public void setAge(int a) { age = a; } // 獲取姓名 public String getName() { return name; } // 獲取年齡 public int getAge() { return age; } public static void main(String[] args) { /* 使用構(gòu)造器一創(chuàng)建學(xué)生 */ Student s1 = new Student(); System.out.println("學(xué)生姓名:" + s1.getName()); System.out.println("學(xué)生年齡:" + s1.getAge()); /* 使用構(gòu)造器二創(chuàng)建學(xué)生 */ Student s2 = new Student("張三", 18); System.out.println("學(xué)生姓名:" + s2.getName()); System.out.println("學(xué)生年齡:" + s2.getAge()); /* 修改學(xué)生姓名和年齡 */ s1.setName("李四"); s1.setAge(20); System.out.println("學(xué)生姓名:" + s1.getName()); System.out.println("學(xué)生年齡:" + s1.getAge()); } }
在上面的代碼中,定義了兩個(gè)構(gòu)造器,一個(gè)是默認(rèn)構(gòu)造器,一個(gè)是帶參數(shù)的構(gòu)造器。我們來看一下main方法運(yùn)行后的輸出結(jié)果:
學(xué)生姓名:Unknown 學(xué)生年齡:0 學(xué)生姓名:張三 學(xué)生年齡:18 學(xué)生姓名:李四 學(xué)生年齡:20
從輸出結(jié)果中可以看出,使用構(gòu)造器一創(chuàng)建的學(xué)生,姓名和年齡都是默認(rèn)值,而使用構(gòu)造器二創(chuàng)建的學(xué)生,可以指定姓名和年齡。通過修改學(xué)生的姓名和年齡,可以看出這兩個(gè)屬性的值都得到了正確的修改。