执行顺序是:先执行“静态代码块”,再执行“构造代码块”,最后执行“构造代码块”。静态代码块是类级别的,而构造代码块和构造方法是实例级别的,因而静态代码块先执行;又因构造代码块是独立的,必须依附载体才能运行,因而构造代码块需放到构造方法前。
本教程操作环境:windows7系统、java8版、DELL G3电脑。
构造代码块、静态代码块与构造方法是类中三种不同的代码块,那么他们到底有什么区别呢?
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次
构造代码块:类中直接用{}定义,每一次创建对象时执行。
执行顺序优先级:静态块,main(),构造块,构造方法。
class A { //构造代码块 { System.out.println("构造代码块A"); } //静态代码块 static { System.out.println("静态代码块A"); } //构造方法 public A() { System.out.println("构造方法A"); } }
为了弄清楚三者的执行顺序,我们对类 A 进行实例化,分别进行单个实例和多个实例的测试。
class Demo { public static void main(String[] args) { new A(); } }
class Demo { public static void main(String[] args) { new A(); new A(); new A(); } }
class B extends A { //构造代码块 { System.out.println("构造代码块B"); } //静态代码块 static { System.out.println("静态代码块B"); } //构造方法 public B() { System.out.println("构造方法B"); } } class Demo { public static void main(String[] args) { new B(); } }
1、在创建一个对象的过程中,三者的执行顺序是:静态代码块 --> 构造代码块 --> 构造方法;
1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值。
2.构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量。
3.构造方法:用于实例化变量。1是类级别的,2、3是实例级别的,自然1要优先23。
在就明白一点:对子类得主动使用会导致对其父类得主动使用,所以尽管实例化的是子类,但也会导致父类的初始化和实例化,且优于子类执行。
2、每创建一个对象,构造代码块和构造方法就会执行一次;而不管创建多少个对象,静态代码块仅仅只在创建第一个对象时执行一次;
3、创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;
4、创建子类对象时,子类的构造代码块在父类的构造方法后执行。
相关视频教程推荐:Java视频教程
Das obige ist der detaillierte Inhalt vonWie ist die Ausführungsreihenfolge von statischen Codeblöcken, Konstruktionscodeblöcken und Konstruktionsmethoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!