类初始化和实例初始化面试题

Posted lisin-lee-cooper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类初始化和实例初始化面试题相关的知识,希望对你有一定的参考价值。

输出程序打印顺序

public class Father 
    private int a = testA();

    private static int b = testB();

    static 
        System.out.println("(1)");
    

    Father() 
        System.out.println("(2)");
    

    
        System.out.println("(3)");
    

    private static int testB() 
        System.out.println("(4)");
        return 0;
    

    public int testA() 
        System.out.println("(5)");
        return 0;
    

public class Son extends Father 

    private int a = testA();

    private static int b = testB();

    static 
        System.out.println("(6)");
    

    Son() 
        System.out.println("(7)");
    

    
        System.out.println("(8)");
    

    private static int testB() 
        System.out.println("(9)");
        return 0;
    

    public int testA() 
        System.out.println("(10)");
        return 0;
    



1.类初始化过程

1一个类要创建实例需要先加载初始化改类,main方法所在的类需要先加载和初始化;
2一个字类需要初始化并先初始化父类;
3一个类初始化就是执行《clinit》()方法:
《clinit》()方法由静态类变量显示赋值代码和静态代码块组成,
《clinit》()方法并向上至下按照顺序执行,
《clinit》()方法只执行一次。


    public static void main(String[] args) 
		//执行main方法,初始化类,不初始化实例, (4) (1) (9) (6)
    

2.实例初始化过程

执行()方法:
1《init》() 方法可能重载有多个,有几个构造器就有几个《init》() 方法;
2《init》) 方法由非静态实例变量显示赋值代码和非静态代码块,对应构造器组成;
3非静态实例变量显示赋值代码和非静态代码块代码从上到下顺序执行,构造器代码最后执行;
4每次创建实例对象,调用对应的构造器,执行对应的《init》() 方法;
5子类的构造器一定会调用父类的构造器;

public static void main(String[] args) 
        Father father = new Son();
        father = new Son();
        执行main方法,初始化类,初始化实例, (4) (1) (9) (6)(10)(3) (2) (10) (8) (7) (10)(3) (2) (10) (8) (7)
    
    

3.方法重写

1不可被重写方法:
final
static
private
2对象的多态性:
子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码;
非静态方法默认的调用对象是this;
this对象在构造器或者说()方法中就是正在创建的对象。

以上是关于类初始化和实例初始化面试题的主要内容,如果未能解决你的问题,请参考以下文章

有关java类对象初始化的话题,从一道面试题切入

java面试题 单例设计模式

java面试题jvm字节码的加载与卸载

收藏|每天十道java面试题

VUE基础面试题(3)

JAVA面试题 浅析Java中的static关键字