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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小黑子 中级黑马   /  2014-7-31 16:30  /  1105 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小黑子 于 2014-8-3 12:04 编辑

关于毕老师在day06-08的视频中,
主函数中只有
Person p = new Person("zhangsan",20);
p.setName("lisi");
Person p1 = new Person("ahah",90);
p1.setName("qq");
在主函数中根本没有调用speak()
并且speak()也不是静态方法,
为什么speak()也会在方法区中出现???难道是每次建立类的有效对象,所有方法,不论是否用到,都要加载到方法区中呢?

7_方法区问题.png (205.55 KB, 下载次数: 5)

7_方法区问题.png

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1

查看全部评分

13 个回复

倒序浏览
那视频不记得。。
speak方法是 Person 的方法吧。
当创建对象以后。 方法区就会有 speak方法。下面的懂的回答
回复 使用道具 举报
说明speak被调用了 构造的时候就被调用了
方法区就是静态区
回复 使用道具 举报
李奇s 发表于 2014-7-31 17:22
说明speak被调用了 构造的时候就被调用了
方法区就是静态区

主函数如下
public static void main(String[] args)
{
    Person p = new Person("zhangsan",20);
    p.setName("lisi");
    Person p1 = new Person("ahah",90);
    p1.setName("qq");
}
根本没有调用speak();
而且speak()也不是静态方法
不知道你说的   构造的时候就被调用了,具体是个啥意思?
是只要创建对象,类中的所有方法,不论静态还是非静态,都要加载到方法区么?
回复 使用道具 举报
求大神解答呀%%%%%%
回复 使用道具 举报
顶顶顶,求大神&&&
回复 使用道具 举报
方法区:静态,非静态,静态随类加载,非静态随对象创建加载,无论你使用与否,大概这个意思吧,,多看几遍视频自然就明白了,
回复 使用道具 举报
speak()方法属于实力变量,在对象初始化时随着对象的创建而加载进内存
回复 使用道具 举报
同问啊,坐等大神回答!
回复 使用道具 举报
南柯一梦 发表于 2014-8-1 14:22
speak()方法属于实力变量,在对象初始化时随着对象的创建而加载进内存

那这与静态函数运行时,在内存中的活动是一样的喽?只是用Static声明后,便可用类名调用了,是不是这个样子?
回复 使用道具 举报
当类的对象被创建后,该类所有方法都会被加载到方法区,不管你用不用,但是只会加载一次。系统不会去分别你用哪些方法。如果按照你的想法,用才去加载会降低程序的效率。
回复 使用道具 举报
  系统在第一次运行程序时会将编译好的class文件导入到内存中去,导入的这个class文件是java中的所有方法和变量的,唯一的区别在于,静态变量和方法归属于类对象,实例方法和变量归属于对象,而对象呢,他必须得依靠所对应的类才能存在吧,你只有先有类你才能声明对象,那么属于你对象的方法变量也只能存在于对应的类中吧,说的更直白的就是:支持你生成一个对象并并进行的一系列活动的代码是存在于这个对象所对应的这个类中,所以才会有speak()方法也存在于方法区。不同的地方是:你调用speak方法必须依靠对象才能调用,因为这个方法是实例方法,就像人说话的风格一样,每个人都有自己说话的方式。

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很给力!

查看全部评分

回复 使用道具 举报
小黑子 发表于 2014-8-1 17:05
那这与静态函数运行时,在内存中的活动是一样的喽?只是用Static声明后,便可用类名调用了,是不是这个样 ...

静态函数是类变量,随着类的加载而存在内存,而实力成员随着对象建立而存在,静态函数优先存在于实力函数
,且静态函数生命周期要比实力函数生命周期长
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-1 19:21
系统在第一次运行程序时会将编译好的class文件导入到内存中去,导入的这个class文件是java中的所有方法和 ...

终于看明白了,谢谢哈~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马