class Demo_Car{
public static viod main(String[] args){
Car c1 = new Car();
c1.color = "red";
c1.num = 8;
c1.run();
}
}clss Car{
String color;
int num;
public void run(){
System.out.println(color +"..."+num);
}
}
编译时将源文件(.java)变成了字节码文件(.class)
字节码文件1本来在硬盘上,(运行时)加载时加载到内存,其实就是进了方法区
所以最先进方法区的是Demo_Car,而它里面有main(),虚拟机帮我们调用,调用时main()进入栈,
main中使用Car创建对象,所以先将Car.class加载进内存(方法区),然后通过new在堆里面创建对象,该对象具有String color,int num的属性。记住在堆中的地址.
运行run方法,run()加载内存,要进栈,c1调用结束后弹栈
是经过编译器预处理过的一种文件,是java的执行文件存在形式,java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件在解释成机器码运行。解释就是通过java虚拟机来执行的。它本身是二进制文件,但是不可以被系统直接执行,而是需要虚拟机解释执行,由于被预处理过,所以比一般的解释代码要快,但是仍然会比系统直接执行的慢。 ↩︎