本文目錄一覽:
Java知多少(36)內部類及其實例化
在 Java 中,允許在一個類(或方法、語句塊)的內部定義另一個類,稱為內部類(Inner Class),有時也稱為嵌套類(Nested Class)。
內部類和外層封裝它的類之間存在邏輯上的所屬關係,一般只用在定義它的類或語句塊之內,實現一些沒有通用意義的功能邏輯,在外部引用它時必須給出完整的名稱。
使用內部類的主要原因有:
內部類可以訪問外部類中的數據,包括私有的數據。
內部類可以對同一個包中的其他類隱藏起來。
當想要定義一個回調函數且不想編寫大量代碼時,使用匿名(anonymous)內部類比較便捷。
減少類的命名衝突。
請看下面的例子:
1 public class Outer {
2 private int size;
3 public class Inner {
4 private int counter = 10;
5 public void doStuff() {
6 size++;
7 }
8 }
9 public static void main(String args[]) {
10 Outer outer = new Outer();
11 Inner inner = outer.new Inner();
12 inner.doStuff();
13 System.out.println(outer.size);
14 System.out.println(inner.counter);
15 // 編譯錯誤,外部類不能訪問內部類的變量
16 System.out.println(counter);
17 }
18 }
這段代碼定義了一個外部類 Outer,它包含了一個內部類 Inner。將錯誤語句注釋掉,編譯,會生成兩個 .class 文件:Outer.class 和 Outer$Inner.class。也就是說,內部類會被編譯成獨立的位元組碼文件。
內部類是一種編譯器現象,與虛擬機無關。編譯器將會把內部類翻譯成用 $ 符號分隔外部類名與內部類名的常規類文件,而虛擬機則對此一無所知。
注意:必須先有外部類的對象才能生成內部類的對象,因為內部類需要訪問外部類中的成員變量,成員變量必須實例化才有意義。
內部類是 Java 1.1 的新增特性,有些程序員認為這是一個值得稱讚的進步,但是內部類的語法很複雜,嚴重破壞了良好的代碼結構, 違背了Java要比C++更加簡單的設計理念。
內部類看似增加了—些優美有趣,實屬沒必要的特性,這是不是也讓Java開始走上了許多語言飽受折磨的毀滅性道路呢?本教程並不打算就這個問題給予一個肯定的答案。
Java類的實例化是什麼,麻煩簡單講解一下最好配合下代碼
1)使用new操作符
2)調用Class對象的newInstance()方法
3)調用clone()方法,對現有實例的拷貝
4)通過ObjectInputStream的readObject()方法反序列化類
最簡單常用的就是你定義了一個類叫InstantiateClass
InstantiateClass ic=new InstantiateClass();
這個new的過程就叫做實例化
Java實例化的幾種方式
1、用new語句創建對象,這是最常見的創建對象的方法。
2、通過工廠方法返回對象,如:String str = String.valueOf(23);
3、運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。如:Object obj = Class.forName(“java.lang.Object”).newInstance();
4、調用對象的clone()方法。
5、通過I/O流(包括反序列化),如運用反序列化手段,調用java.io.ObjectInputStream對象的 readObject()方法。
原創文章,作者:C4LTU,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/127470.html