首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java初始化过程:(静态成员变量,静态代码块,普通成员变量,代码块初始化顺序)

初始化过程是这样: 1.首先,初始化静态成员变量和静态代码块,按照在程序中出现顺序初始化; 2.然后,初始化子类静态成员变量和静态代码块,按照在程序中出现顺序初始化; 3.其次,...初始化普通成员变量和代码块,在执行父构造方法; 4.最后,初始化子类普通成员变量和代码块,在执行子类构造方法; 加载顺序: 父静态成员变量、静态块>子类静态成员变量、 静态块>...父普通成员变量、非静态块>父构造函数>子类 普通成员变量、非静态块>子类构造函数 静态代码块:随着加载而执行,而且只执行一次 非静态代码块:每创建一个对象,就执行一次非静态代码块 关于各个成员简介

30630

【C++】构造函数初始化列表 ③ ( 构造函数 初始化列表 为 const 成员变量初始化 )

构造函数初始化列表 总结 : 初始化列表 可以 为 成员变量 提供初始值 ; 初始化列表 可以 调用 成员变量 类型 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...传入 参数 ; 初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 初始化列表 为 const 成员变量初始化 1、初始化 const 常量成员 如果 定义了 被 const 修饰 成员变量...进行赋值 , 因此 这里 必须在 构造函数 初始化列表 对 const 成员变量 进行赋值 ; 2、错误代码示例 - 没有初始化常量成员 在下面的 B , 定义了常量 const int..., 对 常量成员 进行初始化操作 ; 3、正确代码示例 - 在初始化列表初始化常量成员 在下面的 B , 所有的 构造函数 , 都要使用 初始化列表 初始化 常量成员 , 只要遗漏一个构造函数

18130
您找到你想要的搜索结果了吗?
是的
没有找到

【Kotlin】初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数定义成员属性 | 次构造函数 | 构造函数默认参数 )

文章目录 一、主构造函数定义临时变量 二、主构造函数定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- 在 Kotlin , 可以在 声明 时 在 名后...定义 " 主构造函数 " ; 在 主构造函数 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 在 主构造函数 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 名称...---- 在主构造函数 定义临时变量 , 格式为 : class 名(_临时变量名: 临时变量类型){} 在主构造函数也可以 定义成员属性 , 格式为 : class 名(var 成员属性名:...---- Kotlin 只允许 在定义时 定义 一个主构造函数 , 在其中可以定义 临时变量 , 也可以定义 属性变量 ; 次构造函数 定义在 Kotlin 内部 , 可以定义 多个 次构造函数..., 每个次构造函数都可以有不同参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 参数设置 参数值 ; 次构造函数可以实现代码逻辑 , 作为主构造函数补充 ; 代码示例

4.8K20

【C++】构造函数初始化列表 ① ( 对象作为成员变量构造函数问题 | 构造函数初始化列表语法规则 )

一、对象作为成员变量构造函数问题 1、问题描述 如果 一个 A 对象 作为 另外一个 B 成员变量时 , 在以下场景会报错 : 为 A 定义 有参 构造函数 , 那么 A 无参默认构造函数就失效了...; 此时使用 默认无参构造函数 初始化 B , 就会报错 ; 在一个 , 其成员变量是 带有参构造函数 类型 , 这种情况下没有调用 有参构造函数机会 , 此时就会出现 编译报错情况 ; 在下面的代码...是一种用于初始化成员变量方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量 构造函数 初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...(成员变量值) , 成员变量名称(成员变量值) { // 构造函数内容 } 构造函数初始化列表 位置在 构造函数 参数列表之后 , 冒号 : 与花括号 {} 之间 ; 使用 逗号 , 分隔 ;...初始化列表元素由 成员变量名称 和 初始值组成 , 使用等号 = 连接 ; 在下面的代码 , 为 B 定义了默认构造函数 , 其中定义了 构造函数 初始化列表 ; 在 初始化列表 , m_age

49630

【C++】与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)

注意: 每个成员变量初始化列表只能出现一次(初始化只能初始化一次) 包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时)...下面是一道初始化顺序例题: 结论:成员变量声明次序就是其在初始化列表初始化顺序,与其在初始化列表先后 次序无关 隐式类型转换 C cc1(1)和C cc2=2都是一样构造。...静态成员变量一定要在外进行初始化 计算程序创建出了多少个对象 当我们想知道构造函数调用次数时,可以通过计数来确定。不过需要一个全局变量n,但这样子不安全,别人可能会修改n值。...但是实际使用cout需要是第一个形参对象,才能正常使用。所以要将operator>同理。...下面是使用友元方案: 友元函数可访问私有和保护成员,但不是成员函数 友元函数不能用const修饰 友元函数可以在定义任何地方声明,不受访问限定符限制 一个函数可以是多个友元函数 友元函数调用与普通函数调用原理相同

8810

C++心决之类和对象详解(下篇)(封装进阶篇)

再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适初始值。...,对象已经有了一个初始值,但是不能将其称为对对象成员变量初始化, 构造函数语句只能将其称为赋初值 ,而不能称作初始化。...包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时) class A { public: A(int a) :_...成员变量 声明次序 就是其在初始化列表 初始化顺序 ,与其在初始化列表先后次序无关 1.3 explicit关键字 构造函数不仅可以构造与初始化对象, 对于接收单个参数构造函数,...,不受访问限定符限制 一个函数可以是多个友元函数 友元函数调用与普通函数调用原理相同 3.2 友元 友元所有成员函数都可以是另一个友元函数,都可以访问另一个非公有成员

7910

C++与对象(三)

与对象 构造函数初始化列表 初始化列表 自定义类型与初始化列表 explicit关键字 static成员 静态成员变量 静态成员函数 友元 内部类() 匿名对象 拷贝对象时一些编译器优化...C++成员变量初始化是在这里。...自定义类型与初始化列表 我们在定义一个变量时候可以不赋值,但是const和引用时必须赋值,在自定义类型也是必须进行初始化,如果你没写初始化,那么它就会调用默认构造函数,如果没有默认构造就报错...static成员 声明为static成员称为静态成员,用static修饰成员变量,称之为静态成员变量;用static修饰成员函数,称之为静态成员函数。静态成员变量一定要在外进行初始化。...比如说创建一个对象只为了调用某个函数,创建对象和调用函数是两行,如果用匿名函数就是一行,所以匿名更舒服一些:或者是在调用某个函数,然后需要返回一个对象,平时需要创建这个对象,这里直接返回匿名对象就可以了

37200

C++-和对象(3)

再谈构造函数 1.1 构造函数体赋值 我们在创建一个对象时,编译器会调用该对象构造函数对该对象成员进行初始化。...,对象已经有了一个初始值,但是不能将其称为对对象成员变量 初始化, 构造函数语句只能将其称为赋初值 ,而不能称作初始化。...包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时)  引用必须在定义时候初始化,所以需要放到初始化列表...静态成员函数可以调用非静态成员函数吗?不能 2. 非静态成员函数可以调用静态成员函数吗?可以 3. 友元 友元提供了一种突破封装方式,有时提供了便利。...友元函数调用与普通函数调用原理相同 3.2 友元 友元所有成员函数都可以是另一个友元函数,都可以访问另一个非公有成员

11510

【C++航海王:追寻罗杰编程之路】与对象你学会了吗?(下)

1 -> 再谈构造函数 1.1 -> 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适初始值。...,对象已经有了一个初始值,但是不能将其称为对对象成员变量初始化,构造函数语句只能将其称为赋初值,而不能称作初始化。...(初始化只能初始化一次); 包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量; const成员变量; 自定义类型成员(且该类没有默认构造函数时)。...,但不是成员函数; 友元函数不能用const修饰; 友元函数可以在定义任何地方声明,不受访问限定符限制; 一个函数可以是多个友元函数; 友元函数调用与普通函数调用原理相同。...注意:内部类就是外部友元,参见友元定义,内部类可以通过外部对象参数来访问外部所有成员。但是外部类不是内部类友元。

5510

【细品C++】和对象一些细节(初始化列表、友元、static成员等)

不过希望我对这些知识整理能帮助你更好理解这部分知识。 深究构造函数 构造函数体赋值与初始化 在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适初始值。...本质其实是初始化列表缺省,在初始化时,成员变量也和普通内置类型变量一样,可以使用值初始化,也可以调用函数并使用其返回值初始化。..._day; }; 包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员变量(且该类型没有默认构造函数时) 尽量使用初始化列表初始化。...当然,抛开这些不谈,无论是成员,还是普通地使用内置类型变量,尽量对变量初始化是一个良好编程习惯。 成员变量声明次序就是其在初始化列表初始化顺序,与其在初始化列表先后次序无关。...一个函数可以是多个友元函数 友元函数调用与普通函数调用原理相同 友元 友元所有成员函数都可以是另一个友元函数,都可以访问另一个非公有成员

39720

并发编程逃离“996icu”——this引用逃逸

简单来说,就是在一个构造器创建了一个内部类(内部类本身是拥有对外部所有成员访问权),此时外部成员变量还没初始化完成。...但是,同时这个内部类被其他线程获取到,并且调用了内部类可以访问到外部类还没来得及初始化成员变量方法。...(2)在构造器内部类使用外部类情况:内部类访问外部类是没有任何条件,也不要任何代价,也就造成了当外部类还未初始化完成时候,内部类就尝试获取为初始化完成变量。 那么,如何避免this逃逸呢?...根据不同场景,解决如下: 1、单独编写一个启动线程方法,不要在构造器启动线程,尝试外部启动。 2、使用一个私有的构造函数进行初始化和一个公共工厂方法进行发布。...从根开始递归下去,因为多态性此时调用子类覆盖后draw()方法(要在调用RoundGlyph构造函数之前调用),由于步骤1缘故,我们此时会发现radius值为0; (3)按声明顺序调用成员初始化方法

1.3K20

【C++入门篇】保姆级教程篇【下】

,虽然在调用构造时候会给一个初始值,但不能将其称为对象成员初始化,构造函数语句只能将其称为赋初值,而不能称为初始化,因为 初始化只能初始化一次,而构造函数体内 可以多次赋值。...那么在Date内想要对_t这个属于Time成员函数进行初始化就必须要调用Time(没构造函数,所以调用拷贝构造)拷贝构造,然后再调用赋值运算符对自定义成员变量赋值。...静态成员变量一定要在外进行初始化。 现在我想实现一个计算调用这个会创建了多少个对象。...既然我们不能使用普通成员变量,那我们不妨使用全局变量count创建对象进行计数,创建对象在无非是调用构造函数与拷贝构造,我们只需要在构造和拷贝构造函数内将count+1就行了。...,但是我们又不希望这个函数出现在内部,那样我们就只能用Get方法返回私有成员变量,但是我们在C++并不经常使用Get和Set方法,而是使用另一个东西来访问私有成员变量/函数——友元

12010

C++奇迹之旅:和对象const成员&&static关键字&&友元&&内部类

() { cout << sizeof(A) << endl; return 0; } [ 2] 静态成员变量必须在外定义,定义时不添加static关键字,只是声明 静态成员无法通过初始化列表初始化...不能给缺省值,因为缺省值是给初始化列表,他在静态区不在对象,不走初始化列表,它属于所有整个,属于所有对象 【问题】 静态成员函数可以调用非静态成员函数吗?...不能,静态成员函数没有隐藏 this 指针,因此无法访问非静态成员变量和非静态成员函数。如果要在静态成员函数访问非静态成员,需要通过对象来访问。...比如上述Time和Date,在Time声明Date为其友元,那么可以在Date中直接访问Time私有成员变量,但想在Time访问Date私有的成员变量则不行。...注意:内部类就是外部友元,参见友元定义,内部类可以通过外部对象参数来访问外部所有成员。但是外部类不是内部类友元。

11010

Netty Review - NioEventLoopGroup源码解析

executor表示一个可选外部Executor,用于执行EventLoop任务。如果传入null,则会使用默认线程工厂创建线程。 args表示可变参数,用于传递额外参数给父构造函数。...这个构造函数作用是创建一个新SingleThreadEventLoop实例,并初始化成员变量。...首先调用SingleThreadEventExecutor构造函数,然后使用newTaskQueue方法创建一个新任务队列tailTasks,并将其赋值给成员变量tailTasks。...总的来说,这个构造函数作用是初始化SingleThreadEventLoop实例成员变量,并设置其父、执行器、任务唤醒标志、最大挂起任务数和拒绝执行处理器 super(parent, executor...总的来说,这个构造函数作用是初始化SingleThreadEventExecutor实例成员变量,并设置其父、执行器、唤醒线程标志、最大挂起任务数和拒绝执行处理器。

3500

【C++初阶】—— 和对象 (下)

,如果没有则会根据权限调用 // 本质是:权限能缩小,但是不能放大 // 及非const对象可以调用const成员函数 // 非const成员函数内可以调用其它const成员函数 Date...初始化列表 在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适初始值 对象中有了一个初始值,因此构造函数语句只能将其称为赋初值,而不能称作初始化。...使用初始化列表时注意: 每个成员变量初始化列表只能出现一次(初始化只能初始化一次) 包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时...成员变量声明次序就是其在初始化列表初始化顺序,与其在初始化列表先后次序无关 3....内部类是一个独立,不属于外部类,更不能通过外部对象去访问内部类成员外部类对内部类没有任何优越访问权限 注意:内部类就是外部友元,内部类能访问外部所有成员,反之则不能!

4910

【C++修行之道】和对象(六)再谈构造函数初始化列表)| explicit关键字 | static成员 | 友元|匿名对象|拷贝时一些编译器优化

成员变量声明次序就是其在初始化列表初始化顺序,与其在初始化列表先后次序无关 6.初始化列表,不管你写不写,每个成员对象都会先走一遍 1.4 explicit关键字 单参数构造 多参数构造...: 6.3 优化总结 七、 再次理解和对象 一、再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适初始值。...,对象已经有了一个初始值,但是不能将其称为对对象成员变量初始化,构造函数语句只能将其称为赋初值,而不能称作初始化。...非静态成员函数可以调用静态成员函数吗? 可以。非静态成员函数是依赖于对象实例,但静态成员函数不依赖于任何对象实例。静态成员函数加载时已经存在于内存,属于本身。...因此,非静态成员函数总是可以通过调用这些已经存在静态成员函数。静态成员函数访问不需要对象实例,所以在非静态成员函数中直接调用静态成员函数是合法。 例题:JZ64 求1+2+3+...

5310

与对象下篇

与对象下篇:: 1.再谈构造函数 构造函数体赋值: 在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适初始值。...,对象已经有了一个初始值,但是不能将其称为对象成员变量初始化,构造函数语句只能将其称为赋初始值,而不能称作初始化,因为初始化只能初始一次,而构造函数体内可以多次赋值。...(初始化只能初始化一次) 2.包含一次啊成员必须放在初始化列表中进行初始化:         a.引用成员变量         b.const成员变量         c.自定义类型成员(该类没有构造函数...5.友元函数调用与普通函数调用原理相同 友元: 1.友元所有成员函数都可以是另一个友元函数,,都可以访问另一个私有成员。...//Sum arr[n];//调用n次构造函数 return _ret; } //把原有内部类成员变量放到外部 private: static int _i; static int

42430

C++之面向对象(下)

---- 一、再谈构造函数 1.构造函数体赋值 在创建对象时,编译器通过调用构造函数给该对象各个成员变量一个合适初值。...) 2.包含以下成员必须包含在初始化列表: 引用成员变量 原因:引用只有一次初始化机会,不能再改变 const成员变量 原因:const变量只有一次初始化机会,不能再改变 自定义类型成员变量...答:因为成员变量初始化顺序是由它们在声明顺序决定,而不是初始化列表顺序。...静态成员变量一定在外进行初始化,静态成员函数没有this指针。 2.特性 静态成员为所有对象所共享,不在某个具体对象,而是存放在静态区。...友元函数可以在定义任何地方声明,不受访问限定符限制 一个函数可以是多个友元函数 友元函数调用与普通函数调用原理相同 3.友元 1.友元引入 如果想要在一个访问另一个成员,就需要将这个声明为另一个友元

37240

【c++】和对象(七)

1.static成员 声明为static成员称为静态成员,用static修饰成员变量,称之为静态成员变量;用static修饰成员函数,称之为静态成员函数。...**因此,它不能访问非静态成员变量成员函数,因为这些成员需要一个特定对象实例确定它们上下文 无需对象实例:可以在没有对象实例情况下调用静态成员函数。...()),也可以通过对象调用 静态成员函数通常用于提供一些与任何特定实例无关功能,或者访问静态成员变量,而不依赖于对象。...外部类对内部类没有任何优越访问权限 内部类就是外部友元,参见友元定义,内部类可以通过外部对象参数来访问外部所有成员。...注意内部类可以直接访问外部static成员,不需要外部对象/名。

6820

剖析【C++】——和对象(下篇)——超详解——小白篇

1.再谈构造函数 1.1 构造函数体赋值 构造函数是用来初始化对象特殊函数。当我们创建一个对象时,编译器会自动调用构造函数来给对象成员变量赋值。...}; 在上面的代码,: x(a), y(b) 就是初始化列表,它在构造函数体执行之前完成成员变量初始化。...注意事项: 每个成员变量初始化列表只能出现一次。...以下成员必须在初始化列表初始化: 引用类型成员变量 const 成员变量 自定义类型成员变量(如果该类没有默认构造函数) 示例代码: class MyClass { public:...初始化:静态成员变量必须在外进行初始化。 面试题:实现一个,计算程序创建了多少个对象。

5410
领券