天天看點

黑馬程式員-構造函數和構造代碼塊

------- 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{}表示靜态代碼塊,随着類的加載而執行,優先于構造代碼塊。