Java 知识点 --- 静态代码块初始化问题

1.变量是 static final 修饰的“编译期常量”,如 public static final String c = "C";

public class Test {

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

}

class A {
    public static final String c = "C";

    static {
        System.out.print("A");
    }
}

运行结果如下:C
public class Test {

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

}
class A {
    public static final String c = "C";
    static {
        System.out.print("A");
    }
}
class B extends A {
    static {
        System.out.print("B");
    }
}

运行结果如下:C
public class Test {

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

}
class A {
    static {
        System.out.print("A");
    }
}
class B extends A {
    public static final String c = "C";
    static {
        System.out.print("B");
    }
}

运行结果如下:C

2.变量是 static final 修饰的“非编译期常量”,如 public static final String c = new String("C");

public class Test {

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

}
class A {
    public static final String c = new String("C");
    static {
        System.out.print("A");
    }
}

运行结果如下:AC
public class Test {

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

}
class A {
    public static final String c = new String("C");
    static {
        System.out.print("A");
    }
}
class B extends A {
    static {
        System.out.print("B");
    }
}

运行结果如下:AC
public class Test {

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

}
class A {
    static {
        System.out.print("A");
    }
}
class B extends A {
    public static final String c = new String("C");
    static {
        System.out.print("B");
    }
}

运行结果如下:ABC

3.变量是static 修饰,如 public static String c = "C";

public class Test {

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

}
class A {
    public static String c = "C";
    static {
        System.out.print("A");
    }
}

运行结果如下:AC
public class Test {

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

}
class A {
    public static String c = "C";
    static {
        System.out.print("A");
    }
}
class B extends A {
    static {
        System.out.print("B");
    }
}

运行结果如下:AC
public class Test {

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

}
class A {
    static {
        System.out.print("A");
    }
}
class B extends A {
    public static String c = "C";
    static {
        System.out.print("B");
    }
}

运行结果如下:ABC
发布了42 篇原创文章 · 获赞 3 · 访问量 3741

猜你喜欢

转载自blog.csdn.net/zhangting19921121/article/details/104620634