黑马程序员技术交流社区
标题:
方法区
[打印本页]
作者:
史政法
时间:
2013-5-25 12:05
标题:
方法区
请详细介绍下方法区,,,以及下列这个问题:
这三句话在内存中是怎样运行的,方法加载到哪里?是Fu类的方法区中,还是Fu类和Zi类的方法区中各有一份?然后调用方法去哪里调用???内存中调用的过程是什么样的?
class PersonFu
{
public boolean equals (PersonFu p)
{
return (this == p);
}
}
class PersonZi extends PersonFu
{
}
class Demo
{
public static void main(String[] args)
{
PersonZi pz1 = new PersonZi();
PersonZi pz2 = new PersonZi();
System.out.println(pz1.equals(pz2));
}
}
复制代码
作者:
神之梦
时间:
2013-5-25 14:56
待高手解答
作者:
逸盏清茶
时间:
2013-5-25 15:00
等高手。。。
作者:
薛淑凯
时间:
2013-5-25 15:02
本帖最后由 薛淑凯 于 2013-5-25 15:06 编辑
我觉得既然父类的方法既然可以在子类中用this调用,应该在方法区子类中应该也有这个方法,前提是子类没有复写。查了查,有些人说用this调用时候如果本类中没有就会去父类中找,这样的话就刚好相反了。不明白了,等待明白人
作者:
张龙欢
时间:
2013-5-25 15:17
PersonZi pz1 = new PersonZi();
首先main进栈,当执行到上面那句话时,main方法中开辟一个空间Pz1,然后new PersonZi()的执行就在堆内存中创建了一个对象并把地址值赋给了Pz1.第二句同上,当执行到第三句中的pz1.equals(pz2)时,equals()方法进栈,因为它们是两个不同的对象,所以地址不同,结果输出的是false!
作者:
Super_Class
时间:
2013-5-25 15:46
有的资料上翻译是方法区。
也有的地方翻译为 静态区或者代码区。
这个我个人感觉翻译为静态区更为合适。方法的调用会使得方法进栈。完成操作后进行弹栈。
内存的划分:
|--寄存器
|--本地方法区
|--方法区
存储静态变量(类变量)和方法
|--栈内存
存储的都是局部变量
|--堆内存
注-->注--> 存储的是对象(数组也是Object对象)
|---堆里边的变量在创建的时候都会默认初始化
boolean初始化为false
int类型初始化为0
|---堆内存中的对象使用过, 就会变成垃圾。
JVM的垃圾回收机制会不定时启动,回收堆内存的垃圾
|---数组角标越界,编译不会出错,运行出错。
当引用没有任何实体指向时,会发生空指针异常。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2