天天看點

構造器(構造方法) constructor使用細節:對象建立流程分析:

在建立對象時直接指定對象的屬性

是類的一種特殊方法,主要作用是完成新對象的初始化(不是建立對象)

[修飾符] 方法名(形參清單)(

        方法體;

修飾符可預設,也可public

構造器沒有傳回值

方法名和類名一樣

參數清單和成員方法一樣的規則

構造器調用系統完成

構造器(構造方法) constructor使用細節:對象建立流程分析:

使用細節:

1.一個類可定義多個構造器(構造器的重載)【例如可以再建立一個構造器,隻指定某一個屬性】

public class constructor{
	public static void main(String[] args) {
		person p = new person(100,"hello");//在建立對象的時候直接指派(完成對象屬性的初始化)
		person p2 = new person(100);//調用第二個構造器
		System.out.println(p.age);
	}
}

class person{
	int age;
	String name;

	//構造器
	//構造器沒傳回值(不用寫void)
	//構造器名稱和類名一樣(都是person)
	//(int age2,String name2)是形參清單,規則和方法一樣
	//
	//第一個構造器
	public person(int age2,String name2){
		System.out.println("構造器被使用");
		age = age2;
	}

	//第二個構造器(隻指定了age這個屬性)
	public person(int age2){
		System.out.println("構造器被使用");
		age = age2;
	}
}
           

如果沒有定義構造器,系統會自動給類生成一個預設無參構造器(可以用javap驗證)

【javap可以把class檔案反編譯成我們寫的源代碼】

構造器(構造方法) constructor使用細節:對象建立流程分析:

一旦自己定義了構造器,預設的構造器就被覆寫了,除非顯式的定義一下

構造器(構造方法) constructor使用細節:對象建立流程分析:

 (這種情況就是人為的更改了構造器,那麼建立對象的時候小括号裡就不能沒東西)

顯式的定義一下

class dog{

	public dog(int age){

	}

	dog(){//顯示的在定義一下

	}
}
           

對象建立流程分析:

構造器(構造方法) constructor使用細節:對象建立流程分析:

 執行person p = new person("小倩",20);的時候

先在方法區加載person類資訊,然後在堆裡面開辟一個空間(空間裡面一部分存放age,一部分存放name;分别進行預設初始化,0和null),空間有個位址,到了int age = 90;這行,age的0被改成90;到了String name這行,name的值沒被改變還是null;到了構造器内行的時候把實參小倩傳給n,然後n再傳給name,age同理【小倩在常量池裡面,也有個位址】

堆裡面的工作做完之後,堆裡的空間的位址被傳到棧裡面的p(這個棧裡面的p不是對象,是對象的引用【對象名】)