1、內部類
內部類是指在一個外部類的內部再定義一個類。內部類作為外部類的一個成員,並且依附於外部類而存在的。內部類可為靜態,可用protected和private修飾(而外部類只能使用public和缺省的包訪問權限)。內部類主要有以下幾類:成員內部類、局部內部類、靜態內部類、匿名內部類
例如:
public class Test2 { public static void main(String[] args) { //實例化的方法一 Cls box=new Cls(); box.data=300; Cls.Incls inbox=box.new Incls(); inbox.show(); //實例化的方法二 Cls.Incls box2=new Cls().new Incls(); box2.show(); } } //外部類 class Cls { //外部類的成員變量 public int data=200; //成員內部類 class Incls{ //內部類的成員 public void show(){ System.out.println("內部類數據:"+data); } } }
結果:
2、靜態內部類
如果你不需要內部類對象與其外圍類對象之間有聯系,那你可以將內部類聲明為static。這通常稱為嵌套類(nested class)。想要理解static應用於內部類時的含義,你就必須記住,普通的內部類對象隱含地保存了一個引用,指向創建它的外圍類對象。然而,當內部類是static的時,就不是這樣了。嵌套類意味着:
1. 要創建嵌套類的對象,並不需要其外圍類的對象。
2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。
例如:
public class Outer { private static int i = 1; private int j = 10; public static void outer_f1() {} public void outer_f2() {} // 靜態內部類可以用public,protected,private修飾 // 靜態內部類中可以定義靜態或者非靜態的成員 private static class Inner { static int inner_i = 100; int inner_j = 200; static void inner_f1() { // 靜態內部類只能訪問外部類的靜態成員(包括靜態變量和靜態方法) System.out.println("Outer.i" + i); outer_f1(); } void inner_f2() { // 靜態內部類不能訪問外部類的非靜態成員(包括非靜態變量和非靜態方法) // System.out.println("Outer.i"+j); // outer_f2(); } } public void outer_f3() { // 外部類訪問內部類的靜態成員:內部類.靜態成員 System.out.println(Inner.inner_i); Inner.inner_f1(); // 外部類訪問內部類的非靜態成員:實例化內部類即可 Inner inner = new Inner(); inner.inner_f2(); } public static void main(String[] args) { new Outer().outer_f3(); } }
3、枚舉類
這種方式是Effective Java作者Josh Bloch 提倡的方式,它不僅能避免多線程同步問題,而且還能防止反序列化重新創建新的對象,可謂是很堅強的壁壘。
例如:
public enum Singleton { INSTANCE; public void whateverMethod() { } }
此文章轉載於:https://www.cnblogs.com/best/p/6736771.html和http://cantellow.iteye.com/blog/838473