內部類
將一個類定義在另一個給類里面或者方法里面,這樣的類就被稱為內部類。
內部類可以分為四種:成員內部類、局部內部類、匿名內部類。
成員內部類
1 class C{ 2 class D{ 3 4 } 5 }
注:
員內部類可以無條件訪問外部類的屬性和方法,但是外部類想要訪問內部類屬性或方法時,必須要創建一個內部類對象,然后通過該對象訪問內部類的屬性或方法
訪問方式
外部類名.內部類名 變量名 = new 外部類名().new 內部類名();
局部內部類
局部內部類存在於方法中。
他和成員內部類的區別在於局部內部類的訪問權限僅限於方法或作用域內。
1 class 外部類 { 2 修飾符 返回值類型 方法名(參數) { 3 class 內部類 { 4 //其他代碼 5 } 6 } 7 }
訪問方式
在外部類方法中,創建內部類對象,進行訪問
匿名內部類
public class Demo { public static void main(String[] args) { driveCar(new Car(){ @Override public void drive() { System.out.println("駕駛着BMW汽車"); } }); } public static void driveCar(Car car){ car.drive(); } } interface Car { void drive(); }
匿名內部類沒有構造方法。也是唯一沒有構造方法的內部類。匿名內部類和局部內部類只能訪問外部類的final變量。
代碼塊
局部代碼塊
1 class Demo01{ 2 public static void main(String[] args) { 3 { 4 System.out.println("普通代碼塊"); 5 } 6 System.out.println("代碼塊之外"); 7 } 8 }
靜態代碼塊
1 public class Person { 2 private String name; 3 private int age; 4 //靜態代碼塊 5 static{ 6 System.out.println("靜態代碼塊執行了"); 7 } 8 }
它優先於主方法執行、優先於構造代碼塊執行,當以任意形式第一次使用到該類時執行。
該類不管創建多少對象,靜態代碼塊只執行一次。
可用於給靜態變量賦值,用來給類進行初始化。
訪問修飾符權限
java的四個關鍵字:public、protected、default、private(他們決定了緊跟其后被定義的東西可以被誰使用)
適用范圍<訪問權限范圍越小,安全性越高>
訪問權限 類 包 子類 其他包
public ∨ ∨ ∨ ∨ (對任何人都是可用的)
protect ∨ ∨ ∨ × (繼承的類可以訪問以及和private一樣的權限)
default ∨ ∨ × × (包訪問權限,即在整個包內均可被訪問)
private ∨ × × × (除類型創建者和類型的內部方法之外的任何人都不能訪問的元素)