`
yeshaoting
  • 浏览: 684694 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对象初始化次序

    博客分类:
  • J2SE
阅读更多

对象初始化次序

1)    所有变量一定会在任何一个函数(甚至是构造函数)被调用之前完成初始化(见P233例子)
2)    在产生一个class的对象(包含static成员的class的代码被装载)时,首先自动初始化class中的static成员变量,再执行所有出现于static数据定义处的初始化动作,最后执行static block,所有这些初始化操作只在第一次生成该对象时进行。
3)    自动初始化class中的其它成员变量。
4)    执行所有出现于数据定义处的初始化动作。如:int i=1;的执行顺序是先把I自动初始化为0,再执行数据定义处的初始化动作,初始化为1。
5)    执行non-static block
6)    调用构造函数。

 

例:

class Cup{
    Cup(int marker){
        System.out.println("Cup(" + marker + ")");
    }
    void f(int marker){
        System.out.println("f(" + marker + ")");    
    }    
}

class Cups{
    static Cup c1 = new Cup(11);
    static Cup c2;
    Cup c3 = new Cup(33); 
    Cup c4;
    {
        c3 = new Cup(3);
        c4 = new Cup(4);
    }
    static{
        c1 = new Cup(1);
        c2 = new Cup(2);
    }
    Cups(){
        System.out.println("Cups()");
    }
}

public class ExplicitStatic{
    public static void main(String[] args){
        System.out.println("Inside main()");
        Cups.c1.f(99);
    }
    static Cups x = new Cups();
    static Cups y = new Cups();
}

 

结果:

Cup(11)
Cup(1)
Cup(2)
Cup(33)
Cup(3)
Cup(4)
Cups()
Cup(33)
Cup(3)
Cup(4)
Cups()
Inside main()
f(99)

 

来自网络文件: Java编程思想读书笔记

分享到:
评论

相关推荐

    Qt变量初始化,为何要与声明的次序保持一致?-CSDN论坛1

    这些对象通常需要在构造函数中进行初始化,因为它们可能依赖于其他成员变量的状态,或者需要在对象生命周期的早期阶段进行设置。 在给出的代码片段中,`editPainter`类有多个成员变量,包括`QPixmap`类型的成员。在...

    Java对象初始化顺序的使用

    在Java编程语言中,对象初始化顺序是一个非常关键的概念,它涉及到类和对象的生命周期以及成员变量、静态成员变量、初始化块和构造函数的执行次序。理解这些规则对于编写健壮且可预测的代码至关重要。 首先,我们来...

    C 语言程序设计:第4讲 类的组合.ppt

    在本节课中,我们将了解类的组合的定义、构造函数的设计、初始化次序、成员对象的构造函数调用顺序等内容。 一、类的组合的定义 类的组合是指在一个类中包含另一个类的对象作为成员。例如,在Line类中,我们可以...

    C++语言程序设计:第4讲 类的组合.ppt

    复制构造函数用于创建`Line`对象的副本,同样遵循初始化次序规则。 在主函数`main()`中,首先创建了两个`Point`对象`myp1`和`myp2`,然后利用这两个点创建了一个`Line`对象`line`。接着,通过复制构造函数创建了`...

    关于C++类的成员初始化列表的相关问题

    成员初始化列表中的初始化次序是由类中成员的声明顺序决定的,而不是由列表中成员的出现顺序决定的。这意味着如果成员之间的初始化顺序不当,可能会导致未预期的行为。例如: ```cpp class X { public: int i; ...

    构造函数调用次序证明

    理解并掌握构造函数的调用顺序是C++编程的关键,尤其是在设计复杂类层次结构和处理对象初始化时。通过在构造函数中加入适当的调试输出,我们可以直观地验证这一顺序,这对于调试和优化代码至关重要。正确地管理构造...

    c++面试题大全

    25. **成员初始化次序**:成员对象的初始化次序由它们在类中的声明顺序决定。 26. **类与对象的关系**:类是对象的模板,对象是类的实例化。 27. **成员访问属性**:成员访问属性包括公有(public)、受保护...

    c++学习笔记(个人学习时做的笔记)

    9. **成员初始化次序**:成员的初始化顺序由它们在类定义中的顺序决定,与初始化列表中的顺序无关。 ### 类与容器 1. **string类**:C++标准库中的`std::string`类提供了一种方便的字符串操作。 2. **C++11的`std...

    c++必会面试300题

    8. **拷贝构造函数的调用时机**:拷贝构造函数在创建新对象并使用已有对象初始化时、函数参数传递和函数返回值时被调用。 9. **构造函数**:构造函数用于初始化对象,名称与类名相同,没有返回类型。构造函数的主要...

    c++面试300题(华为,易思博,中软)

    25. 成员初始化次序:与声明顺序有关,不受初始化列表中顺序影响。 26. 类与对象关系:类是对象的模板,对象是类的实例。 27. 访问属性:public、protected、private,控制成员的访问权限。 28. `const`指针:`...

    第六章结构化分析和第七章面向对象分析.pdf

    面向对象分析的过程中,注重寻找对象、确定对象的属性和方法、组织类的设计,并通过动态模型和交互次序的图形化表示(如顺序图和状态图)来进一步理解系统。 面向对象分析的过程中,会使用到用例图和用例模板来描述...

    易语言编辑框内容次序打乱

    1. 初始化一个空数组,用于存储编辑框的每一行文本。 2. 遍历编辑框的行数,将每一行的文本添加到数组中。 3. 生成一个随机数种子,例如使用“时间.毫秒数”作为种子,确保每次运行时的随机性。 4. 使用易语言的...

    Java常见面试题 还没写完.docx

    * 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。 * 如果构造器的第一行调用了第二个构造器,则执行第二个构造器的主体。 十八、对象析构 * 对象的析构是当对象不再使用时将其进行清理(最常见...

    C++程序员面试题集

    知识点:拷贝构造函数在三种情况下会被调用,分别是对象初始化、函数参数传递和函数返回值。 9. 构造函数与普通函数相比在形式上有什么不同? 答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化...

    C_C++面试题300.pdf

    8. **拷贝构造函数的调用**:拷贝构造函数在创建新对象时复制已存在对象的值,常见情况包括对象初始化、函数参数传递和函数返回值。 9. **构造函数**:构造函数是类的特殊成员函数,用于初始化对象。其名称与类名...

    c++ 笔试题

    8. **拷贝构造函数的调用时机**:拷贝构造函数在对象初始化、函数参数传递和函数返回值时会被调用。 9. **构造函数的特点**:构造函数名称与类名相同,无返回类型,主要用于初始化对象的成员变量。 10. **重写拷贝...

    第四次非编程作业1

    当一个类(派生类)从另一个类(基类)继承时,它们之间存在构造函数的调用顺序,这对于理解和正确初始化对象至关重要。以下是关于派生类构造函数执行次序的详细解释: 1. **基类构造函数的调用**: 在派生类的...

    c++面试三百题

    8. **拷贝构造函数的调用**:拷贝构造函数会在创建新对象时用已存在对象初始化、函数参数传递或函数返回值时被调用。 9. **构造函数的特殊性**:构造函数与普通函数不同在于其名称与类名相同,不返回任何值,主要...

    C++笔试题题目

    8. **拷贝构造函数的调用时机**:拷贝构造函数在对象初始化、函数参数传递和函数返回值时会被调用。 9. **构造函数的特点**:构造函数用于初始化新创建的对象,其名称与类名相同,不返回任何值。构造函数的主要任务...

Global site tag (gtag.js) - Google Analytics