因为普通成员变量相比构造方法不管顺序优先加载
成都创新互联致力于互联网网站建设与网站营销,提供成都网站制作、做网站、网站开发、seo优化、网站排名、互联网营销、小程序开发、公众号商城、等建站开发,成都创新互联网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。
java 初始化顺序:
静态成员变量静态初始化块普通成员变量普通的初始化块构造方法(自动初始化时机在调用任何方法之前(构造方法,成员方法))
在创建新的对象时,也就是new一个对象时,会开始初始化这个对象,在初始化这个对象时,会找到对应的类,如果类中有static的静态方法,静态成员变量,普通变量。。。等,会按照这个顺序执行(即按照这个顺序分配内容空间,不管他们的位置在哪里,如果是同类型,则按照上下顺序执行。)
嗯,是的,静态代码块只会加载一次,因为在类加载器进行类加载的时候就已经把它放到内存中了。看如下代码:
public class StaticDemo {
static{
System.out.println("Top");
}
public static void main(String[] args) {//迟于static块
System.out.println("main方法");
}
static{ //直接加载 优先于main方法
System.out.println("Bottom");
}
}
上面这段代码将会依次输出:Top、Bottom、main方法
记住 3 条原则:
1、父类优先于子类
2、属性优先于代码块优先于构造方法
3、静态优先于非静态
因此,类加载顺序为:
父类静态变量-父类静态语句块-子类静态变量-子类静态语句块-父类普通成员变量-父类动态语句块-父类构造器-子类普通成员变量-子类动态语句块-子类构造器
顺序执行,就是正常情况下
选择执行(分支),就是用if else...可以使用多次,还有个switch case
循环执行,常用的用for循环,while循环,do while循环
就我理解题意好像就这三种
先说执行顺序:我们在new一个对象时,如果类还没加载,就需要先将类加载到内存,此时就会执行静态代码块,在创建对象时,是先执行代码块,然后执行构造器。所以静态代码块、代码块、构造器的执行顺序是:静态代码块→代码块→构造器。
再说作用:静态代码块是用于初始化类的(在加载类时执行,只执行一次),代码块是用于初始化对象的(在创建对象时执行,每次创建对象时都执行),构造器是用于创建对象的。