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