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

KotlinKotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

构造函数 ---- 1 . 构造函数个数 : Kotlin 类定义时需要指定主构造函数 , 还可以指定 0 ~ 多个次构造函数 ; 2 ....主构造函数定义 : 主构造函数与类定义在一起 , 构造函数定义类名后 , 格式 constructor( 构造函数参数列表 ) ; 3 ....主构造函数声明属性 ---- 类中声明属性可以类中使用 var / val 属性名称 : 属性类型 声明属性 , 也可以构造函数中声明属性 ; ① 正常的主构造函数 : 构造函数是普通的构造函数...调用构造函数 / 次构造函数 创建类实例对象 ---- 1 ....创建实例对象 : Kotlin 中没有 new 关键字 , 使用 类名 ( 构造函数参数列表 ) 方式 , 创建类对象实例 ; 2 .

3.1K10

【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )

函数空 , 不做任何操作 ; 默认拷贝构造函数 : 如果 C++ 类中 没有定义拷贝构造函数 , C++ 编译器会自动该类提供一个 " 默认的拷贝构造函数 " , 函数中对成员变量进行简单的复制操作...; 创建一个类对象 并将其 赋值给 另一个类对象时 , 会自动调用 默认拷贝构造函数 ; 如果 C++ 类中 没有定义拷贝构造函数 , C++ 编译器会自动该类提供一个 " 默认的拷贝构造函数 " ,...函数中对成员变量进行简单的复制操作 ; 没有定义拷贝构造函数 : 如果 没有为 C++ 类定义 拷贝构造函数 , C++ 编译器 将自动该类 生成一个 默认的拷贝构造函数 ; 定义了拷贝构造函数...: 如果 C++ 类 定义了 拷贝构造函数 , C++ 编译器 将不再自动生成默认的拷贝构造函数 ; 默认拷贝构造函数内容 : C++ 编译器 类 定义的 默认拷贝构造函数 , 函数内部将 现有对象...obj; // 调用默认无参构造函数 MyClass obj2 = obj; // 调用默认拷贝构造函数 二、构造函数调用规则 ---- 1、构造函数规则说明 构造函数调用规则 : 提供 默认无参构造函数

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

禁止构造函数调用函数

构造函数调用函数会导致程序出现莫名其妙的行为,这主要是对象还没有完全构造完成。...这是因为基类的构造函数调用一个定义本类中的但是派生类所重写的虚函数,程序运行的时候会调用派生类的版本,程序在运行期的类型是 A 而不是 B。...这么做主要是为了避免构造函数调用抽象类中的方法,防止抛出异常。虽然这么写可以避免这个问题但是还存在一个很大的缺陷,它会造成 str 这个对象整个生命周期中无法保持恒定的值。...构造函数还没有把该对象初始化完成之前,它的取值是由初始化语句决定的,但是执行完构造函数之后它的值却变成了构造函数中所设定的那个值。...Tip:C# 对象的运行期类型是一开始就定好的,即便基类是抽象类也依然可以调用其中的虚方法。 小结 基类构造函数调用函数会导致代码严重依赖于派生类的实现,然后这些实现是无法控制且容易出错的。

1.6K20

java构造函数调用另一个构造函数_java中的构造函数

参考链接: Java程序从另一个调用一个构造函数 package demo03; /*  * 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法  * 格式:... * public 类名称(参数类型 参数名称){  *         方法体  *   * }  * 注意事项:  * 1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样  * 2.构造方法不要写返回值类型...,连void都不写  * 3.构造方法不能return一个具体的返回值  * 4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做  * 5.一旦编写了至少一个构造方法...,那么编译器将不再赠送  * 6.构造方法也是可以进行重载的。  ...;     }     //有参数的构造方法     public Student(String name,int age) {         System.out.println("全参构造方法执行啦

4.4K60

【C++】构造函数意义 ( 构造函数显式调用与隐式调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )

类的 实例对象时 , C++ 编译器 会自动调用 开发者定义的 构造函数 ; 2、构造函数显式调用与隐式调用 类 的 构造函数 可以 自动调用 , 也可以手动调用 ; 一般 默认的 无参构造函数 是 自动地...隐式调用 ; 有参构造函数 是 由开发者 手动显式调用 ; 3、构造函数替代方案 - 初始化函数 构造函数的替代方案 - 初始化函数 : 共有初始化函数 : 每个类定义一个 public 共有初始化函数..., 则无法进行初始化操作 ; 5、默认构造函数 如果 定义 类 时 , 没有写 构造函数 , C++ 编译器 会 类 提供一个默认构造函数 ; 默认构造函数函数空 , 不需要开发者定义 ,...由 C++ 编译器默认提供 ; 默认构造函数 分为 2 种类型 : 默认无参构造函数 : 如果 类 中没有定义 构造函数 , C++ 编译器 会默认提供一个 无参构造函数 , 该构造函数函数空..._age; m_height = _height; } 使用 Student s 代码定义实例对象的场景下 , 无法及时地调用 初始化函数 ; 代码示例 - 初始化函数 : #include "

46720

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

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

4.8K20

【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )

一、构造函数分类 1、构造函数分类简介 C++ 构造函数可以分为以下几类 : 无参构造函数 : 最简单也是默认的构造函数 , 函数没有参数 , 如果创建一个对象 , 没有传入参数 , 调用的就是该类型的...构造函数 ; 有参构造函数 : 带参数的 构造函数 , 创建 实例对象 时 , 成员变量提供初始值 ; 拷贝构造函数 : 拷贝现有 实例对象 , 并以此拷贝的副本数据 创建一个新的 实例对象 ,...= NULL) { strcpy_s(m_name, 5, "name"); } // m_age 成员设置初始值 m_age = 0; cout << "调用无参构造函数" <...; 拷贝构造函数 拷贝构造函数 : 拷贝构造函数 也是 有参构造函数 中的一种 , 传入的是 相同类型的 常量引用 , 该引用指向的内容函数内不可修改 ; " 拷贝构造函数 " 中 , 主要读取...<< "调用有参构造函数" << endl; } // 拷贝构造函数 Student(const Student& obj) { // m_name 成员分配内存 m_name

30110

Java构造函数调用顺序问题

参考链接: Java构造函数 今天对Java的构造函数调用顺序进行研究,使用的是与C++类似的方法,即不对源码进行研究,而是直接通过打印代码对构造函数调用顺序进行研究。 ...代码如下,使用的是Java核心技术中的代码,对其进行了改造,构造函数中加入了输出信息  public class ConstructorTest {    public static void main...   }   执行结果   object initialization block : 0  static initialization block : 1  constructors3 : 2   构造函数最后调用...最后一点:如果构造器第一行调用了第二个构造器,则执行第二个构造器的主体。  最后还有一点非常重要的内容,构造调用一定要是第一句,否则编译出错。...构造器中只能调用一次其他构造函数,不能调用两次,即无法再调用第三个构造函数。  本人是初学者,还无法从JVM的角度分析问题,同时回应各位大神对文中的错漏进行指出。

1.1K40

Java构造函数调用顺序问题

今天对Java的构造函数调用顺序进行研究,使用的是与C++类似的方法,即不对源码进行研究,而是直接通过打印代码对构造函数调用顺序进行研究。...代码如下,使用的是Java核心技术中的代码,对其进行了改造,构造函数中加入了输出信息 public class ConstructorTest { public static void main...; } 执行结果 object initialization block : 0 static initialization block : 1 constructors3 : 2 构造函数最后调用...最后一点:如果构造器第一行调用了第二个构造器,则执行第二个构造器的主体。 最后还有一点非常重要的内容,构造调用一定要是第一句,否则编译出错。...构造器中只能调用一次其他构造函数,不能调用两次,即无法再调用第三个构造函数。 本人是初学者,还无法从JVM的角度分析问题,同时回应各位大神对文中的错漏进行指出。

70320

【C++】构造函数与析构函数概念简介 ( 构造函数和析构函数引入 | 构造函数定义与调用 | 析构函数定义与调用 | 代码示例 )

一、构造函数和析构函数引入 C++ 语言中 , 创建对象时 , 需要进行对象创建的初始化工作 , 如 : 创建集合数组 , 成员变量设置初始值 ; C++ 头文件中 , 声明类的时候 , 不能对类的成员变量设置初始值..." 构造函数 " 是 C++ 类中的一种特殊的 " 成员函数 " , 该函数不需要用户手动调用 , 而是 C++ 类 实例对象 创建时 , 自动执行的 ; " 析构函数 " 是 构造函数 的 对应相反的函数...创建 C++ 类实例对象时 , 自动调用类的 构造函数 ; 手动调用 : 构造函数 也可以手动调用 , 如调用构造函数的重载函数 ; 3、代码示例 - 构造函数定义与调用 定义了一个 C++ 类 Student...s1, s2; , main 函数执行结束 , 也就是程序终止时 , 会自动调用 ~Student() 析构函数 , 因此程序退出前 , 会自动 2 个 Student 对象调用析构函数 ; 代码示例...析构函数 析构函数 栈内存中定义了 Student s1, s2; 对象变量 , 栈内存的特点是 后进先出 , 创建时 , 第一个构造函数调用的是 s1 的构造函数 , 第二个构造函数调用的是 s2

17620

【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )

构造函数初始化列表 总结 : 初始化列表 可以 类的 成员变量 提供初始值 ; 初始化列表 可以 调用 类的 成员变量 类型的 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数..., 会将 匿名对象 的值赋值给 现有对象 , 赋值完毕后 , 匿名对象仍在本行代码执行结束后销毁 ; 2、代码示例 - 匿名对象 生命周期 下面的代码中 , fun 函数中 , 调用 Student...二、构造函数调用 构造函数 ---- 1、构造函数 中 不能调用 构造函数 构造函数调用 构造函数 是危险行为 ; 构造函数调用 构造函数 , 并不会为本对象进行初始化操作 ; 构造函数调用方式..., 天然就会创建一个 匿名对象 , 如果 没有变量 接收 这个 匿名对象 , 该匿名对象 本行表达式执行完毕后 , 就会被销毁 ; 2、代码示例 - 构造函数调用构造函数 下面的代码中 , 先定义...执行 Student 的构造函数" << endl; } 然后 , 无参的 构造函数中 , 调用 有参构造函数 ; // 构造函数调用 构造函数 是危险行为 Student() { /

18320

#1构造函数调用虚方法 | TW洞见

但如果安装了,构造函数内部给Name赋值和调用Solve时就会在下面产生一个波浪线,即警告:virtual member call in constructor。 ? 这是什么原因呢?...我们构造函数调用虚方法,碍着ReSharper什么事儿了? 其实这个警告就是提醒我们不要在非封闭类型的构造函数调用虚方法或虚属性。但为什么这样做不合适呢?解惑之前,我们先来了解两个概念。...你也许已经猜到了,它的结果是: Base constructor Derived constructor 我们初始化一个对象时,总是会先执行基类的构造函数,然后再执行子类的构造函数。...而由于之前提到的类型初始化顺序,执行Base b = new Derived();这样的代码时,Base的构造函数要早于Derived的构造函数执行,因此执行到foo.Bar()时foo还是个空引用...Virtual member call in constructor的警告是因为,对于Base b = new Derived();这样的代码: 基类构造函数的执行要早于子类构造函数 基类构造函数中对于虚方法的调用

1.2K110

【C++】构造函数初始化列表 ④ ( 构造函数 和 析构函数 调用顺序分析 )

构造函数初始化列表 总结 : 初始化列表 可以 类的 成员变量 提供初始值 ; 初始化列表 可以 调用 类的 成员变量 类型的 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 和 析构函数 调用顺序 说明 1、构造函数调用顺序 一个类 C 中 , 嵌套了 A 和 B 两个类类型的 对象 作为 成员变量 ; 构造函数的...和 B 构造函数 初始化列表 中的顺序 , 与先调用谁的构造函数无关 ; 2、析构函数调用顺序 析构函数调用顺序 与 构造函数调用顺序相反 , 直接 将 构造函数 调用顺序 倒序排列即可 ; 3、...的类型 : 强制初始化列表中调用构造函数 : 如果类中定义了 有参构造函数 , 导致 无参构造函数 被屏蔽 , 那么 所有的构造函数的 初始化列表中 , 都必须强制调用 子对象 的 构造函数 ;...不强制初始化列表中调用构造函数 : 如果类中定义了 无参构造函数 , 或者 有默认的 无参构造函数 , 那么 初始化列表 中不强制调用 子对象 的构造函数 ; 使用如下方式 , 声明 A 和 B 类型的成员变量

25020

【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )

构造函数 ---- 在上一篇博客 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商 ART 下使用的两种类加载器 | InMemoryDexClassLoader...源码 ) 分析到 , InMemoryDexClassLoader 类加载器中 , 调用了父类 BaseDexClassLoader 的 2 个参数的构造函数 ; BaseDexClassLoader...构造函数如下 , 构造函数中创建了 DexPathList 对象 , 并赋值给了 pathList 成员 ; BaseDexClassLoader 构造函数源码 : /** * 用于各种基于dex...---- DexPathList 构造函数中 , 调用了 makeInMemoryDexElements 方法创建 DEX 相关的 Element 元素 ; /** * 一对条目列表,与{@code...---- makeInMemoryDexElements 方法中 , 根据内存中的字节数组数据 , 获取 DexFile , 将内存数据传入了 DexFile 的构造函数 ; 注意 : 传入 DexFile

1.3K40
领券