静态块、实例块、构造函数的执行顺序:
1.先执行静态方法块
2.再执行实例方法块
3. 再执行构造函数块
同一个类下不管new多少次,该类下的静态块只运行一次(但是一次可以执行多个)
不管是new几个类,所有的类都先运行静态方法快,(执行完所有类的静态块后)再运行实例方法快,再运行构造函数
public class Kuai {
public static void main(String[] args) {
KuaiTest t = new KuaiTest();
KuaiTest t1 = new KuaiTest("名字");
KuaiTest t2 = new KuaiTest("18");
}
}
class KuaiTest{
private String name;
private int id;
public KuaiTest() {
System.out.println("构造方法");
}
public KuaiTest(String name) {
this.name = name;
System.out.println(this.name);
}
public KuaiTest(int id) {
this.id = id;
System.out.println(this.id);
}
static {
System.out.println("静态方法块1");
}
static{
System.out.println("静态方法块2");
}
{
System.out.println("实例方法块1");
}
{
System.out.println("实例方法块2");
}
}
运行结果:
一个类可以有多个静态方法块、实例块、构造函数。
public class A {
static {
System.out.println("A类的静态块");
}
public A() {
System.out.println("A类的构造函数块");
}
{
System.out.println("A类的实例方法块");
}
}
public class B extends A{
static {
System.out.println("B类的静态块");
}
public B() {
System.out.println("B类的构造函数块");
}
{
System.out.println("B类的实例方法块");
}
public static void main(String[] args) {
A a = new A();
System.out.println("--------------------");
A b = new B();
System.out.println("--------------------");
B c = new B();
}
}