`

成员初始化的先后顺序

阅读更多

ClassLoaderDemo.java:

package test;

class SuperLoader {
int i = setI();
static int j = setJ();
int z;
SuperLoader() {
System.out.println("SuperLoader @ constructor @ z 2 initialized.");
this.z = 5;
}
public int setI() {
System.out.println("SuperLoader @ i @ initialized.");
return 10;
}
public static int setJ() {
System.out.println("SuperLoader @ j @ initialized.");
return 15;
}
}

public class ClassLoaderDemo extends SuperLoader {
int a = setA();
static int b = setB();
int c;
ClassLoaderDemo() {
System.out.println("ClassLoaderDemo @ constructor @ c @ initialized.");
this.c = 0;
}
public int setA() {
System.out.println("ClassLoaderDemo @ a @ initialized.");
return 20;
}
public static int setB() {
System.out.println("ClassLoaderDemo @ b @ initialized.");
return 25;
}
public static void main(String[] args) {
ClassLoaderDemo cld = new ClassLoaderDemo();
}
}

结果:

SuperLoader @ j @ initialized.
ClassLoaderDemo @ b @ initialized.
SuperLoader @ i @ initialized.
SuperLoader @ constructor @ z 2 initialized.
ClassLoaderDemo @ a @ initialized.
ClassLoaderDemo @ constructor @ c @ initialized.

分析:

一、开始装载ClassLoaderDemo类时,发现它有父类SuperLoader。于是先装载SuperLoader,发现该类有静态变量j,对其进行初始化,完成装载。

二、完成对SuperLoader类的装载后,再回过头来装载ClassLoaderDemo,发现它有静态变量b,对其进行初始化,完成装载。

三、开始创建ClassLoaderDemo类的一个实例,为其分配内存空间。发现它有父类SuperLoader,先对父类进行初始化。先初始化实例变量i,然后调用父类的构造函数对变量z进行初始化。完成父类初始化。

四,父类初始化完毕后,依例对ClassLoaderDemo进行初始化。

分享到:
评论

相关推荐

    C++初始化成员列表.

    在使用初始化成员列表时,需要注意构造函数中成员的初始化顺序与其在声明时的顺序是一致的,与列表的先后顺序无关。例如: ```cpp class Example { public: Example(): ival(0), dval(0.0) {} private: int ival;...

    Java初始化顺序1

    在类内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。 类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象...

    c++ 基本知识--类定义、初始化、析构(曹阳).ppt

    * 只有在类实例化(定义类对象)时,才能给数据成员初始化。 1.2 类的初始化 类的初始化是指在创建类对象时对类成员的初始化。类的初始化可以通过构造函数来实现。 1.3 类的析构 类的析构是指在销毁类对象时对类...

    C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar

    这个过程被称为成员初始化列表。例如,如果有这样的类定义: ```cpp class MemberClass { public: MemberClass(int value) : _value(value) {} private: int _value; }; class MyClass { public: ...

    IT学生解惑真经.pdf

    1. 在Java中,类的初始化顺序遵循一定的规则,包括静态成员先于实例成员初始化,实例成员的初始化先于构造函数调用。 2. 在继承的情况下,子类的静态成员会在父类的实例成员初始化之前完成初始化。 3. 静态成员与...

    JAVA面试题解惑系列

    在Java中,类的成员初始化遵循一定的顺序。首先执行的是静态变量和静态初始化块,之后是非静态变量、非静态初始化块和构造器。具体来说,初始化顺序可以总结为以下几点: 1. **静态变量**:类加载时最先被初始化。 ...

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。...3、类初始化时,先初始化类的属性成员,在执行构造方法。

    实验4 对象作为类的成员1

    - C#中,对象数据成员可以通过构造函数的“成员初始化器”进行初始化。`Employee`类的构造函数接收四个参数,其中两个是`Date`对象,用于初始化`birthDate`和`hireDate`。这样确保了对象在创建时即被正确赋值。 3....

    吉林大学2002级C++面向对象程序设计试题

    ### 吉林大学2002级C++面向对象程序设计试题分析 #### 一、单项选择题解析 **1....构造函数的初始化列表中的内容确实会影响成员数据的初始化顺序,初始化列表中的顺序决定了成员数据初始化的顺序。

    C++与操作系统等面试题46

    - 在组合类的构造函数中,初始化列表中的顺序决定了成员对象初始化的先后顺序,而这个顺序与成员在类中声明的顺序一致。 #### 三、组合的示例 假设有一个`Person`类,其中包含了`Address`类的对象作为成员变量。 ...

    C++中Static的使用方法

    - 静态数据成员按照定义出现的先后顺序依次初始化。 - 初始化时需要注意嵌套问题,确保被嵌套的成员已经初始化。 #### 四、Static的优势 1. **节省内存** - 对于多个对象来说,静态数据成员只存储一处,由所有...

    数据结构实验

    (1)初始化顺序表La。 (2)将La置为空表。 (3)销毁La。 (4)在La中插入一个新的元素。 (5)删除La中的某一元素。 (6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。 (7)打印输出La中的...

    java中静态代码块与构造方法的执行顺序判断

    在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...

    2017-2018年度华科面向对象程序设计试卷答案.doc

    答案:多继承基类构造函数初始化按虚基类优先,非虚基类,子对象,派生类自身构造函数顺序调用进行初始化,同类按出现先后顺序调用。 三、程序题 1. 写出下面程序的运行结果... (以下省略)

    java中final和static的区别

    静态代码块是在类中独立于类成员的 static 语句块,可以有多个,位置可以随意放,它不在任何的方法体内,JVM 加载类时会执行这些静态代码块,是该类中最先被执行的代码,如果有多个静态代码块,会按照它们在类中出现...

    Java中类加载过程全面解析

    1、先加载执行父类的静态变量及静态初始化块(执行先后顺序按排列的先后顺序) 2、再加载执行本类的静态变量及静态初始化块,只要类没有被销毁,静态变量及静态初始化块只会执行 1 次,后续再对该类进行其他操作也...

    百度INF面试题库

    - 明确成员初始化的先后顺序。 #### 13. C++方便锁操作 - **题目背景**:考察对C++多线程中锁的使用技巧。 - **核心知识点**: - 锁的基本概念。 - RAII(资源获取即初始化)技术。 - 智能指针的应用。 - **...

    JAVA有感

    - 成员变量的初始化顺序遵循定义的先后顺序。 - 如果没有显式初始化,则会使用默认值。 4. **访问修饰符:** - `public`:允许任何地方访问。 - `protected`:允许同一包或子类访问。 - `private`:仅限于当前...

    c++类与对象练习题.pdf

    访问限定符没有先后顺序,可以多次使用。 2. **构造函数**:构造函数在创建对象时自动调用,用于初始化对象。一个类可以有多个构造函数,通过不同的参数列表来区分,这称为构造函数的重载。如果没有定义构造函数,...

    线性表的操作

    创建顺序表的过程包括初始化`Seqlist`结构体,并通过用户输入填充`data`数组。 #### 3. 查找元素 在顺序表中查找特定元素通常需要遍历整个列表,直到找到目标元素或到达列表末尾。查找过程可以通过简单的循环实现...

Global site tag (gtag.js) - Google Analytics