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

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

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

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

静态属性的初始化问题

java什么情况下使用静态常量_开发语言

 类的生命周期:

.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方法被调用了

java什么情况下使用静态常量_开发语言_02

 

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)

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