精华内容
下载资源
问答
  • 成员初始化顺序
    2020-04-23 19:34:19

    1.成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。
    2.如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
    3.类中const成员常量必须在构造函数初始化列表中初始化。
    4.类中static成员变量,只能在类内外初始化(同一类的所有实例共享静态成员变量)。
    初始化顺序:
    • 1) 基类的静态变量或全局变量
    • 2) 派生类的静态变量或全局变量
    • 3) 基类的成员变量
    • 4) 派生类的成员变量

    更多相关内容
  • 了解java中类各个成员初始化顺序是非常重要的,这样你可以对类有全局的认识。不说太多,直接看下面的例子 class Father { static{ System. out.println("父类静态代码块初始化" ); } { System. out.println...
  • 这里直接给出C#类成员一般初始化顺序: 子类静态字段 子类静态构造 子类实例字段 父类静态字段 父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是“一般”初始化顺序呢?因为根据类结构的...
  • Kotlin类成员初始化顺序

    千次阅读 2020-05-06 00:57:59
    Kotlin实例初始化时,构造函数、成员变量、init块等的初始化顺序必须弄清楚,否则容易出bug: Example: open class Parent { private val a = println("Parent.a") constructor(arg: Unit=println("Parent ...

    Kotlin实例初始化时,构造函数、成员变量、init块等的初始化顺序必须弄清楚,否则容易出bug:

    Example:


    open class Parent {
        private val a = println("Parent.a")
    
        constructor(arg: Unit=println("Parent primary constructor default argument")) {
            println("Parent primary constructor")
        }
    
        init {
            println("Parent.init")
        }
    
        private val b = println("Parent.b")
    }
    
    class Child : Parent {
        val a = println("Child.a")
    
        init {
            println("Child.init 1")
        }
    
        constructor(arg: Unit=println("Child primary constructor default argument")) : super() {
            println("Child primary constructor")
        }
    
        val b = println("Child.b")
    
        constructor(arg: Int, arg2:Unit= println("Child secondary constructor default argument")): this() {
            println("Child secondary constructor")
        }
    
        init {
            println("Child.init 2")
        }
    }
    

    Output:


    Child primary constructor default argument
    Parent primary constructor default argument
    Parent.a
    Parent.init
    Parent.b
    Parent primary constructor
    Child.a
    Child.init 1
    Child.b
    Child.init 2
    Child primary constructor
    

    Conclusion:


    1. 按照父类->子类的顺序执行初始化(同Java)
    2. 构造函数在成员变量初始化之后执行(同Java)
    3. init与成员变量初始化按照代码位置顺序执行 (重点!)

    因此,下面的代码会出现NPE

     class Foo {
            init {
                initList()
            }
            
            val list : MutableList<String> = mutableListOf()
            
            fun initList() {
                list.clear()
            }
        }
    
    展开全文
  • 静态成员 是类所有的对象的共享的成员,而不是某个对象的成员。它在对象中不占用存储空间,这个属性为整个类所...1.成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序

    转载自:https://blog.csdn.net/qq_27278957/article/details/104012302

    静态成员

    是类所有的对象的共享的成员,而不是某个对象的成员。它在对象中不占用存储空间,这个属性为整个类所共有,不属于任何一个具体对象。所以静态成员不能在类的内部初始化,比如声明一个学生类,其中一个成员为学生总数,则这个变量就应当声明为静态变量,应该根据实际需求来设置成员变量。

    总结:

    1.成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关

    2.如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关

    3.类中const成员常量必须在构造函数初始化列表中初始化

    4.类中static成员变量,只能在类外初始化(同一类的所有实例共享静态成员变量)。

    C++类成员变量初始化顺序:

    1) 基类的静态变量或全局变量
    2) 派生类的静态变量或全局变量
    3) 基类的成员变量
    4) 派生类的成员变量

    展开全文
  • C++类成员初始化顺序问题

    万次阅读 多人点赞 2017-11-22 21:08:20
    今天刚把买了一个月的剑指offer这本书翻阅一下,看到一个简单的举例。...C++类成员初始化顺序问题1 C++类成员初始化顺序问题2 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下,#include us

    今天刚把买了一个月的剑指offer这本书翻阅一下,看到一个简单的举例。说应聘C++岗位的不知道成员变量初始化顺序!大冬天的背后竟冒出了一丝冷汗,因为我也不知道,所以就上网查了一下,将学到的知识记录如下。
    这里写图片描述
    主要参考博客:

    1. C++类成员初始化顺序问题1
    2. C++类成员初始化顺序问题2

    问题来源:
    由于面试题中,考官出了一道简单的程序输出结果值的题:如下,

    #include <iostream>
    using namespace std;
    
    class A
    {
    public:
        A()
            :n2(0),
            n1(n2 + 2)
        {}
    
        //~A();
    
        void print()
        {
            cout << "n1:" << n1 << " ,  n2:" << n2 << endl;
        }
    
    private:
        int n1;
        int n2;
    };
    
    //A::~A()
    //{
    //}
    
    int main()
    {
        A a;
        a.print();
        system("pause");
        return 0;
    }

    大家预测一下结果,在没运行的时候,我想大多数不懂初始化成员列表的顺序的人都会和我一样认为输出的是:n1:2 , n2:0

    (这里有一个小插曲,之前我的VS代码贴进去竟然总是报错,仔细审查了几次,都没觉得有问题,最后重新建个工程再运行又是好的)

    最后,我们可以看到输出结果如下:
    这里写图片描述

    如果我把A类中构造函数改成:

    A()  
        {  
            n2 = 0;  
            n1 = n2 + 2;  
        }  

    运行结果如下:
    这里写图片描述

    分析原因如下:
    1、成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了。这点在EffectiveC++中有详细介绍。
    2、如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
    3、注意:类成员在定义时,是不能初始化的
    4、注意:类中const成员常量必须在构造函数初始化列表中初始化。
    5、注意:类中static成员变量,必须在类外初始化。
    6、静态变量进行初始化顺序是基类的静态变量先初始化,然后是它的派生类。直到所有的静态变量都被初始化。这里需要注意全局变量和静态变量的初始化是不分次序的。这也不难理解,其实静态变量和全局变量都被放在公共内存区。可以把静态变量理解为带有“作用域”的全局变量。在一切初始化工作结束后,main函数会被调用,如果某个类的构造函数被执行,那么首先基类的成员变量会被初始化。

    总结:
    变量的初始化顺序就应该是:

    1 基类的静态变量或全局变量

    2 派生类的静态变量或全局变量

    3 基类的成员变量

    4 派生类的成员变量

    展开全文
  • springboot---成员初始化顺序

    千次阅读 2019-07-27 10:10:35
    如果我们的类有如下成员变量: @Component public class A { @Autowired public B b; // B is a bean public static C c; // C is also a bean public static int count; public float version; public A...
  • Java类初始化顺序

    2020-12-22 23:54:19
    所有代码块是从上往下顺序执行的,所以代码块里面使用到的变量如果在块下面初始化会有问题 执行构造方法中内容。 所以看见的空构造方法,只能说第三部没有需要执行的内容。 下面举例子 public class TestClass { ...
  • Java 对象创建过程 (涉及到组合和继承的情况下 - 成员初始化顺序 对 Java 对象的创建过程成员初始化顺序尤其是涉及到组合和继承的情况下作一下梳 理总结 java 编程思想书中第 4 章初始化与清理中对 Java 对象的创建...
  • C++ 类成员变量初始化顺序

    千次阅读 2020-01-16 23:02:50
    首先,看一段程序: #include using namespace std;...下面是C++类成员变量初始化顺序: 1) 基类的静态变量或全局变量 2) 派生类的静态变量或全局变量 3) 基类的成员变量 4) 派生类的成员变量
  • 成员初始化顺序

    千次阅读 2016-03-24 18:41:13
    类的初始化表的初始化顺序是根据成员变量的声明顺序来执行的,而不是按照初始化列表的顺序。 #inlude #inlude using namespace std; class base { private: int m_i; int m_j; public: base(int i) : m_j(i),m...
  • 1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。 2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。 4.执行父类的...
  • JAVA 成员初始化顺序和内存分配过程

    千次阅读 2017-05-25 09:53:21
    成员初始化顺序属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序: 父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。 子类静态成员和静态初始化块,按在代码中出现...
  • 本篇文章是对java父类和子类初始化顺序进行了详细的分析介绍,需要的朋友参考下
  • C++ 成员变量的初始化顺序问题详解 问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void Print(){ cout <&...
  • 类的成员变量的初始化顺序

    千次阅读 2018-09-03 11:34:43
    类的成员变量的初始化顺序只与变量在类中的声明顺序有关,与在构造函数中的初始化列表顺序无关。 注意:是与声明顺序有关。 #include&lt;iostream&gt; using namespace std; class A { public: //我们...
  • C++类成员初始化顺序

    千次阅读 2019-08-10 14:46:48
    C++中变量的初始化顺序应该是: 1 基类的静态变量或全局变量 2 派生类的静态变量或全局变量 3 基类的成员变量 4 派生类的成员变量 注意,对于一个类中的变量,初始化的顺序并不是按照初始化成员列表的顺序进行...
  • 对编译器来说,静态成员变量的初始化顺序和析构顺序是一个未定义的行为 #include <string> #include <iostream> using namespace std; class Base{ public: static int b; static int a; }; int ...
  • 静态初始化块->变量->变量初始化块->构造方法2.有继承的情况父类静态变量->父类静态初始化块->子类静态变量->子类静态变量初始化块->父类变量初始化->父类变量初始化块->父类构造方法-&...
  •  初始化列表的初始化顺序是依据类成员变量定义的顺序来决定的。 3.关于static const是否应该在初始化成员列表中初始化?  static const为全局静态常量,全局的意思是该变量属于整个类而非某个类实例,所以不能再...
  • C#中成员初始化顺序

    千次阅读 2014-05-16 11:21:22
    一、成员初始化整体顺序 1.成员赋值初始化先于构造函数; 2.成员赋值初始先从子类再到基类; 3.构造函数初始化先从基类再到子类; 4.静态成员初始化优先于实例成员初始化; 二、对静态类型成员构造的大致过程 ...
  • 1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。 2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。 4.执行父类...
  • 类的初始化顺序详解

    千次阅读 2018-08-23 13:14:15
    前言 先声明一个常识,类域和局部变量初始化的差异如下, 局部变量不初始化会报错: 类中属性(也称域)不赋初值,默认为0,如果是引用...结论:就算类中属性散乱定义在不同地方,初始化也会严格按照先后顺序执行...
  • 但是需要注意的是,构造函数的初始化列表只是说明各变量的初始值,并没有指定变量的初始化顺序。 其中,myClass类构造函数的初始化列表只是说明了变量i的初始值是1,变量j的初始值是i的值。但是并不一定是先初始化i...
  •  (3)任何成员对象的构造函数按照它们声明的顺序调用;  (4)类自己的构造函数。 #include using namespace std; class OBJ1 { public: OBJ1(){ cout <<OBJ1 ; } }; class OBJ2 { public: OBJ2...
  • 那么类中成员变量初始化的先后顺序是依据什么确定的呢? 看下面一段程序: #include using namespace std; class A { int a; int b; public: A() :b(0), a(b + 2){ } void print() { cout ...
  • 1.C++使用初始化列表初始化时,成员变量的初始化顺序:只与定义变量的顺序有关. #include <iostream> using namespace std; class A{ private: //结论:成员变量在使用初始化列表初始化时,与构造函数中初始化...
  • 一般,初始化的顺序无关紧要,然而,如果一个成员是根据其他成员而初始化,则成员初始化顺序是至关重要的。class x { int i;//声明顺序是先i,后j,故初始化列表中,会先初始化i,在初始化j int j;public: x...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 273,146
精华内容 109,258
关键字:

成员初始化顺序