A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史政法 中级黑马   /  2013-5-25 12:05  /  2099 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请详细介绍下方法区,,,以及下列这个问题:
  1. 这三句话在内存中是怎样运行的,方法加载到哪里?是Fu类的方法区中,还是Fu类和Zi类的方法区中各有一份?然后调用方法去哪里调用???内存中调用的过程是什么样的?

  2. class PersonFu
  3. {
  4.         public boolean equals (PersonFu p)
  5.         {
  6.                 return (this == p);
  7.         }
  8. }

  9. class PersonZi extends PersonFu
  10. {
  11. }

  12. class Demo
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 PersonZi pz1 = new PersonZi();
  17.                 PersonZi pz2 = new PersonZi();
  18.                 System.out.println(pz1.equals(pz2));
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

5 个回复

正序浏览
有的资料上翻译是方法区。

也有的地方翻译为 静态区或者代码区。

这个我个人感觉翻译为静态区更为合适。方法的调用会使得方法进栈。完成操作后进行弹栈。

                内存的划分:
                                |--寄存器
                                |--本地方法区
                                |--方法区
                                        存储静态变量(类变量)和方法
                                |--栈内存
                                        存储的都是局部变量
                                |--堆内存
                注-->注-->        存储的是对象(数组也是Object对象)       
                                        |---堆里边的变量在创建的时候都会默认初始化
                                                boolean初始化为false
                                                int类型初始化为0
                                        |---堆内存中的对象使用过,        就会变成垃圾。
                                        JVM的垃圾回收机制会不定时启动,回收堆内存的垃圾
                                        |---数组角标越界,编译不会出错,运行出错。
                                                当引用没有任何实体指向时,会发生空指针异常。
               

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
PersonZi pz1 = new PersonZi();
首先main进栈,当执行到上面那句话时,main方法中开辟一个空间Pz1,然后new PersonZi()的执行就在堆内存中创建了一个对象并把地址值赋给了Pz1.第二句同上,当执行到第三句中的pz1.equals(pz2)时,equals()方法进栈,因为它们是两个不同的对象,所以地址不同,结果输出的是false!
回复 使用道具 举报
本帖最后由 薛淑凯 于 2013-5-25 15:06 编辑

我觉得既然父类的方法既然可以在子类中用this调用,应该在方法区子类中应该也有这个方法,前提是子类没有复写。查了查,有些人说用this调用时候如果本类中没有就会去父类中找,这样的话就刚好相反了。不明白了,等待明白人
回复 使用道具 举报
等高手。。。
回复 使用道具 举报
待高手解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马