Java代码执行顺序

 

package test;

public class Animal {
    private int i = test();
    private static int j = method();

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

    Animal() {
        System.out.print("b");
    }

    {
        System.out.print("c");
    }

    public int test() {
        System.out.print("d");
        return 1;
    }

    public static int method() {
        System.out.print("e");
        return 1;
    }
}

 

package test;

public class Dog extends Animal {

    private int i = test();

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

    private static int j = method();

    {
        System.out.print("h");
    }

    Dog() {
        System.out.print("g");
    }

    public int test() {
        System.out.print("i");
        return 1;
    }

    public static int method() {
        System.out.print("j");
        return 1;
    }

    public static void main(String[] args) {
        // 1. 父类静态变量显式赋值、父类静态代码块(按定义顺序)
        // 2. 子类静态变量显式赋值、子类静态代码块(按定义顺序)
        // 3. 父类非静态变量显式赋值(父类实例成员变量)、父类非静态代码块(按定义顺序)
        // 4. 父类构造函数
        // 5. 子类非静态变量(子类实例成员变量)、子类非静态代码块(按定义顺序)
        // 6. 子类构造函数。
        Dog dog = new Dog();   //eafjicbhig            
        System.out.println();
        Dog dog1 = new Dog(); //icbhig
    }
}

 

--------------------------------------------------------------------

引用类的final静态基本类型字段不会引发类初始化,但如果是引用final类型对象常量,则会引发类初始化

import java.util.Date;

public class CTest {
    static class A {
        public static final int a = 1;
        public static final Date b = new Date();
        public static int c = 2;

        static {
            System.out.println("init Class A");
        }
    }

    public static void main(String[] args) {
        System.out.println("A.a=" + A.a);
        System.out.println("A.b=" + A.b);
        System.out.println("A.c=" + A.c);
    }
}

结果

A.a=1
init Class A
A.b=Mon Aug 02 16:45:22 CST 2021
A.c=2

 

 

public class Test {

    private static Test obj = new Test();
    private static int counter1 = 0;

    public Test() {
        System.out.println("2222222");
        counter1++;
    }

    public static Test getInstance() {
        System.out.println("1111111");
        return obj;
    }

    public static void main(String[] args) {
        Test obj = Test.getInstance();
        System.out.println(obj.counter1);
    }
}

2222222
1111111
0

posted @ 2021-08-02 16:03  牧 天  阅读(63)  评论(0)    收藏  举报