首先针对8种常见数据类型(byte,short,int,long,double,float,char,boolean),还有String,他们在类对象被引用的时候,把数据类型存放在栈中,而常量则放在常量池中,有时候书里也会说常量池在堆中,这个暂时还没有确定,而变量则指向常量池里的常量。

引用数据类型,比如说数组:引用数据类型 和变量 会存在栈中,一旦new一个对象,就会在堆的内存空间单独开辟一块空间出来(数据的int[] arr={10,20}—>相当于int[] arr=new int[]{10,20},只不过省略了new int[]而已)

而针对方法:一旦main方法被加载了,就会在栈中开辟一块区域,运行到引用数据类型的时候(也就是Zi zi=。。的时候)就会把对象的字节码文件加载到方法区(如果有集成,也就会父类的字节码文件加载进来到方法区),而执行了= new Zi();的操作后,就在堆区开辟一块内存空间,然后用this和super关键字标识父子类,并且把对应的变量和方法加载进来,一旦执行到了对象的方法的时候(zi.方法名),就会把方法加载到栈中,注意:如果方法有形参,就优先在栈中加载这个形参。

版权声明:本文为zhangyuhong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhangyuhong/p/12053008.html