標籤:java
- 構造器
構造器就是類建立對象的初始化方法。它的名字與類名相同。 假設沒有寫有構造器的情況下,虛擬機器會自動加上一個沒有參數的構造器,如果【學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.一個類中可以有很多個執行個體塊。
執行過程是按照順序從上到下執行。
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( 包名.類名 )
怪題:
650) this.width=650;" src="http://os78f4hny.bkt.clouddn.com/201708020001.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim" alt="image" style="border-style:none;background-color:rgb(255,255,255);" />
main方法中,new Test1();,然而Test1類中又new Test1,因為new對象的時候肯定會載入類,然而載入類其實就是載入靜態屬性,所以這就成了死迴圈。報出方法嵌套調用溢出的錯誤。 java.lang.StackOverflowError
-Java基礎-構造器