整个编译阶段,都没有触及到内存分配,仅仅是检查语法和生成字节码文件而已。所以像对象初始化这些过程,都是在运行时期进行的!
用代码举个例子
class Demo{
public static void main(String[] args){
int[] a = new int[0];//定义一个长度为0的数组
System.out.println(a[0]);//输出第1个元素,这里编译不会报错,运行出错
}
}
1.编译期,虚拟机只是把源代码(.java)文件编译成字节码(.class)文件,跟内存没什么关系(我指的是java虚拟机内存,不谈芯片级别和计算机系统底层的内存);
2.在运行期,才谈论内存的问题;
3.函数和变量先进内存的方法区-->方法进栈-->有对象产生(直接new 对象或调用产生对象的方法)在堆区产生对象,本例中,具体指你的single s