1. 程式人生 > >java基礎-09

java基礎-09

面向物件

類和物件:面向物件的語言,面向物件的思想。 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();
  1. 面試問題3:
  • 例項內部類是否有額外的開銷(例項內部類是否擁有外部類物件)? 有外部類物件。擁有兩個this(一個外部類,一個自己的。兩個可以同時呼叫)。
System.out.println(this.data3);   //例項內部類的物件
System.out.println(OuterClass2.this.data3);   //外部類的物件
  • 例項內部類是否可以有靜態資料成員? 可以有,必須加final。 但是這個靜態資料成員需要在編譯期間確定。 因為final所修飾的值在編譯期間就會被確定。

匿名內部類:new外部類名{} .匿名內部類的方法 一般遊戲按鈕用的較多。