3
回答
如何理解 java 共享成员方法
华为云实践训练营,热门技术免费实践!>>>   
成员方法和static方法有哪些区别呢?
举报
Mercy_丶
发帖于1年前 3回/222阅
共有3个答案 最后回答: 1年前

成员方法:其属于对象,也就是不同对象会有不同的形态表示,而方法也是对象的形态表示中的一种,所以说如果你有一个类的某种行为与形态(对象)无关,那么你就应该让它成为static的,同样静态的方法 你无法Override

往深层次的讲JVM在加载类的时候,每个方法都有固定的指针去指向它,而如果是对象的Method,那么实际会指向一个virtual method table,其实就是你类的继承结构层次,而如果是static的方法,是直接指向一个方法的code的,所以性能会稍微高点(相对),所以建议如果是与形态(不同对象表现的形式可能有差异)无关的情况下,尽可能使它变成static方法。。


--- 共有 2 条评论 ---
Ambitor回复 @Mercy_丶 : 方法是在方法区的,只有一份,只是如果你是有继承的话 这就是个链表的结构了。所以成员的要找,我建议现在不要理解的这么深,因为你可能周边的一些概念没有理解。比如方法是怎么在栈上执行的、等等。 共享成员方法 就是多个相同形态的对象使用一个方法区的代码? 1年前 回复
Mercy_丶那么如何理解共享成员方法呢? 是不是说一个类的多个实例化对象的共享成员方法,也就是说多个对象只为成员方法分配唯一的共享的内存呢? 1年前 回复
成员方法需要先实例化成员才能用,表示成员具有的行为,比如 人->吃饭 ,static方法不需要先实例化就可以用,不属于某一个成员的。
--- 共有 3 条评论 ---
Mercy_丶回复 @yongsky : 抱歉,我刚刚写错了,不是共享成员变量,是成员方法。 我说的共享的意思并不是说他不是private或public,而是说是不是只为一个类的多个实例化对象的成员方法分配一个共享的内存? 1年前 回复
蓝天bluesky回复 @Mercy_丶 : 共享的就是别的类可以访问修改,私有是给自己用的,共享的别人也可以用。 1年前 回复
Mercy_丶那么共享成员变量又该怎么理解呢? 1年前 回复
JVM内存管理是这样的:栈,堆,永久带。永久带存放的是 类的元数据,也就是类的结构信息,其中包括一个叫“方法区”的部分,静态成员和方法都在这个区域。你new的对象,实际上都是根据你永久带的类元数据生成的,永久带的数据也就不是属于某个特定的对象,而是属于所有对象,这也就是网上说的“成员变量属于对象而静态变量属于类”的原因。 区别也就在这里了。
顶部