Java面向对象笔记(六)static关键字

    xiaoxiao2021-04-17  38

    一、有什么作用

    static表示静态的,存在于静态域中,用于修饰成员变量和成员函数,

    当成员变量被static修饰后,可以用类名调用(类名.静态成员)。

    二、特点

    ①随着类的加载而加载,随着类的消失而消失(生命周期最长)

    ②被所有对象所共享

    ③优先于对象存在

    ④可以直接被类名所调用

    三、和实例变量(成员变量)的区别

    ①存在位置:类变量随着类的加载而存在于方法区;实例变量随着对象的建立而存在于堆内存中。

    ②生命周期:类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失。

    三、注意事项

    ①静态方法只能访问静态成员,非静态方法既可以访问静态,又可以访问非静态。

    ②静态方法中不可以定义this,super关键字(因为静态优先于对象存在)

    四、静态代码块

    ①格式

    static

    {

    //代码块

    }

    ②注意:随着类的加载而执行,只执行一次,并优先于主函数,用于给类初始化。

    五、案例

    class StaticCodeDemo { static { System.out.println("这是StaticCodeDemo类中的静态代码块"); } public static void main(String[] args) { new StaticCode(); //类只加载一次,在new一个对象时与不会在执行static中的代码 new StaticCode(); System.out.println("OVER"); } static { System.out.println("这是StaticCodeDemo类中位于主函数下的静态代码块"); } } class StaticCode { //这是StaticCode类中的静态代码块 static { System.out.println("这是StaticCode类中的静态代码块"); } public StaticCode(){ { //这是StaticCode类中的构造代码块 System.out.println("这是StaticCode类中的构造代码块"); } System.out.println("这是StaticCode类中的构造函数"); } } 这是StaticCodeDemo类中的静态代码块 这是StaticCodeDemo类中位于主函数下的静态代码块 这是StaticCode类中的静态代码块 这是StaticCode类中的构造代码块 这是StaticCode类中的构造函数 这是StaticCode类中的构造代码块 这是StaticCode类中的构造函数 OVER

    解释:

    ①当程序运行时,先将StaticCodeDemo类加载到内存中,同时会将静态代码块加载到静态域中给StaticCodeDemo类初始化,这时就有了第一二行的结果。

    ②然后在去执行主函数,当new StaticCode()时会将StaticCode类加载到内存中,并执行里面的静态代码块给StaticCode类初始化

    这时就有了第三行的结果。

    ③执行完静态的后会去执行构造函数,执行构造函数时先执行构造代码块在执行其他的内容,这就有了第四五行的结果。

    ④当主函数中再次new StaticCode()时,StaticCode类中的静态代码块不会在加载,而只会调用构造函数给对象初始化,就有了第六七行的结果。

    ⑤主函数中执行代码输出OVER,程序结束。

    转载请注明原文地址: https://ju.6miu.com/read-673814.html

    最新回复(0)