关于静态代码块,构造代码块,构造方法,普通代码块的一些概念和执行顺序
程序员文章站
2022-06-21 14:54:12
关于静态代码块,构造代码块,构造方法和普通代码块的执行顺序1.静态代码块:在类加载时执行,并且只执行一次,它的优先级高于其他任何代码块和构造函数。2.构造代码块:用于对象的初始化,在创建对象时调用,每次创建都会调用一次,在构造函数之前执行,它依托于构造函数,如果不实例化对象,构造代码块也不执行。3.构造函数:每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。4.普通代码块:存在于方法体中。new 一个对象的时候总是先执行构造代码,再...
关于静态代码块,构造代码块,构造方法和普通代码块的执行顺序
1.静态代码块:在类加载时执行,并且只执行一次,它的优先级高于其他任何代码块和构造函数。
2.构造代码块:用于对象的初始化,在创建对象时调用,每次创建都会调用一次,在构造函数之前执行,它依托于构造函数,如果不实例化对象,构造代码块也不执行。
3.构造函数:每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。
4.普通代码块:存在于方法体中。
new 一个对象的时候总是先执行构造代码,再执行构造函数,但是有一点需要注意构造代码不是在构造函数之前运行的,它是依托构造函数执行的。
综上,执行顺序为:
静态代码块>构造代码块>构造函数>普通代码块
请看如下代码:
public class C extends C0{
public C(){
super(100);
System.out.print(1);
}
{
System.out.print(2);
}
static{
System.out.print(3);
}
public C(int age){
this();
}
public static void main(String[] args) {
new C(100);
System.out.println();
new C(120);
}
}
class C0{
public C0(){
System.out.print(6);
}
public C0(int age){
this();
System.out.print(7);
}
static{
System.out.print(5);
}
{
System.out.print(4);
}
}
其执行结果为:5346721 46721
反编译代码为:
C0.class:
class C0 {
public C0() {
System.out.print(4);
System.out.print(6);
}
public C0(int age) {
this();
System.out.print(7);
}
static {
System.out.print(5);
}
}
C.class:
public class C extends C0 {
public C() {
super(100);
System.out.print(2);
System.out.print(1);
}
public C(int age) {
this();
}
public static void main(String[] args) {
new C(100);
System.out.println();
new C(120);
}
static {
System.out.print(3);
}
}
在第一次new对象时,静态代码块执行,并且只执行了一次,在第二次new对象时,静态代码块没有执行,而构造代码块在每次创建对象时都会执行。通过反编译的代码可以看出构造代码块在初始化对象时被调用,并且在无参构造之前执行。
本文地址:https://blog.csdn.net/m0_50857829/article/details/109820124
推荐阅读
-
Java和Android中,代码块、static静态代码块的执行顺序
-
java 对象的初始化流程(静态成员、静态代码块、普通代码块、构造方法)
-
荐 java基础中的--------构造方法+静态+代码块+主方法解释
-
静态方法和构造方法的执行顺序以及代码块的区分
-
关于静态代码块,构造代码块,构造方法,普通代码块的一些概念和执行顺序
-
关于静态语句块、非静态语句块,成员变量初始化、构造方法在父子类执行的顺序:
-
类加载机制,类初始化时各个成员执行的顺序,静态代码块,静态方法,静态成员变量
-
子类的实例化(静态代码块,静态成员变量,构造方法)
-
JAVA中继承时静态代码块、构造代码块与构造方法的执行顺序
-
Java和Android中,代码块、static静态代码块的执行顺序