2020年8月16日 静态初始化static

package com.atguigu.test03;

/*
 * 一个类初始化时会先检查它的父类是否初始化,如果父类没有初始化,那么会先初始化父类。因为一个类只要初始化一次。
 * 
 * (1)父类的初始化<clinit>()
 * ①父类的静态变量的显式赋值
 * ②父类的静态代码块
 * (2)子类的初始化<clinit>()
 * ①父类的静态变量的显式赋值
 * ②父类的静态代码块
 * 
 * 特殊:
 *      静态方法是不能被重写的
 */
public class TestClassInit {
    public static void main(String[] args) {
        /*Father f = new Father();
        System.out.println("-------------------");
        Son s = new Son();*/
        
        Son s = new Son();
        
        /*Father f = new Son();//多态引用
        System.out.println("----------------");
        f.assign();//静态方法在编译期间就确定了,不需要在运行时动态绑定
*/    }
}
class Father{
    private static String info = assign();
    static{
        System.out.println("(1)父类的静态代码块");
    }
    public static String assign(){
        System.out.println("(3)assign()方法");
        return "Father";
    }
}
class Son extends Father{
    private static String info = assign();
    static{
        System.out.println("(2)子类的静态代码块");
    }
    public static String assign(){
        System.out.println("(4)assign()方法");
        return "Son";
    }
}
原文地址:https://www.cnblogs.com/douyunpeng/p/13512228.html