静态块,构造块,构造函数以及静态块调用构造对象的执行次序

静态块,构造块,构造函数以及静态块调用构造对象的执行次序

静态块

  1. 格式:
static
{
	静态代码块中的语句;
}
  1. 特点:
    随着类的加载而执行,只执行一次,并优先于主函数用于给类进行初始化

构造块

  1. 格式:
{
	构造代码块中的语句;
}
  1. 作用:
    给对象进行初始化,对象一建立就立即运行,而且优先于构造函数运行。
  2. 与构造函数的区别:
    构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象进行初始化。
  3. 构造代码块中定义的是不同对象共性的初始化内容

构造函数

  1. 构造函数的名字应与类名相同
  2. 对象一建立就会调用与之对应的构造函数
  3. 造函数可以用于给对象进行初始化
  4. 构造函数是在对象一建立就运行,给对象初始化,而一般方法是对象调用才执行,给对象添加对象具备的功能
  5. 一个对象建立,构造函数只运行一次,而一般函数可以被对象多次调用

执行次序

  1. 执行次序存在先后顺序,除静态代码块外,按语句在程序中的先后顺序执行
  2. 先执行静态代码块,如果一个程序中有多个静态代码块,仅执行一个,下次再用对象调用在执行下一个
  3. 队形对象调用后,开始执行构造代码块,按构造代码块在程序中的先后顺序执行,直到全部构造代码块执行完
  4. 构造代码块执行完按语句在程序中的先后顺序执行
  5. 执行下一个静态代码块,构造代码块再全部执行一遍,没有静态代码块后,对象调用结束,进行下一个对象调用
  6. 构造代码块再按顺序全部执行一遍,构造代码块执行完按语句在程序中的先后顺序执行。

例子

  1. 源代码
package com.qcby.db;

import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;

public class Employee {
	private String name = "lisi";
	{
		System.out.println("初始化1");
		name = "wangwu";
		age = 20;
	}
	private int age = 30;
	static {
		System.out.println("静态初始化1");
		System.out.println("id0:" + Employee.id);
		id = 40;
		System.out.println("id1:" + Employee.id);
		System.out.println("liuliu开始");
		Employee employee = new Employee("liuliu", 50);
		System.out.println(employee);
		System.out.println("liuliu id:" + employee.getId());
		System.out.println("liuliu结束");

	}
	private static int id = 30;

	{
		System.out.println("初始化2");
		name = "zhaosi";
		age = 40;
	}
	static {
		System.out.println("id2:" + Employee.id);
		System.out.println("静态初始化2");
		id = 80;
		System.out.println("id3:" + Employee.id);

	}

	public static int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Employee(String name, int age) {
		super();
		System.out.println("有參構造器");
		this.name = name;
		this.age = age;
	}

	public Employee() {
		super();
		System.out.println("無參構造器");
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "Employee [name=" + name + ", age=" + age + "]";
	}

}
package com.qcby.servlet;

import com.qcby.db.Employee;

public class TestDefault {
	public static void main(String[] args) {
		System.out.println("tom开始");
		Employee tom = new Employee("tom", 20);
		System.out.println(tom);
		System.out.println(tom.getId());
		System.out.println("tom结束");
		System.out.println("jouty开始");
		Employee jouty = new Employee("jouty", 19);
		System.out.println(jouty);
		System.out.println(jouty.getId());
		System.out.println("jouty结束");
		System.out.println("jerry开始");
		Employee jerry = new Employee("jerry", 19);
		System.out.println(jerry);
		System.out.println(jerry.getId());
		System.out.println("jerry结束");

	}
}

  1. 结果:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值