java基礎-09
阿新 • • 發佈:2018-12-18
面向物件
類和物件:面向物件的語言,面向物件的思想。 oop this: 指向當前物件的記憶體。指向物件不準確,this在建構函式裡的時候,這時候並沒有物件。 this必須放在函式第一行。static裡面不能用this。 static:方法區。 不管有多少物件,靜態程式碼塊只初始化一次。 final:所修飾的值在編譯期間就會被確定。
物件的初始化方式:
- 提供一系列的 set get 方法。
class Person { private int age;//資料 public void setAge(int age) { this.age = age;//this當前類的物件 } public int getAge() { return age; } }
- 通過合適的建構函式進行初始化。建構函式是可以被過載的。
class Person {
private String name;
private String sex;
public Person(String name,String sex) {
this.sex = sex;
this.name = name;
}
}
- 靜態塊初始化(靜態程式碼塊):物件呼叫靜態方法,編譯器會發生警告,因為靜態方法不屬於物件。 static所修飾的方法或者靜態成員不依賴於物件。通過類名直接呼叫。
static { count = 10; System.out.println("static {} init"); }
- 例項塊初始化(構造程式碼塊):
class Person {
{
this.name = "haha";
this.sex = "superman";
this.age = 18;
System.out.println("instance {} init");
}
}
- 面試問題1:物件的建立分為那幾步? 物件的初始化順序:靜態塊初始化>例項塊初始化>建構函式初始化。
內部類
靜態內部類:被static 修飾。
-
面試問題2:
-
如何訪問外部類的非靜態資料成員? 傳入一個外部類的物件。
OuterClass outerClass = new OuterClass(); OuterClass.InnerClass innerClass1 = new OuterClass.InnerClass(outerClass);
- 靜態內部類是否擁有外部內物件? 不擁有。
例項內部類:沒static修飾 外部類名.內部類名 物件=外部類物件.new 內部類
OuterClass2 outerClass2 = new OuterClass2();
OuterClass2.InnerClass2 innerClass2 = outerClass2.new InnerClass2();
- 面試問題3:
- 例項內部類是否有額外的開銷(例項內部類是否擁有外部類物件)? 有外部類物件。擁有兩個this(一個外部類,一個自己的。兩個可以同時呼叫)。
System.out.println(this.data3); //例項內部類的物件
System.out.println(OuterClass2.this.data3); //外部類的物件
- 例項內部類是否可以有靜態資料成員? 可以有,必須加final。 但是這個靜態資料成員需要在編譯期間確定。 因為final所修飾的值在編譯期間就會被確定。