先说一下栈的特点,不知道你有没有学过数据结构,栈有一个特点,是先进后出,举个例子,假如进栈的顺序是3,6.1,9.那么出栈的顺序是9,1,6,3,也就是最先进去的最后出,这就像是死胡同,只有最外边的人才能现出来。栈的这种特点正好用来运行程序时加载内存。我在举个例子来说明方法区和堆的作用。
比如说加工食品,堆中用来存放原料之类的,方法区用来存放制作食品的工具,那么当我们执行制作食品的程序时,要把原料和工具都放在一个房间内来加工,那么栈就是这个房间,当加工完毕之后,先进去的东西就出栈,好空出房子来继续干别的事情,
这个例子没有考虑一些具体的情节,比如有些原料像静态变量就放在方法区,这是些例外规则,但是大体过程是对的,细节自己加强。
至于你说的其中Person的static方法被加载到方法区后,为什么非静态的方法接着被加载了,它就应该接着被加载吗?
主函数运行时,就把该类中所有成员都加载到相应内存中,至于具体精确的加载顺序,那就看你的代码顺序了。
不是说用到哪个方法才加载哪个方法,是用到哪个方法,就调用哪个方法。加载和调用是不一样的。注意理解,加载是从没有到有,调用时原来有再拿过来用。
java注意理解思想。 |