1. 程式人生 > >-Java基礎-構造器

-Java基礎-構造器

按順序 如果 lang images 常量 erro fun data south

1.構造器

構造器就是類創建對象的初始化方法。它的名字與類名相同。 假設沒有寫有構造器的情況下,虛擬機會自動加上一個沒有參數的構造器,如果【學Java,到凱哥學堂kaige123.com】寫有構造器,那麽虛擬機就不會在加上構造器了。

public class Test1 {
	public Test1() {
		System.out.println("我是構造器!");
	}
}

2.構造器重載

構造器就是一個方法,所以它和普通的方法一樣也可以做方法重載,換句話說就是構造器的重載。 和方法重載一樣構造器重載就是多個一樣名字參數類型和參數的個數不同的多個構造器。

public class Test1 {
	public Test1() {
		System.out.println("先脫去衣服");
	}
	public Test1(String name) {
	}
public Test1(int name) {
	}
}

2.實例塊 實例塊就是一個劃分的代碼區域。{ 代碼 } 1.它是在構造器之前執行。 2.它和屬性初始化一同執行。 3.一個類中可以有很多個實例塊。

  1. 執行過程是按照順序從上到下執行。
public class Test3 {
	{
		System.out.println("我是實例塊!");
	}
}

3.this this用3種用法: 1.表示當前的對象。 假設在一個方法中傳入的參數名為a1,在實例中也有一個變量叫做a1.如果方法中的參數a1想賦值給類中的a1。則就需要到this關鍵字。因為java如果遇到同名的變量就會默認用和你最近的參數。

public class Test4 {
	String name;
	// 重名了 使用的規則是 就近原則
	public Test4(String name) {
		this.name = name;
	}
}

2.當前對象返回
	public Test4 getTest4() {
		return this;
	}

3.構造器轉發

註意:靜態屬性和靜態方法參數重名怎麽辦? 這時就不能用this了。因為this是當前對象。 既然是靜態成員那就直接類名點屬性名就可以了。 例如:

static String address;
	static void method(String address) {
		Test4.address = address;
	}

4.靜態塊 static{} 是類加載的時候和靜態屬性一起執行的。也是按順序從上往下執行。

5.類的加載 1.在聲明靜態屬性但並沒有使用屬性時,不會對類進行加載。 使用靜態屬性時才會對類進行加載。 2.聲明或使用常量時都不會對類進行加載。 因為常量的內存【學Java,到凱哥學堂kaige123.com】和類成員的內存不在同一內存內。 3.使用靜態方法或new肯定會加載類。 4.//加載類 class.forName( 包名.類名 )

怪題:

技術分享

main方法中,new Test1();,然而Test1類中又new Test1,因為new對象的時候肯定會加載類,然而加載類其實就是加載靜態屬性,所以這就成了死循環。報出方法嵌套調用溢出的錯誤。 java.lang.StackOverflowError

-Java基礎-構造器