static详谈

Static

静态代码块:

static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

静态成员变量:

静态成员变量对所有对象所共享的,在内存中只有一个副本。只初始化一次。

静态方法:

静态方法中只能调用静态方法和静态的成员变量 ,在静态方法中不能使用this关键字,因为它是不需要构造对象就能直接访问的,而this表示的是一个对象。

实例:

package cn.com.net;

public class Z extends X{
    Y y=new Y();
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("--start main-----");
        new Z();
        System.out.println("--end main-----");
    }
Z(){
    System.out.println("Z");
}
{
    System.out.println("方法Z");
}
static{
    System.out.println("staticZ");
}
}
class X{
    X(){
        System.out.println("X");
    }
    
    {
        System.out.println("方法X");
    }
    static{
        System.out.println("staticX");
    }
    Y y=new Y();
}
class Y{
    
    Y(){
        System.out.println("Y");
    }
    {
        System.out.println("方法Y");
    }
    static{
        System.out.println("staticY");
    }
}

运行结果:

staticX
staticZ
--start main-----
方法X
staticY
方法Y
Y
X
方法Y
Y
方法Z
Z
--end main-----

 由结果分析可知在运行main方法后,将要加载类Z,后发现继承了X就先去加载X,静态代码块先被加载,然后装载Z,Z的静态代码块也被加载,接着按顺序初始化成员,最后运行构造函数。先父后子,先static,成员变量从上到下,最后构造函数。

原文地址:https://www.cnblogs.com/jing58/p/6001109.html