初始化顺序:
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"); ----(2)
static 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初级,进阶,高级,架构视频和书籍资料,大家一起交流学习。
相关推荐
2. 类和对象:了解什么是类和对象,掌握类和对象的定义格式、静态初始化、动态初始化。 3. 继承:了解什么是继承,掌握继承的定义格式、静态初始化、动态初始化。 4. 多态:了解什么是多态,掌握多态的定义格式、...
* 对象:了解对象的概念,掌握对象的定义格式、静态初始化、动态初始化,并能够理解Java中对象的内存图解。 * 类和对象:掌握类和对象的概念,以及类和对象的关系。 * 继承:掌握继承的概念,以及继承的使用场景。 *...
本课程旨在帮助学习者理解和掌握Java的面向对象特性,包括类、对象、封装、继承、多态等基本概念。 首先,让我们详细了解一下Java中的面向对象基础: 1. 类与对象:在Java中,一切皆为对象,而类是创建对象的蓝图...
- **构造方法**:一种特殊的方法,用于初始化对象的状态。构造方法的名字与类名相同,并且没有返回类型。 #### 5. 面向对象编程特性 - **封装**:将数据和操作数据的方法封装在一起,隐藏内部实现细节,只对外提供...
4. **构造方法**:构造方法用于初始化对象,没有返回值,其名称与类名相同。构造方法在创建对象时自动调用,用于设置初始状态。 #### 结论 Java的面向对象编程提供了强大的工具和概念,帮助开发者构建复杂而灵活的...
- **Java类初始化顺序**:Java类的初始化顺序遵循一定的规则,包括父类静态变量、父类静态代码块、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块以及子类构造...
例如,游戏开始前的初始化和结束后的工作,这些通用的操作都可以在抽象类`Game`中统一处理。 3. **行为由父类控制,子类实现**:模板模式定义了算法的骨架,由抽象类决定执行的顺序,而子类可以重写或扩展某些步骤...
在子类的构造方法中,需要通过`super()`关键字调用父类的构造方法,确保对象初始化的正确顺序。 此外,教材还提到了子类构造方法的使用。子类构造方法的名称必须与类名相同,且在执行子类构造方法之前,会先调用...
- **定义**: 每个Java对象都有一个与其关联的monitor,用于控制对该对象关键代码段的访问。 - **用途**: 使用`synchronized`关键字来标识关键代码段或方法,确保同一时间只有一个线程可以执行这些代码。 - **协作...
- **小心使用懒初始化**:避免在临界区内进行懒初始化。 - **避免阻塞操作**:尽量避免在临界区内执行阻塞操作。 #### 第一章概述:并发设计原则 本章介绍了并发设计的基本原则,包括基本的并发概念、可能遇到的...
《Java编程艺术》是一本专为初学...通过学习《Java编程艺术》,初学者不仅能掌握Java语言的基础,还能逐步了解其背后的编程思想,为后续的高级开发打下坚实基础。这本书深入浅出的讲解方式,使得学习过程更加轻松有趣。
- 构造函数用于初始化新创建的对象,它们的名字与类名相同。Java和C#都支持构造函数,并且可以有默认构造器和带参数的构造器。 7. **析构函数**: - 在C#中,析构函数用于释放对象时执行的特殊方法,标记为`~`。...
根据给定文件的信息,我们可以将相关的Java知识点进行详细的总结与说明。本次总结主要围绕台湾SL-275认证考试——OCPJP(Oracle Certified ...希望这些内容能够帮助准备考试的学员们更好地掌握Java的核心概念和技术。
- `数据结构.sql`:包含了用于初始化或更新数据库的数据结构脚本,可能包括工作流相关的表和索引。 - `说明.txt`:提供了关于如何使用这个工具的简要说明和指导。 - `resources`:通常包含应用程序所需的图片、...
数组可以在声明时初始化,也可以在声明后初始化。 - **显示初始化**:在声明时给出初始值。 - **静态初始化**:在声明后赋值。 - **数组中元素的访问** 数组元素通过索引访问,索引从0开始。例如,数组`int[] ...
第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 ...
- 使用懒加载或饿汉式初始化策略来控制实例的创建时机。 ### 工厂模式(Factory Pattern) 工厂模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。 **应用场景**: ...
**4.1 如何声明、创建和初始化数组** - 示例:`int[] arr = new int[10];`声明并创建一个长度为10的整型数组。 **4.3 数组能否存储不同类型的元素** - 数组只能存储同一类型的元素。 **4.5 字符数组与字符串的...
初始化时设置一个计数器,每当计数器递减至零时,等待的线程才会被唤醒。 **2.4.2 `CyclicBarrier`** `CyclicBarrier`也是一个同步辅助类,它允许一组线程互相等待,直到达到某个公共的屏障点。与`CountDownLatch`...