static初始化问题

本文探讨了Java中static变量的初始化特性,指出static变量只初始化一次,并通过实例解析了在不同场景下static变量的初始化行为。建议通过逐条执行main方法来观察结果,以加深理解。static对象的存在优先于实例,且初始化后的static对象不会被重复初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人见解:static只初始化一次,后面的都是引用

package fifthChapter;

public class Bowl {
	public Bowl(int marker){
		System.out.println("Bow1("+marker+")");
	}
	void f(int marker){
		System.out.println("f("+marker+")");
	}
}

package fifthChapter;

public class Table {
	static Bowl b1 = new Bowl(1);
	Table(){
		System.out.println("Table()");
		b2.f(1);
	}
	void f2(int marker){
		System.out.println("marker("+marker+")");
	}
	static Bowl b2 = new Bowl(2);
}

package fifthChapter;

public class CupBoard {
	Bowl b3 = new Bowl(3);
	static Bowl b4 = new Bowl(4);
	CupBoard(){
		System.out.println("CupBoard()");
		b4.f(2);
	}
	void f3(int marker){
		System.out.println("f3("+marker+")");
	}
	static Bowl b5 = new Bowl(5);
}

package fifthChapter;

public class StaticDemo {
	public static void main(String[] args) {
		CupBoard.b4.f(4);	//不会执行Table b3 = new Tabel(3);
		System.out.println("Create new CupBoard() in main");
		new CupBoard();		//Table b3 = new Tabel(3)会执行
		System.out.println("\nCreate new CupBoard() in main");
		new CupBoard();
		System.out.println("\nt2之后:");
		t2.f2(1);
		System.out.println("\nt2之后:");
		t3.f3(1);
	}
	static Table t2 = new Table();			//会初始化未初始化的static对象,会执行Table b3 = new Tabel(3),会执行构造器中的内容
	static CupBoard t3 = new CupBoard();	//会初始化未初始化的static对象,会执行Table b3 = new Tabel(3),会执行构造器中的内容
}

衷心建议main中的语句一条一条运行看结果

总结:

  1. static的存在优先于对象
  2. 倒数t2和t3语句都会初始化类内部的未初始化对象,会new对象,也会执行构造器
  3. new CupBoard();会初始化类内部的未初始化对象,会new对象,也会执行构造器
  4. 单纯的类名.static对象(CupBoard.b4.f(4);)只会初始化static对象
  5. 初始化过的static对象,就不再重复初始化;如可以new CupBoard()new两次看bowl(4),bowl(5)是否出现两次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值