java static修饰的变量、静态非静态代码块执行顺序

        静态资源是类初始化的时候加载的,非静态资源是new一个类的时候加载的,static不能修饰局部变量。关于static、代码块的执行顺序,面试中可能会考察。

 

    下面进行代码测试:

package com.xhx.java;

class MyClass {
    public MyClass(String name) {
        System.out.println(name + " 变量加载");
    }
}
package com.xhx.java;

class ParentClass{
        public static String parentStaticField = "父类静态变量";
        public MyClass parentField = new MyClass("父类非静态");
        public static MyClass myClass = new MyClass("父类静态");

        static {
            System.out.println("父类 静态块初始化");
        }

        {
            System.out.println("父类 非静态块初始化");
        }

        public ParentClass(){
            System.out.println("父类  构造器初始化");
        }
    }
package com.xhx.java;

public class ChildClass extends ParentClass{

        public static String subStaticField = "子类静态变量";
        public MyClass subField = new MyClass("子类非静态");
        public static MyClass myClass = new MyClass("子类静态");

        static {
            System.out.println("子类 静态块初始化");
        }

        {
            System.out.println("子类 非静态块初始化");
        }

        public ChildClass(){
            System.out.println("子类构造器初始化");
        }
    }
package com.xhx.java;

/**
 * xuhaixing
 * 2018/8/11 20:49
 **/
public class App {
    public static void main(String[] args) {
        new ChildClass();
    }
}

 

执行顺序大致如下:

    先执行静态的,再执行非静态的;

静态中:

     先执行静态变量,再执行静态代码块;

     先执行父类静态,再执行子类静态;

非静态中:

      先执行非静态变量,再执行非静态代码块,再执行构造器

      先执行父类,再执行子类

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值