2021年1月1日星期五

初始化

原文链 id="初始化顺序">初始化顺序

在类中变量定义的顺序决定了它们初始化的顺序。

public class House { // 构造器之前 Window w1 = new Window(1); House(){  System.out.println("House()");  Window window = new Window(11); } // 构造器之后 Window w2 = new Window(2); void f(){  System.out.println("f()"); } Window w3 = new Window(3); public static void main(String[] args) {  House house = new House();  house.f(); }}public class Window { public Window(int mark){  System.out.println("Window("+mark+")"); }}

执行结果

Window(1)Window(2)Window(3)House()Window(11)f()

验证类加载

public class Initable { // 非编译期常量 public static final int COUNT =new Random().nextInt(1000); static {  System.out.println("Initable初始化"); }}public class Initable1 { // 编译期常量 public static final int COUNT = 47; static {  System.out.println("Initable1初始化"); }}public class Initable2 { public static int COUNT = 56; static {  System.out.println("Initable2初始化"); }}public class Initable3 { public static int COUNT = 33; static {  System.out.println("Initable3初始化"); }}public class Initable4 { public static int COUNT = 44; static {  System.out.println("Initable4初始化"); }}结果:Initable---------------Initable初始化457Initable1---------------47Initable2---------------Initable2初始化56Initable3---------------Initable4---------------Initable4初始化

对于static final的值是一个编译期常量的话(如Initable1.COUNT),获取这个值时不需要对Initable1进行初始化就可以读取,如果用static final的值不是一个编译期常量(如Initable.COUNT),访问这个变量会强制对该类进行初始化

对于一个仅仅是static修饰的字段而不是final的,在读取这个字段之前,需要为该字段分配存储空间以及初始化该存储空间

使用.class语法不会对类进行初始化,而使用Class.forName()来产生Class引用会直接引发类的初始化

由于本身的博客百度没有收录,博客地 />






原文转载:http://www.shaoqun.com/a/504733.html

跨境电商:https://www.ikjzd.com/

zappos:https://www.ikjzd.com/w/330

韩国naver:https://www.ikjzd.com/w/1727


原文链id="初始化顺序">初始化顺序在类中变量定义的顺序决定了它们初始化的顺序。publicclassHouse{//构造器之前Windoww1=newWindow(1);House(){System.out.println("House()");Windowwindow=newWindow(11);}//构造器之后Windoww2=newWindo
taofenba:taofenba
ideal:ideal
三亚家庭旅馆 :三亚家庭旅馆
怎么从深圳宝安去白云山玩蹦极?:怎么从深圳宝安去白云山玩蹦极?
合肥春季草莓采摘地推荐:合肥春季草莓采摘地推荐

没有评论:

发表评论