Java User
java是JVM,执行java后就准备好了代码区,静态区,栈区,堆区。
执行User时现在代码区找看有没有User.class,如果没有就在环境里找classpath环境变量,classpath里面有很多路径,逐一在每个路径下找该User.class字节码(在硬盘上找),如果没找到就报类没找到的错误,
如果找到了就把字节码加到代码区,同时生成反射类(反射类可以了解到该类的信息)。
字节码加载的过程中要对字节码进行扫描(三层安全扫描),看是否有非法的数据代码,但是java代码不可能有非法的数据代码,要是有就根本加载不到JVM里面来,在扫描的过程中就会发现该字节码里面定义了什么。只要发现static,不管方法还是属性,只要前面有static,就把该方法或属性加载到静态区(即把代码存到静态区里),
加载到静态区后分配内存。
只要进块(‘{’),就要在内存里开辟一块栈桢,遇到(‘}’)就出栈。
简单的说就是:
代码区存放类;
静态区存放静态的属性和静态的方法,直接分配内存;
栈区存放变量;
堆区在实例化类后即new该类后,存放该类的构造函数,非静态方法;