黑马程序员技术交流社区

标题: 关于方法区的一个小问题 [打印本页]

作者: 小黑子    时间: 2014-7-31 16:30
标题: 关于方法区的一个小问题
本帖最后由 小黑子 于 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, 下载次数: 41)

7_方法区问题.png

作者: masai158    时间: 2014-7-31 16:58
那视频不记得。。
speak方法是 Person 的方法吧。
当创建对象以后。 方法区就会有 speak方法。下面的懂的回答
作者: 李奇s    时间: 2014-7-31 17:22
说明speak被调用了 构造的时候就被调用了
方法区就是静态区
作者: 小黑子    时间: 2014-7-31 20:13
李奇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()也不是静态方法
不知道你说的   构造的时候就被调用了,具体是个啥意思?
是只要创建对象,类中的所有方法,不论静态还是非静态,都要加载到方法区么?
作者: 小黑子    时间: 2014-8-1 13:22
求大神解答呀%%%%%%
作者: 小黑子    时间: 2014-8-1 13:24
顶顶顶,求大神&&&
作者: rekirt    时间: 2014-8-1 13:47
方法区:静态,非静态,静态随类加载,非静态随对象创建加载,无论你使用与否,大概这个意思吧,,多看几遍视频自然就明白了,
作者: 南柯一梦    时间: 2014-8-1 14:22
speak()方法属于实力变量,在对象初始化时随着对象的创建而加载进内存
作者: 桂何钢    时间: 2014-8-1 14:27
同问啊,坐等大神回答!
作者: 小黑子    时间: 2014-8-1 17:05
南柯一梦 发表于 2014-8-1 14:22
speak()方法属于实力变量,在对象初始化时随着对象的创建而加载进内存

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

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

终于看明白了,谢谢哈~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2