今天就跟大家聊聊有关Java 实现静态数据初始化的方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
class Bowl {
public Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f1(int marker) {
System.out.println("f1(" + marker + ")");
}
}
class Table {
static Bowl bowl = new Bowl(1);
public Table() {
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
public Cupboard() {
System.out.println("Cupboard()");
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInit {
public static void main(String[] args) {
//第三步
System.out.println("Creating new Cupboard in main");
//第四步
//因为Cupboard内的静态变量已经初始化完成,所以不再初始化(无论创建多少个对象,静态数据都是只占用一份存储区域)
//但是里边的类成员变量 bowl3 还是需要进行二次初始化的,因为你这是new对象,所以打印 Bowl(3)
//然后调用该对象的无参构造函数,打印 Cupboard()
new Cupboard();
//第五步
System.out.println("Creating new Cupboard in main");
//第六步
//和第四步一样,执行初始化,打印 Bowl(3),然后调用无参构造函数,打印 Cupboard()
new Cupboard();
//第七步
table.f2(111);
//第八步
cupboard.f3(111);
}
//Java 数据类型、对象引用 和 构造器 之间的初始化顺序 https://www.sunjs.com/article/detail/debedcef327c4872933e0b2f1ac7cb71.html
//第1步:
//先初始化静态代码块、
//Table 类中也含有静态引用变量,所以先去执行bowl引用指向的对象的创建,所以先打印 Bowl(1)
//然后该类中还有一个静态对象,所以立即去初始化这个静态对象,然后打印 Bowl(2)
//执行完成以后,正式创建对象,执行Table类的默认无参构造函数,打印 Table()
//构造函数内 又使用静态变量bowl2 调用了其对象内的方法,所以打印 f1(1)
//到此这一行代码执行的初始化全部执行完毕
static Table table = new Table();
//第2步:
//初始化 Cupboard 类,因为 Cupboard 类中也含有两个静态对象,所以依次执行 Bowl(4) 和 Bowl(5)
//在执行Cupboard构造函数之前先执行变量初始化的规则,所以 bowl3 先执行,打印 Bolw(3)
//然后执行无参构造函数,打印 Cupboard()
//到此,这行代码的初始化全部执行完毕
static Cupboard cupboard = new Cupboard();
}
执行结果:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
Creating new Cupboard in main
Bowl(3)
Cupboard()
Creating new Cupboard in main
Bowl(3)
Cupboard()
f2(111)
f3(111)
看完上述内容,你们对Java 实现静态数据初始化的方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。