Java子类构造的完整执行顺序
package test;
public class Test {
public static void main(String[] args) {
new Son();
}
public static void print(String msg) {
System.out.println(msg);
}
public static int getInt(String name) {
print("static member " + name);
return 0;
}
public static String getString(String name) {
print("nonstatic member " + name);
return "";
}
static class Parent {
Parent() {
print("constructor parent");
}
static {
print("static block parent");
}
{
print("nonstatic block parent");
}
String str = getString("parent");
static int i = getInt("parent");
}
static class Son extends Parent {
Son() {
print("constructor son");
}
static {
print("static block son");
}
{
print("nonstatic block son");
}
String str = getString("son");
static int i = getInt("son");
}
}
最后输出结果为:
static block parent
static member parent
static block son
static member son
nonstatic block parent
nonstatic member parent
constructor parent
nonstatic block son
nonstatic member son
constructor son
这个说明了Java类的执行顺序为:
父类的静态块--->父类的静态成员--->子类的静态块--->子类的静态成员--->父类的非静态块--->父类的非静态成员--->
父类的构造函数--->子类的非静态块--->子类的非静态成员--->子类的构造函数
分享到:
相关推荐
遵循正确的构造顺序不仅有助于避免常见的编程陷阱,还能确保类和对象的正确初始化,从而提升程序的稳定性和性能。通过以上步骤的分析,我们可以更加深刻地认识到Java语言设计的严谨性和灵活性,同时也提醒我们在实际...
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
这是因为每个对象在创建时都需要先初始化其基类的部分,这通常意味着父类的构造函数会在子类构造函数之前调用。在Java中,如果子类没有显式地调用父类的构造函数,那么会默认调用父类的无参构造函数。 通过分析给定...
- **调用父类构造器**:最重要的是,`super`可以用于在子类构造器中调用父类的构造器。这对于初始化父类的状态非常有用。 - **追溯父类**:`super`不仅可以用于直接父类,还可以追溯到更远的祖先类。 **2. 调用父类...
本文将深度剖析几个常见的Java面试题目,包括方法重写、静态代码块和构造方法的执行顺序。 首先,我们来讨论**方法重写(Override)**。在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对...
综上所述,程序执行顺序的基本原则是:首先初始化并执行父类的构造器、静态和实例初始化块,然后执行子类的构造器、实例初始化块。最后,当通过子类对象调用方法时,优先执行子类覆盖的方法。理解这一顺序对于编写可...
Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); ...
在多级继承关系中,静态代码块按照类的加载顺序执行,先加载的类先执行其静态代码块。 例如,在给定的代码中: ```java public class A { static { System.out.print(1); } public A() { System.out.print(2)...
4. **父类的非静态实例初始化**:在调用子类构造器之前,父类的实例变量会被初始化。在这个例子中,`Art`类的构造器`Art()`被调用,打印出"Art"。注意,这是在`Cartoon`的构造器开始执行之前发生的,即使`Art`的构造...
在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...
在JAVA编程语言中,程序的执行顺序是程序员需要掌握的关键概念之一,因为它直接影响到程序的行为。以下是关于JAVA程序执行顺序的详细解释: 1. **静态块**: 静态块是在类加载时执行的,它不依赖于类的实例。在...
Java类的执行顺序是理解Java程序行为的关键,它涉及类的加载、初始化以及构造过程中的各种细节。以下是对类执行顺序的深入解析,基于标题“类执行顺序小结”和描述“关于Java类的执行顺序详解”。 #### 一、类的...
其次,子类构造器的执行顺序。当一个子类对象被创建时,构造器的调用顺序是:首先执行父类的构造器,然后执行子类的构造器。这是因为初始化父类的状态是子类对象创建的前提。一旦父类构造器执行完毕,子类才能在其...
如果子类的构造方法没有明确调用父类的构造方法,那么Java会默认调用父类的无参构造方法。但如果父类中没有无参构造方法,或者需要在子类中传递特定参数到父类构造方法,则需要使用`super()`关键字显式调用父类的...
在例子中,"=========构造方法======== "(父类构造方法)和"=========子类构造方法======== "(子类构造方法)的顺序体现了这一点。 4. **对象操作**:一旦对象创建完成,就可以调用对象的方法。在示例中,"ts....
如果子类构造器没有显式调用父类构造器(使用`super()`),Java会默认添加`super()`调用到构造器的最开始。 4. **子类成员变量初始化**:最后,执行子类的非静态成员变量初始化。 在实际编程中,`super`关键字用于...
3. **子类构造器**:最后,执行枚举类自身的构造器。在Java中,枚举的构造器默认是私有的,不能从外部直接实例化。枚举实例是在枚举声明中通过列举的方式创建的,例如`public enum Color { RED, GREEN, BLUE }`。...
子类的静态变量和静态代码块,按代码先后顺序执行 3. 父类的成员变量和普通代码块,按代码先后顺序执行 4. 父类的构造方法 5. 子类的成员变量和普通代码块,按代码先后顺序执行 6. 子类的构造方法 其中,静态...
当一个类继承自另一个类时,子类的构造方法可以使用`super`关键字调用父类的构造方法,确保父类的状态得到正确初始化。例如: ```java public class Student extends Person { private String major; public ...
“礼让”原则是指在父类和子类的继承关系中,子类的实例化操作时,需要先调用父类的构造函数,然后再调用子类的构造函数。 三、Java 对象初始化顺序的实例分析 以下是一个示例代码,用于演示 Java 对象初始化顺序...