java静态变量与类的加载

静态变量、类变量、静态属性:除局部变量之外的另一种变量种类。

定义位置:类里,方法外+stataic进行修饰。

1.作用域:跟着大括号(整个类的内部是有效的)

2.生命周期:伴随着类在运行中的生命周期而运行的

静态属性的初始化问题

 类的生命周期:

.java文件      经过编译      .class文件     硬盘

类的加载:计算机的体系结构决定了CPU要处理的数据必须要在内存中。意味着,把类的数据从硬盘上(以类文件作为代表)加载到内存中来。

类的卸载:把放在内存中的类数据从内存中剔除。

关于类的加载的一系列问题:

1.某个具体的类。在何时触发加载?

A.程序一启动就加载所有的类        B.某一个类被用到时触发加载

2.什么叫做一个类被用到了

        1.A.method(...)

        2.A.main(...)

        3.A.静态属性

3.静态属性的初始化语句是在何时被执行的?

在类加载的过程中就完成了静态属性的初始化

public class Test2 {
    public static int a=someMethod();
    public static int someMethod(){
        System.out.println("someMethod方法被调用了");
        return 0;
    }

    public static void main(String[] args) {
        System.out.println("main方法被调用了");
    }

someMethod方法被调用了
main方法被调用了

 

someMethod方法被调用了
main方法被调用了
main方法被调用了

执行Test3的main方法的时候,要执行Test2的notmain方法;执行notmain方法的时候要用到Test2这个类,这个类不存在,所以执行Test2的加载,重新初始化。初始化的时候会打印someMethod方法被调用了,之后再打印main方法被调用了。

4.类的加载的语法:

        1.直接赋值                static  int a =...

        2.静态代码块             static {...}

按照代码书写顺序,依次执行

静态属性的初始化:

package mjh.week.day2;

public class Test4 {
    //静态属性的默认值
    public static int a;
    public static double b;
    public static String c;
    public static boolean d;

    public static void main(String[] args) {
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }
}

0        0.0        null        false

 5.那些数据被加载了?

        1.静态属性

        2.方法   ->    语句    ->     字节码指令(绝大部分)

6.加载到了内存的哪个区域了?

JVM管理的内存区域中有栈区、方法区(method area)

故类的数据(静态属性 + 方法)被加载到了方法区。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿狼皮的小红帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值