java 类的成员之四 初始化代码块(代码块)的使用

版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/83352293

1.java类的成员有四个

  1. 属性
    属性的赋值顺序:
    1.默认的初始化
    2.显示的初始化或非静态初始化代码块(此处两结构按顺序执行)
    3.构造器
    4.通过对象的方法来对相应的属性进行修改
  2. 方法
  3. 构造器
  4. 代码块(这里重点讲代码块,其余可以参考我的其他博客)
    代码块如果有修饰的话,只能用static

2.非static(非静态)代码块(初始化块)的使用

  1. 可以有输出语句
  2. 可以类的属性、类的声明进行初始化操作
  3. 可以调用静态的方法或者变量
  4. 若有多个非静态代码块,执行顺序为从上到下的顺序依次执行
  5. 每次创建对象的时候,都会执行依次
  6. 先于构造器执行
  7. dome
public class TestOrder {
	public static void main(String[] args) {
		Order o1 = new Order();
		System.out.println(o1);//Order [orderId=10, orderName=AA]
		System.out.println("==============");
		Order o2= new Order();
		System.out.println(o2);
		
	}
}
class Order{	
	private String orderName = "BB";//和代码块按顺序执行
	/*非静态代码块
	 * 格式:
	 * {
	 *  作用范围
	 * }
	 */
	{
		orderId = 10;//初始化
		orderName = "AA";//初始化
		System.out.println("我是非静态代码块1");
	}
	private int orderId;
	{
		orderId = 665;//初始化
		orderName = "AA";//初始化
		System.out.println("我是非静态代码块2");
	}
	
	private int orderId = 55;//代码块按顺序执行
	
	public Order() {
		super();
		System.out.println("我是order类无参构造器");
	}

	public Order(int orderId, String orderName) {
		super();
		this.orderId = orderId;
		this.orderName = orderName;
	}
	@Override
	public String toString() {
		return "Order [orderId=" + orderId + ", orderName=" + orderName + "]";
	}
}
  1. 输出结果为:
    输出结果

3.static(静态)代码块(初始化块)的使用

  1. 可以有输出语句
  2. 可以对类的属性、类的声明进行初始化操作
  3. 不可以对非静态属性进行初始化。即:不可以调用非静态的属性和方法
  4. 若有多个静态代码块,那么执行顺序为从上到下的顺序依次执行
  5. 静态代码块的执行要先于非静态代码块
  6. 静态代码块只执行一次
  7. demo
public class TestOrder {
	public static void main(String[] args) {
		Order o1 = new Order();
		System.out.println(o1);//Order [orderId=10, orderName=AA]
		System.out.println("==============");
		Order o2= new Order();
		System.out.println(o2);
	}
}
class Order{
	private String orderName = "BB";//和代码块按顺序执行
	private static String orderDesc;
	
	//非静态代码块
	{
		orderId = 10;//初始化
		orderName = "AA";//初始化
		System.out.println("我是非静态代码块1");
		orderDesc = "我被非静态调了";
		show2();
	}
	
	//静态代码块
		static{
			orderDesc = "我是一个Order";
//			orderId = "11";
//			show1();
			show2();
			System.out.println("静态代码块2");
		}
	//静态代码块
		static{
			System.out.println("静态代码块1");
		}
	public Order() {
		super();
		System.out.println("我是order类无参构造器");
	}
	private int orderId = 55;//代码块按顺序执行
	public Order(int orderId, String orderName) {
		super();
		this.orderId = orderId;
		this.orderName = orderName;
	}
	public void show1() {
		
	}
	public static void show2() {
		
	}
}
  1. 执行结果
    执行结果

4.java初始化块面试题

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调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}	
	public Leaf(){
		//通过super调用父类中有一个字符串参数的构造器
		super("尚硅谷");
		System.out.println("执行Leaf的构造器");
	}
}
public class TestLeaf{
	public static void main(String[] args){
		new Leaf();
		System.out.println();
		new Leaf();
	}
}

输出结果为:具体分析可见上文
结果

猜你喜欢

转载自blog.csdn.net/qq_34626097/article/details/83352293