java內部類基礎(局部內部類)

//在方法中定義的內部類稱爲局部內部類。與局部變量相似,局部內部類不能有 訪問修飾符,由於它不是外圍類的一部分,可是它能夠訪問外圍類的全部成員《實例變量或類變量生命週期是類或對象,不是方法》
//方法內部類對象不能使用該內部類所在方法的非final局部變量
//由於方法的局部變量位於上,只存在於該方法的生命期內。當一個方法結束,其棧結構被刪除,局部變量成爲歷史。
//可是該方法結束以後,在方法內建立的內部類對象可能仍然存在於中!例如,若是對它的引用被傳遞到其餘某些代碼,並存儲在一個成員變量內。
//正由於不能保證局部變量的存活期和方法內部類對象的同樣長,因此內部類對象不能使用非final修飾的局部變量。 this

//普通的內部類對象隱含地保存了一個引用,指向建立它的外圍類對象
public class InnerClass2 {
 private int s = 100;
 private int out_i = 1; spa

 public void f(final int k) {
  int i = 1;   //局部變量 非final 局部內部類不可以使用
  final int s = 200; //局部變量  局部內部類能夠使用
  final int j = 10;  //局部變量  局部內部類能夠使用 對象

  // 定義在方法內部
  class Inner {
   //static int m = 20; //不能夠定義靜態變量
   int s = 300; // 能夠定義與外部類同名的變量
   int inner_i = 100;
   Inner(int k) {
    inner_f(k);
   }
   
   void inner_f(int k) {
    int s = 500;
    // 若是內部類沒有與外部類同名的變量,在內部類中能夠直接訪問外部類的實例變量
    System.out.println(out_i);
    // 能夠訪問外部類的局部變量(也就是方法內的局部變量),可是變量必須是final的
    System.out.println(j);
    //System.out.println(i);
    
    //方法內局部變量 直接運用
    System.out.println(s);
    //若是內部類中有與外部類同名的變量,直接用變量名訪問的是內部類的變量
    System.out.println(this.s);
    // 用外部類名.this.內部類變量名訪問的是外部類變量
    System.out.println(InnerClass2.this.s);
   }
  }
  new Inner(k);
 } 生命週期

 public static void main(String[] args) {
  // 訪問局部內部類必須先有外部類對象
  InnerClass2 out = new InnerClass2();
  out.f(3);
 }
} class

相關文章
相關標籤/搜索