Java中静态块、代码块、构造方法和多态继承几种情况代码执行顺序

1.单个类中代码执行循序

   public class CClass{
    int i = 3;
    int j = 0;
    {
        System.out.println("C0");
    }
    CClass(){
        System.out.println("C1");
    }

void out() {
        System.out.println(i+"  "+j);
    }
    static{
        System.out.println("C2");
    }
    {
        System.out.println("C3");
    }
}

public static void main(String[] args) {
        FClass s = new CClass();
        s.out();
        System.out.println(s.i+"  "+s.j);
    }

结果:C2 、 C0  、C3 、C1、3  0

static静态代码块-->代码块-->构造方法-->普通方法

2.多个类继承情况下执行顺序

abstract class BaseClass {
            int i;
            int j;
            public BaseClass() {
                System.out.println("B0");
            }
            abstract void out();
        }
     
     class FClass extends BaseClass{
        int i = 0;
        int j = 3;
        FClass(){
            System.out.println("F0");
        }
        @Override
        void out() {
            System.out.println(i+"  "+j);
        }
        static{
            System.out.println("F1");
        }
        {
            System.out.println("F2");
        }
     }
     
     class CClass extends FClass{
         int i = 3;
            int j = 0;
            {
                System.out.println("C0");
            }
            CClass(){
                System.out.println("C1");
            }
            @Override
            void out() {
                System.out.println(i+"  "+j);
            }
            static{
                System.out.println("C2");
            }
            {
                System.out.println("C3");
            }
     }
    public static void main(String[] args) {
        FClass s = new CClass();
        s.out();
        System.out.println(s.i+"  "+s.j);
    }

执行顺序:

F1
C2
B0
F2
F0
C0
C3
C1
3  0
0  3

1.首先加载static静态块,先加载父类再加载子类,先FClass-->CClass。

2.下面也是按类继承顺序,先加载父类再子类,这个顺序很好理解,没有父哪有子,所以先加载终极父类,再依次向下加载,类中执行顺序和上面一样,static静态块都已经先加载了:代码块-->构造方法-->普通方法。

3.s.out()重写了父类的方法,所以会执行子类方法

4.s.i和s.j子类覆盖了改属性,但是父类仍引用旧属性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值