静态资源是类初始化的时候加载的,非静态资源是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();
}
}
执行顺序大致如下:
先执行静态的,再执行非静态的;
静态中:
先执行静态变量,再执行静态代码块;
先执行父类静态,再执行子类静态;
非静态中:
先执行非静态变量,再执行非静态代码块,再执行构造器
先执行父类,再执行子类
实时内容请关注微信公众号,公众号与博客同时更新:程序员星星