java代码在内存后续(static)

前言

如果看这篇时候看不懂,可以先看BZ前面的一篇文章,请点击这里

内存

堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
为了更清楚地搞明白发生在运行时数据区里的黑幕,我们来准备2个小道具(2个非常简单的小程序)。
BZ发现了一篇博文对堆、栈、方法区有很好的解释点击跳转

static细节

类中

1.静态是随着类的加载就加载了,也是随着类的消失而消失了。
2.静态优于对象存在,被对象共享。
3.因为静态先存于内存中无法访问后来的对象的中的数据,所以
静态无法访问非静态。而且内部无法书写this.因为这时对象
有可能不存在,this 没有任何指向。

成员变量和静态变量

静态变量和成员变量的区别
1.所属范围不同。、
静态变量所属于类,成员变量所属对象。
静态变量也称为:类变量:成员变量也称为实例变量

2.调用不同。
静态变量可以被对象和类调用(一般都用类名调用)
成员变量只能被对象调用。
3.加载时期不同
静态变量随着类的加载而加载。
成员变量随着对象的加载而加载。
4.内存存储区域不同。
静态变量存储在方法区(数据共享区)中。
成员变量存储在堆内存中

了解内存,接下理我们就讲道理怎么个执行过程

class Circle{
private double radius;
pirvate static double pi = 3.14;
Cricle (double radius){
this.radius = radius;
}
double getArea(){
return radius*radius*pi;
}
static void show(){
System.out.println(“circle show run..”+pi);
}
}
class CircleDemo{
public static void main(String[] args){
Cricle c= new Circle(4);
c.getArea();
Circle.show();
}
}

运行命令

javac CircleDemo.java
java CircleDemo

  1. 当运行java CricleDemo时,就开始加载类
    加载到方法区(静态区),class CircleDemo
    class CircleDemo{
    CircleDemo{} //构造方法
    }
    当加载到有静态方法和变量时
    就又在方法区(数据共享区、静态区)创建了一个static空间
    CircleDemo{
    main(String[] args){}
    }
  2. 执行主函数(main),
    执行主函数(main),
    里面有new Circle(4);
    再次先加载class Circle(有static的话,同上)
    new 开辟空间,里面有 radius。(没有pi)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值