------- android教育訓練、java教育訓練、期待與您交流! ----------
構造函數的特點是與類的名字相同,不用寫傳回類型,也不用寫return語句。
每個類中都一個預設不帶參數的構造函數,如果程式員自己定義了構造函數,那麼系統就不再給建立空參數的構造函數了。
構造函數是用來給對象初始化的,對象一建立就運作與之對應的構造函數。
通過不同參數的構造函數,可以選擇類不同的初始化方式
構造代碼塊寫在類{}之中,他優先于構造函數運作,不管類的初始化方式是怎樣的,他都會運作,是以他是對類所有的對象進行初始化
public class Person {
private int name;
private int age;
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
Person(){
System.out.println("name=" + name + ",age=" + age);
}
Person(String name){
System.out.println("name=" + name + ",age=" + age);
}
Person(String name,int age){
System.out.println("name=" + name + ",age=" + age);
}
{
System.out.println("Person Run");
}
}
主函數調用
Person p1 = new Person();
Person p2 = new Person("zhangsan");
Person p3 = new Person("lisi",23);
運作結果
Person Run
name=0,age=0
Person Run
name=zhangsan,age=0
Person Run
name=lisi,age=23
注意:
1、如果删除了Person(){}這個構造函數,就會報錯,由于已經自定義了帶參數的構造函數是以,系統不會自動添加無參構造函數
2、{}構造代碼塊中的内容優先于構造函數運作,并且每個對象初始化都會運作
3、如果構造函數Person(){}前加了private修飾,那麼Person類無法通過無參方式建立對象
4、構造函數間調用構造函數不能用Person(name),而是用this(name)
提升部分練習:
class Person{
Person(){
System.out.println("a");
}
static{
System.out.println("b");
}
{
System.out.println("c");
}
}
class PersonDemo{
static{
System.out.println("d");
}
public static void main(String[] args){
Person p = new Person();
System.out.println("e");
}
}
運作結果是:
d
b
c
a
e
注意:
1、static{}表示靜态代碼塊,随着類的加載而執行,優先于構造代碼塊。