显示的静态初始化和非静态实例初始化

看了think in java,有一章提到了静态以及一篇非静态的初始化。心血来潮过一遍。

静态初始化,大家都熟悉。

比如这样一个例子。

package com.tudou.t1;

public class StaticTest {
	public static void main(String[] args) {
		System.out.println("main");
		Cups.cup1.print();//1
		//Cups cups=new Cups();//2
	}
}

class Cup {
	Cup(int i) {
		System.out.println("cup:"+i);
	}

	void print() {
		System.out.println("print");
	}
}

class Cups {
	static Cup cup1;
	static Cup cup2;
	static {
		cup1 = new Cup(1);
		cup2 = new Cup(2);
	}

	Cups() {
		System.out.println("cups...");
	}
}

不管你是注释1还是注释2处的代码,控制台都会打印:

main
cup:1
cup:2
以上3句。说明无论你是new还是访问一个对象的方法,它都会调用一次static变量。而且仅此一次。static作用的是全局的域。


而非静态实例化,其实就是去掉static的代码块。用{}包起来的代码块。

package com.tudou.t1;

public class ConstructorTest {
	public static void main(String[] args) {
		System.out.println("第1台电脑:");
		new Computer();
		System.out.println("第2台电脑:");
		new Computer(2);
	}
}

class Computer {
	public Computer() {
		System.out.println("computer");
	};

	public Computer(int i) {
		System.out.println("computer" + i);
	};
	Cpu c1;
	Cpu c2;
	{
		c1 = new Cpu("INTEL");
		c2 = new Cpu("AMD");
	}
}

class Cpu {
	String cpuname;;
	public Cpu(String cpuname) {
		this.cpuname=cpuname;
		System.out.println("cpu:" + cpuname);
	}
}

以上例子说明,无论你是调用有参的Cumputer,还是无参的Cumputer,Cpu都会初始化。这样你就不必在每个初始化中调用Cpu的初始化了。他使得无论你在调用哪种构造器时,某些操作都是必须发生的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值