面试之Java代码的执行顺序

面试之Java代码的执行顺序

Java代码的执行顺序

静态代码块 —> main方法 —> 普通代码块 —> 构造方法 —> 普通方法

注意:静态代码块随着类的加载而执行,而且只执行一次,因为static代码块只在类加载时执行,类是用类加载器来读取的,类加载器是带有一个缓存区的,它会把读取到的类缓存起来,所以在一次虚拟机运行期间,一个类只会被加载一次,这样的话,静态代码块只会运行一次.

下面看一个示例:

public class test2 {
    static {
        System.out.println("静态代码块");
    };

    {
        System.out.println("普通代码块");
    };

    public test2() {
        System.out.println("构造方法");
    }

    public void getVal(String value) {
        System.out.println("普通方法");
    }

    public static void main(String[] args) {
        System.out.println("main方法");
        test2 test = new test2();
        test.getVal("name");
    }
}

输出:

静态代码块
main方法
普通代码块
构造方法
普通方法

面试官会一般会问什么?

有一个子类A继承了父类B,并重写了父类中的普通方法,在子类中执行重写后的方法,代码的执行顺序是什么?

class test4 {
    static {
        System.out.println("父类静态代码块");
    };

    {
        System.out.println("父类普通代码块");
    };

    public test4() {
        System.out.println("父类构造方法");
    }

    public void getVal(String value) {
        System.out.println("父类普通方法");
    }
}

class test5 extends test4{
    static {
        System.out.println("子类静态代码块");
    };

    {
        System.out.println("子类普通代码块");
    };

    public test5() {
        System.out.println("子类构造方法");
    }

    @Override
    public void getVal(String value) {
        System.out.println("子类普通方法");
    }

    public static void main(String[] args) {
        System.out.println("子类main方法");
        test4 test5 = new test5();
        test5.getVal("name");
    }
}

输出:

父类静态代码块
子类静态代码块
子类main方法
父类普通代码块
父类构造方法
子类普通代码块
子类构造方法
子类普通方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值