`

轻松掌握Java对象初始化顺序

    博客分类:
  • java
阅读更多

初始化顺序:
1.有无父类?
有:
将父类加载进内存。直到将所有的父类加载完毕。再从顶层父类按照代码的顺序执行静态代码,执行完最顶层的,在执行下一层的,依次类推,直到执行完所有的静态代码。
(1)如果有初始化子类对象。那么同样会先调用父类的构造器,并且会先执行最底层父类的构造器。
先将所有成员属性设置成为默认值,接着依据代码的顺序初始化所有成员。初始化完毕之后,再执行构造器内的方法。初始化完父类后,依次初始化子类的。

无:那么接下来的步骤跟(1)处的处理方式是一样的。

 

下面给出例子:

package org.csp.test;

public class Test extends Insect{
    private int k = printInit("Test initialized");    ----(11),类似的要先被清0,然后再调用printInit()方法
    public Test() {
        System.out.println("k ="+k);                    ---(12) 初始化属性后,执行构造器内的代码
        System.out.println("j ="+j);                    ----(13)
    }
    private static int x2 = printInit("Test X2 initialized");  ---(3)因为是静态成员
    public static void main(String[] args) {
        System.out.println("haha");             ---(4)
        Test t = new Test();              ---(5)创建对象,接下去要初始化成员对象,但是要先初始化父类的
    }
}
class Insect {
                                        ------(7)先将所有的成员设置为默认值
    private int i =9 ;   -----(7)先被设置为默认值0    -----(8)   按照代码顺序初始属性 
    protected int j;                                  -----(7)被设置为默认值0 
    static{
        System.out.println("hahaaaa");  
    }                                                 **----(1)最先执行**    
    Insect() {
        System.out.println("i = "+i+",j = "+j);       ----(9) 执行构造器内的代码
        j=39;                                            ------(10)此处已经将父类初始化完毕,返回去初始子类对象
    }
    private static int x1= printInit("static Insect.X1 initialized");   ----(2static int printInit(String s) {
        System.out.println(s);
        return 47;
    }
}

执行结果

hahaaaa
static Insect.X1 initialized
Test X2 initialized
haha
i = 9,j = 0
Test initialized
k =47
j =39


有兴趣的朋友可以加入我的互联网架构群:477819525

 

内有大量java初级,进阶,高级,架构视频和书籍资料,大家一起交流学习。

1
0
分享到:
评论

相关推荐

    黑马程序员:轻松精通Java学习路线基础篇!JAVA语言

    2. 类和对象:了解什么是类和对象,掌握类和对象的定义格式、静态初始化、动态初始化。 3. 继承:了解什么是继承,掌握继承的定义格式、静态初始化、动态初始化。 4. 多态:了解什么是多态,掌握多态的定义格式、...

    黑马程序员:轻松精通Java学习路线基础篇!.doc

    * 对象:了解对象的概念,掌握对象的定义格式、静态初始化、动态初始化,并能够理解Java中对象的内存图解。 * 类和对象:掌握类和对象的概念,以及类和对象的关系。 * 继承:掌握继承的概念,以及继承的使用场景。 *...

    《Java面向对象程序设计》

    本课程旨在帮助学习者理解和掌握Java的面向对象特性,包括类、对象、封装、继承、多态等基本概念。 首先,让我们详细了解一下Java中的面向对象基础: 1. 类与对象:在Java中,一切皆为对象,而类是创建对象的蓝图...

    Java2入门经典1

    - **构造方法**:一种特殊的方法,用于初始化对象的状态。构造方法的名字与类名相同,并且没有返回类型。 #### 5. 面向对象编程特性 - **封装**:将数据和操作数据的方法封装在一起,隐藏内部实现细节,只对外提供...

    Java学习笔记 必看经典 pdf

    4. **构造方法**:构造方法用于初始化对象,没有返回值,其名称与类名相同。构造方法在创建对象时自动调用,用于设置初始状态。 #### 结论 Java的面向对象编程提供了强大的工具和概念,帮助开发者构建复杂而灵活的...

    java后端1年经验和技术总结

    - **Java类初始化顺序**:Java类的初始化顺序遵循一定的规则,包括父类静态变量、父类静态代码块、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块以及子类构造...

    轻松掌握Java模板模式

    例如,游戏开始前的初始化和结束后的工作,这些通用的操作都可以在抽象类`Game`中统一处理。 3. **行为由父类控制,子类实现**:模板模式定义了算法的骨架,由抽象类决定执行的顺序,而子类可以重写或扩展某些步骤...

    北大青鸟 Java 教材 第9章

    在子类的构造方法中,需要通过`super()`关键字调用父类的构造方法,确保对象初始化的正确顺序。 此外,教材还提到了子类构造方法的使用。子类构造方法的名称必须与类名相同,且在执行子类构造方法之前,会先调用...

    Java 并发核心编程

    - **定义**: 每个Java对象都有一个与其关联的monitor,用于控制对该对象关键代码段的访问。 - **用途**: 使用`synchronized`关键字来标识关键代码段或方法,确保同一时间只有一个线程可以执行这些代码。 - **协作...

    Mastering Concurrency Programming with Java 8

    - **小心使用懒初始化**:避免在临界区内进行懒初始化。 - **避免阻塞操作**:尽量避免在临界区内执行阻塞操作。 #### 第一章概述:并发设计原则 本章介绍了并发设计的基本原则,包括基本的并发概念、可能遇到的...

    java编程艺术 电子稿

    《Java编程艺术》是一本专为初学...通过学习《Java编程艺术》,初学者不仅能掌握Java语言的基础,还能逐步了解其背后的编程思想,为后续的高级开发打下坚实基础。这本书深入浅出的讲解方式,使得学习过程更加轻松有趣。

    戏说面向对象编程oop

    - 构造函数用于初始化新创建的对象,它们的名字与类名相同。Java和C#都支持构造函数,并且可以有默认构造器和带参数的构造器。 7. **析构函数**: - 在C#中,析构函数用于释放对象时执行的特殊方法,标记为`~`。...

    Java 總複習OCPJP

    根据给定文件的信息,我们可以将相关的Java知识点进行详细的总结与说明。本次总结主要围绕台湾SL-275认证考试——OCPJP(Oracle Certified ...希望这些内容能够帮助准备考试的学员们更好地掌握Java的核心概念和技术。

    java工作流设计器

    - `数据结构.sql`:包含了用于初始化或更新数据库的数据结构脚本,可能包括工作流相关的表和索引。 - `说明.txt`:提供了关于如何使用这个工具的简要说明和指导。 - `resources`:通常包含应用程序所需的图片、...

    详细的java基础总结

    数组可以在声明时初始化,也可以在声明后初始化。 - **显示初始化**:在声明时给出初始值。 - **静态初始化**:在声明后赋值。 - **数组中元素的访问** 数组元素通过索引访问,索引从0开始。例如,数组`int[] ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...

    Design Patterns in Java pdf 0分

    - 使用懒加载或饿汉式初始化策略来控制实例的创建时机。 ### 工厂模式(Factory Pattern) 工厂模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。 **应用场景**: ...

    4747 Java语言程序设计(一)

    **4.1 如何声明、创建和初始化数组** - 示例:`int[] arr = new int[10];`声明并创建一个长度为10的整型数组。 **4.3 数组能否存储不同类型的元素** - 数组只能存储同一类型的元素。 **4.5 字符数组与字符串的...

    java的concurrent用法详解

    初始化时设置一个计数器,每当计数器递减至零时,等待的线程才会被唤醒。 **2.4.2 `CyclicBarrier`** `CyclicBarrier`也是一个同步辅助类,它允许一组线程互相等待,直到达到某个公共的屏障点。与`CountDownLatch`...

Global site tag (gtag.js) - Google Analytics