static成员在JVM中的存储

1.这节是演示了为什么static修饰的字段/方法,创建该类下的所有对象可以共享的以及,证明直接使用类名来调用static成员的

package com.JAVABASIS6;
//创建人类这个类
class PersonStatic{
String name; //年龄
int age; //性别
//不属于某个对象,属于人类
static int totalNum = 5;
PersonStatic(String n,int a){
name = n;
age =a;
totalNum ++;
}

void die(){
totalNum –;
System.out.println(“去世”);
}
//只有人类才有毁灭,毁灭这个行为不属于某个人
static void destory(){
totalNum =0;
System.out.println(“人类毁灭”);
}
}
public class StaticDemo1 {
public static void main(String[] args){
System.out.println(PersonStatic.totalNum); //最开始totalNum输出为5
PersonStatic p1 = new PersonStatic(“will”,17);
System.out.println(p1.totalNum);//totalNum输出为6,使用p1.totalNum没错,但是会报感叹号,The static field PersonStatic.totalNum should be accessed in a static way;如果使用PersonStatic.totalNum就是真正正确的
PersonStatic p2 = new PersonStatic(“will”,17);
System.out.println(PersonStatic.totalNum);//totalNum输出为7
p2.die();
System.out.println(PersonStatic.totalNum); //输出为”去世,6”totalNum输出为6,
System.out.println(p2.totalNum);//totalNum输出为6,且通过对象p1和p2的调用可以发现,totalNum这个字段,是共享,每次调用后都会在前一次调用的结果再运算的。
p1.destory();//真正正确应该写成PersonStatic.destory,直接使用类名访问static成员
System.out.println(PersonStatic.totalNum); //输出为”人类毁灭,0”
}
}
//通过Xlad反编译工具,对StaticDemo1.class进行反编译得出的:如果没有使用类名.方法/字段,编译器会自行做优化处理,也从侧面证明是直接使用类名访问static成员
/**
package com.JAVABASIS6;

import java.io.PrintStream;

// Referenced classes of package com.JAVABASIS6:
// PersonStatic

public class StaticDemo1
{

public StaticDemo1()
{
}

public static void main(String args[])
{
System.out.println(PersonStatic.totalNum);
PersonStatic p1 = new PersonStatic(“will”, 17);
//原先是这样的,System.out.println(p1.totalNum);
System.out.println(PersonStatic.totalNum);
PersonStatic p2 = new PersonStatic(“will”, 17);
//原先是这样的System.out.println(p2.totalNum);
System.out.println(PersonStatic.totalNum);
//原先是这样的
PersonStatic.destory();
System.out.println(PersonStatic.totalNum);
}
}
*/
“`
2.内存分析
1.首先创建的totalNum字段是放在方法区,java首先加载方法区里面的(当需要用到的类就会在方法区加载),static创建的字段就放在这里,所以这就表明“随着类的加载而加载”的原因

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值