请看下面小demo,这里有两个类SubClass和SupperClass,其中SubClass继承于SupperClass。
SupperClass类:
/**
* 父类
*
* @author yangbl
*
*/
public class SupperClass {
static String staticVariable = "supper staticVariable initialize";
static {
staticVariable = "supper static block execute";
System.out.println(staticVariable);
}
{
staticVariable = "supper block execute";
System.out.println(staticVariable);
}
public SupperClass() {
staticVariable = "supper constructor execute";
System.out.println(staticVariable);
}
}
SubClass类:
/**
* 子类
*
* @author yangbl
*
*/
public class SubClass extends SupperClass {
static {
staticVariable = "subClass static block execute";
System.out.println(staticVariable);
}
{
staticVariable = "subClass block execute";
System.out.println(staticVariable);
}
public SubClass() {
staticVariable = "subClass constructor execute";
System.out.println(staticVariable);
}
public static void main(String[] args) {
SupperClass supperClass = new SubClass();
}
}
运行SubClass类中的main方法得到结果如下:
supper static block execute
subClass static block execute
supper block execute
supper constructor execute
subClass block execute
subClass constructor execute
分析结果可以得到如下加载执行顺序结论:
1.加载父类的静态属性和静态代码块。
2.加载子类的静态属性和静态代码块。
3.加载父类的非静态属性和非静态代码块。
4.加载父类的构造方法。
5.加载子类的非静态属性和非静态代码块。
6.加载子类的构造方法。
注:
1.静态属性和静态代码块是在类加载的时候就加载执行,执行顺序与代码顺序相同。
2.非静态属性和非静态代码块是在类创建实例的时候执行,优先于构造方法,执行顺序与代码顺序相同。
分享到:
相关推荐
5. 最后,执行当前类的非静态代码块(如果有)。 这个过程确保了对象在被创建之前,其类的静态属性和父类的静态属性已经被正确初始化。同时,通过构造方法链确保了父类的状态在子类状态之前完成初始化。 在实际...
在Java继承体系中,子类会继承父类的非私有成员,包括静态块、实例块和构造器。调用顺序如下: 1. **静态块的执行顺序**:首先,从父类到子类,按照定义的顺序依次执行静态块。这意味着父类的静态块先于子类的静态...
在示例中,"========方法体======== "(父类的非静态代码块)和"========无名称方法体======== "(子类的非静态代码块)分别在它们对应的构造方法之前执行。 3. **构造方法**:之后,会调用构造方法来创建对象。...
在继承中,父类的无参构造方法会在子类构造方法之前执行。 5. **类的执行顺序** - **类加载**:首先执行静态变量和静态代码块的初始化。 - **实例化**:接着执行成员变量的初始化,然后是构造代码块和构造方法。 ...
- **非静态变量与非静态初始化块**:当类的新实例被创建时,这些部分将按其在类中出现的顺序依次执行。 - **构造器**:用于创建类的实例,通常位于初始化过程的最后一步。 接下来,我们通过具体的例子进一步解释...
2. **父类的非静态初始化块**:接着,如果父类有非静态初始化块(也称为实例初始化块),它会在父类的构造函数执行之前运行。这些块用于初始化父类的实例变量。 3. **父类的默认构造器**:然后,调用父类的默认构造...
执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示赋值,如果有显示赋值的话) 5.父类构造器执行完后,如果自己声明属性的...
Java 初始化块,也称为构造代码块,是Java编程语言中的一种特性,用于在对象创建时执行特定的初始化操作。初始化块在类的定义中以 `{}` 包裹的一段代码,没有返回值,也不需要任何参数。根据是否带有 `static` ...
在`Person`类中,非静态块和非静态属性`b1`、`b2`会按照它们在类中的顺序执行,然后调用父类构造器`Person()`。 4. **构造器**: - **父类构造器**:父类构造器负责设置父类的非静态属性的初始值,如`Person`类的...
执行顺序为:静态代码块 > 构造代码块 > 构造方法。 package和import关键字用于组织和导入类。使用package可以解决类名冲突问题,便于管理大量的类。每个Java源文件都有一个唯一的包名,类似于文件系统的路径。...
### 挑战:继承状态下构造方法、静态代码块、代码块的执行顺序 - 构造方法:先执行父类的构造方法(如果有`super()`),再执行子类的构造方法。 - 静态代码块:按类加载顺序执行,每个类只会执行一次。 - 代码块:...
* 在 Java 中,静态代码块的执行顺序优先于构造代码块和构造方法。 六、Object 类 * 在 Java 中,Object 类是所有类的父亲,用户自定义类默认扩展自 Object 类。 * Object 类提供了一些基本方法,如 equals、...
constructWithPara.java 带参数的构造方法 declareDefault.java 缺省访问权限的使用 declarePrivate.java 私有访问权限的使用 declareProtected.java 保护访问权限的使用 deriveClass.java 子类访问父类变量...
8. 类的初始化顺序:类的初始化顺序是父类静态成员变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。...
在`StudentDemo`类中,静态代码块在外包的初始化阶段执行,而`main`方法、构造代码块和构造方法的执行顺序取决于它们在代码中的位置。 3. **类的初始化**:第三题进一步探讨了类的初始化过程。在创建`Zi`对象时,会...
- 构造代码块(非静态代码块)在创建对象时执行,每个实例化过程都会执行一次。 - 局部代码块(方法内的代码块)在进入该代码块时执行。 - 构造方法用于初始化新创建的对象。 2. **继承与类定义**: - 子类可以...
2. 初始化执行顺序:父静态变量、父静态代码块、子静态变量、子静态代码块、父非静态变量、父非静态代码块、父类构造函数、子非静态变量、子非静态代码块、子类构造函数 五、构造函数: 1. 与类同名,无返回值 2. ...
具体的顺序是:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。 接口和抽象类在Java中都是不能...
6. 父类的非静态构造方法 7. 子类的非静态属性 8. 子类的非静态构造方法 在农业信息系统的开发中,继承可以用于构建不同类型的农业数据模型。例如,我们可以创建一个基本的“农田”类作为父类,包含通用的属性如...
- 父类非静态代码块 -> 父类构造函数。 - 子类非静态代码块 -> 子类构造函数。 - this或super调用后执行变量初始化。 - 最后执行构造函数剩余部分。 #### 四、泛型 1. **泛型使用**: - 泛型简化了集合的使用...