类的第四个成员--代码块(初始化块)

版权声明:此文为本人所写,严禁版权侵占行为。如需转载请注明出处。 https://blog.csdn.net/Abby_lxf/article/details/88960153

类的成员:属性,方法,构造器,初始化块

初始化块

一、静态初始化块(格式:static{})

1.代码块如果有修饰的话,那么只能使用static
2.基本要求
     1)里面可以有输出语句
     2)随着类的加载而加载,而且只被加载一次
     3)多个静态代码块之间按照顺序结构执行
     4)静态代码块的执行要早于非静态代码块的执行
     5)静态的代码块中只能调用静态的结构(类属性和类方法)

public class YesStatic{
	public static void main(String[] args) {
		Static_y s1 = new Static_y();
		System.out.println(s1);
		
		System.out.println();
		
		Static_y s2 = new Static_y();
		System.out.println(s2);
		
	}
}
class Static_y{
		private int id = 1003;
		private String name;
		private static String desc;
		
		static{
			System.out.println("我是第1个静态初始块");
		}
		static{
			setDesc("小明");
			System.out.println("我是第2个静态初始块");
		}
		
		public Static_y() {
			super();
			System.out.println("我是这个类的空参的构造器");
		}
		public Static_y(int id, String name) {
			super();
			this.id = id;
			this.name = name;
		}
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		@Override
		public String toString() {
			return "Static_y [id=" + id + ", name=" + name + "]";
		}
		public static String getDesc() {
			return desc;
		}
		public static void setDesc(String desc) {
			Static_y.desc = desc;
		}
}

运行结果:

二、非静态初始化块(格式{属性赋值等操作})

基本要求

1)可以对类的属性(静态 & 非静态)进行初始化操作,同时也可以调用本类声明的方法(静态  & 非静态)
2)里面可以有输出语句
3)一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行
4)每创建一个类的对象,非静态代码块就会加载一次
5)非静态代码块的执行中构造器总是晚于初始化块的操作
6)非静态的代码块可以调用静态的属性,方法

public class NoStatic {
	public static void main(String[] args) {
		Static s1 = new Static();
		System.out.println(s1);
		
		System.out.println();
		
		Static s2 = new Static();
		System.out.println(s2);
		
	}
}
class Static{
	private int id = 1003;
	private String name;
	public static String desc;
	//初始化块
	{
		id = 2309;
		name = "lily";
		desc = "xiaozhu";
		System.out.println("我是第一个非静态初始块");
	}
	{
		id = 2345;
		name = "abby";
		System.out.println("我是第二个非静态初始块");
	}
	
	public Static() {
		super();
		System.out.println("我是这个类的空参的构造器");
	}
	public Static(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Static [id=" + id + ", name=" + name + "]";
	}
}

运行结果:

典型实例:(静态非静态相结合)

package day10.codelump;

public class ExceCodeLump {
	public static void main(String[] args) {
		new Leaf();
	}

}
class Root{
	static {
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root() {
		System.out.println("Root的无参构造器");
	}
}
class Mid extends Root{
	static {
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid() {
		System.out.println("Mid的无参构造器");
	}
	public Mid(String msg) {
		this();
		System.out.println("Mid的有参数构造器,其参数值:" + msg);
	}
}
class Leaf extends Mid{
	static {
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}
	public Leaf() {
		System.out.println("Leaf的无参构造器");
	}
}

运行结果:

猜你喜欢

转载自blog.csdn.net/Abby_lxf/article/details/88960153