个人总结面试题目(2019年8月待更新)

1.java基础题目

1.1类的加载顺序题目

  • 单个类
package com.newbe.t2;
/*
 * 测试单个类的执行顺序(静态代码块,非静态代码块,静态成员,成员变量,构造函数)
 * 总结单个类的执行顺序:
 * 1.先初始化静态成员变量(按照静态成员变量的顺序执行)
 * 2.执行静态代码块,只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。
 * 3.执行mian方法(按照一般顺序执行)
 * 4.初始化成员变量
 * 5.非静态代码块
 * 6.执行构造函数
 * 7.回到main方法,执行main方法其他的语句
 * 简单来说:
 *         静态变量 > 静态初始块 > main方法(按顺序执行) > 成员变量 > 非静态初始块 > 构造器
 */
public class ClassInitOrderTest {
    //静态变量
    public static String staticField = "static field";//1.先执行静态成员变量的初始化
    //静态代码块
    static {                            //2.执行静态代码块
        System.out.println(staticField);
        System.out.println("static block");
    }
    //成员变量
    private String field = "member field";//4.初始化成员变量,
    //普通代码块
    {                                    //5.执行非静态代码块
        System.out.println(field);
        System.out.println("non-static block");
    }
    //构造函数
    public ClassInitOrderTest() {        //6.执行构造方法
        System.out.println("constructor");
    }
    //main方法
    public static void main(String[] args) {
        System.out.println("start---------");//3.执行完静态代码块后,执行mian方法
        new ClassInitOrderTest();//4.执行实例化
       //new ClassInitOrderTest();
        System.out.println("end---------");//7.执行完构造方法回到正常的执行顺序结束
    }
}
/*
 只执行一个 new ClassInitOrderTest()结果:
static field
static block
start---------
member field
non-static block
constructor
end---------
*/

/*
执行两个 new ClassInitOrderTest()结果:
static block
start---------
member field
non-static block
constructor
member field
non-static block
constructor
end---------
*/

猜你喜欢

转载自www.cnblogs.com/fby698/p/11335496.html