`
mo^xu
  • 浏览: 5939 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

java实例化对象的初始化顺序

阅读更多
java 对象是如何进行初始化的,新建一PrintClass.java文件如下(包括类PrintClass以及A和其子类B),编译运行其中的main方法,

public class PrintClass {
    public static void main(String[] args){
        new B();
    }
    PrintClass(String var) {
        System.out.println(var);
    }
}

class A {
    static PrintClass pClassA1 = new PrintClass("A. 静态成员的初始化1");
    static {
        System.out.println("A. 静态初始化块1");
    }
    static {
        System.out.println("A. 静态初始化块2");
    }
    static PrintClass pClassA2 = new PrintClass("A. 静态成员的初始化2");

    {
        System.out.println("A. 实例初始化块1");
    }
    PrintClass pClassA = new PrintClass("A. 实例成员的初始化");
    {
        System.out.println("A. 实例初始化块2");
    }

    public int Avar;
    public A() {
        System.out.println("A. 构造方法");
        doSomething();
    }

    private void doSomething() {
//    public void doSomething() {
        Avar = 1111;
        System.out.println("Avar=" + Avar);
    }
}

//class B extends A
class B extends A
{
    public static void main(String[] args){
        new B();
    }
    public int Bvar = 2222;

    {
        System.out.println("B. 实例初始化块1");
    }
    {
        System.out.println("B. 实例初始化块2");
    }
    PrintClass pClassB = new PrintClass("B. 实例成员的初始化");

    static {
        System.out.println("B. 静态初始化块1");
    }
    static PrintClass pClassB1 = new PrintClass("B. 静态成员的初始化1");
    static PrintClass pClassB2 = new PrintClass("B. 静态成员的初始化2");
    static {
        System.out.println("B. 静态初始化块2");
    }

    public B() {
        System.out.println("B. 构造方法");
        doSomething();
    }
    public void doSomething() {
        System.out.println("Bvar=" + Bvar);
    }
}

可以看到运行结果为:
A. 静态成员的初始化1
A. 静态初始化块1
A. 静态初始化块2
A. 静态成员的初始化2
B. 静态初始化块1
B. 静态成员的初始化1
B. 静态成员的初始化2
B. 静态初始化块2
A. 实例初始化块1
A. 实例成员的初始化
A. 实例初始化块2
A. 构造方法
Avar=1111
B. 实例初始化块1
B. 实例初始化块2
B. 实例成员的初始化
B. 构造方法
Bvar=2222

由此可知当新建一java对象(上面main方法中new B())时,它的内部初始化顺序为:
1.  父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2.  子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3.  父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4.  父类构造方法
5.  子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6.  子类构造方法
分享到:
评论

相关推荐

    java程序初始化顺序

    以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...

    Java静态初始化块和对象初始化块

    静态初始化块和对象初始化块的执行顺序不同。静态初始化块在类加载时执行,而对象初始化块在创建新对象时执行。它们可以相互配合,以实现更复杂的初始化逻辑。例如,静态初始化块可以用来设置全局配置,而对象初始化...

    “礼让”原则学习Java对象初始化顺序.pdf

    "Java 对象初始化顺序学习指南" 在学习 Java 编程语言时,对象初始化顺序是一个非常重要的知识点,但是许多学生却感到困惑和困难。事实上,Java 对象初始化顺序并不难理解,只需要掌握“礼让”原则和 JVM 的执行...

    java代码的初始化顺序demo

    这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载阶段**: 在Java程序运行时,JVM会先加载类的字节码文件(.class文件)。这个过程包括加载、...

    java中类的初始化顺序

    ### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...

    Spring实例化Bean顺序

    4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...

    java对象的初始化顺序[参考].pdf

    Java对象的初始化顺序是一个关键的编程概念,它涉及到类加载、静态初始化、实例初始化等多个步骤。下面我们将详细探讨这些步骤。 首先,当程序运行并创建一个新的对象时,JVM(Java虚拟机)会按照特定的顺序来初始...

    Java初始化顺序1

    在 Java 中,实例变量的初始化顺序是按照定义的顺序进行的,而静态变量的初始化顺序则是按照定义的顺序,并且只在第一次访问时初始化。 在上面的示例代码中,我们可以看到,类变量和实例变量的初始化顺序是按照定义...

    java面试题-类的初始化顺序.doc

    类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。

    Java类继承初始化顺序

    当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...

    Java中对象初始化顺序的详细介绍

    这种情况下,初始化顺序如下:首先,`Lower`类的实例创建并分配默认值,然后调用`Upper`的构造器,接着执行`Initializer.initialize()`,该方法根据对象的实际类型(`Lower`)来设置字段的值。 5. **默认值**:即使...

    对象初始化流程梳理对象初始化流程梳理

    Java中的对象初始化流程是编程实践中一个非常重要的概念,它涉及到类加载、静态初始化块、实例初始化块、构造器等多个方面。下面将详细解释这个过程。 首先,对象初始化流程的起点是程序的入口点,即`main`方法。当...

    C++和Java初始化顺序的比较代码

    在Java中,初始化顺序则有所不同: 1. 基本类型的静态字段和引用类型的静态字段(如果它们是常量,即final且已初始化):这些字段在类加载时按声明顺序初始化。 2. 静态初始化块:当类第一次被加载时执行,按块的...

    类继承的初始化顺序类,继承的初始化顺序

    在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会有一个特定的初始化顺序。这个顺序通常遵循以下步骤: 1. **基类静态成员初始化**:如果基类中有任何静态成员,则会在程序启动时按照...

    Java初始化块Java初始化块.doc

    类的初始化顺序如下: - 当Java创建一个对象时,先为对象的所有属性分配内存。 - 然后,执行初始化块(如果有的话),按照它们在代码中的顺序。 - 接着,执行构造器,同样按照它们在代码中的顺序。 - 如果类有父类,...

    Java变量初始化

    这也很容易理解,因为类变量是类加载的时候执行的初始化,且只执行一次,而调用构造器是对象实例化执行的,每实例化一次对象,执行一次。 总结 Java 变量初始化是 Java 语言的基础知识点之一。变量的初始化过程...

    简单了解java类的初始化以及类的实例化

    在实例化过程中,JVM将按照代码顺序执行实例初始化块和实例初始化语句,并为实例对象的成员变量分配存储空间。 三、实例化的内存模型 在实例化过程中,JVM将为实例对象的成员变量分配存储空间,并赋予初始值。这个...

    java学习之神奇初始化

    2. **实例化对象时的初始化顺序** 3. **静态初始化块与非静态初始化块的区别** #### 1. 静态成员的初始化 在Java中,静态成员(包括静态变量和静态方法)在任何类的实例创建之前都会被初始化。这意味着无论是否...

    03.Java对象初始化1

    Java 对象初始化过程详解 Java 对象的初始化过程是通过 new 指令开始的,首先会根据指令参数在常量池中定位到一个类的符号引用。如果没有定位到这个符号引用,那么这个类就没有被加载,就需要 JVM 进行类的加载。...

Global site tag (gtag.js) - Google Analytics