Java 中萬物皆對象,Linux 中一切皆文件java
先簡單的說下對象的實例化過程:數組
// new 隱式加載類到內存,再實例化對象
Object obj = new Object();
// Unsafe.allocateInstance
Object obj = Unsafe.allocateInstance(Object.class);
// 手動加載類
// Class.newInstance 是無參構造,最後調用的是 Constructor.newInstance (可帶參構造)
Class<String> cls = Class.forName("java.lang.String");
String str = cls.newInstance();
// 其它的還有序列化 clone
複製代碼
// 常量池中申請
String str = "string";
// 虛擬機回調 Integer 的靜態方法 valueOf(int i) 靜態方法說明類已經被加載到內存了
Integer i = 100;
複製代碼
數組除了 new, 還能夠用下面這個靜態方法框架
// Array.newInstance 調用 native 方法 構造一個長度 16 的 int 數組
int[] o = (int[]) Array.newInstance(int.class, 16); // 一維
// 如下都是能夠成功構造的 無非是數組嵌套數組
// int[][] o = (int[][]) Array.newInstance(int[].class, 16); // 二維
// int[][][] o = (int[][][]) Array.newInstance(int[][].class, 16); // 三維
複製代碼
以下圖:spa
不管是以哪種方式去實例化對象,咱們要明白的是,實例化一個對象以前,內存中必需要有一個類對象,或者說 Class 被加載到內存code