静态块,构造块,构造函数以及静态块调用构造对象的执行次序
静态块
- 格式:
static
{
静态代码块中的语句;
}
- 特点:
随着类的加载而执行,只执行一次,并优先于主函数用于给类进行初始化
构造块
- 格式:
{
构造代码块中的语句;
}
- 作用:
给对象进行初始化,对象一建立就立即运行,而且优先于构造函数运行。 - 与构造函数的区别:
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象进行初始化。 - 构造代码块中定义的是不同对象共性的初始化内容
构造函数
- 构造函数的名字应与类名相同
- 对象一建立就会调用与之对应的构造函数
- 造函数可以用于给对象进行初始化
- 构造函数是在对象一建立就运行,给对象初始化,而一般方法是对象调用才执行,给对象添加对象具备的功能
- 一个对象建立,构造函数只运行一次,而一般函数可以被对象多次调用
执行次序
- 执行次序存在先后顺序,除静态代码块外,按语句在程序中的先后顺序执行
- 先执行静态代码块,如果一个程序中有多个静态代码块,仅执行一个,下次再用对象调用在执行下一个
- 队形对象调用后,开始执行构造代码块,按构造代码块在程序中的先后顺序执行,直到全部构造代码块执行完
- 构造代码块执行完按语句在程序中的先后顺序执行
- 执行下一个静态代码块,构造代码块再全部执行一遍,没有静态代码块后,对象调用结束,进行下一个对象调用
- 构造代码块再按顺序全部执行一遍,构造代码块执行完按语句在程序中的先后顺序执行。
例子
- 源代码
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结束");
}
}
- 结果: