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

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

初始化代码 ---- 1 . init 代码引入 : 主构造函数没有函数体 , 不能执行任何代码 ; 主构造函数初始化相关操作可以放在 init 初始化代码中 ; 2 . init 初始化代码...: 一个类中可以定义多个 init 代码 , 其执行顺序是按照代码顺序从上到下执行 ; 3 ....代码执行顺序 : init 初始化代码 , 与类的属性定义优先级相同 , 对象实例初始化时 , 会按照在类中定义的顺序 , 依次执行类属性初始化和 init 初始化代码 ; 4 ....主构造函数参数 和 成员变量访问方式 ---- 1 . 主构造函数参数访问性 : 可以 类属性字段初始化赋值 和 init 初始化代码中 访问主构造函数中的参数变量值 ; 2 ....初始化代码 : init 代码等同于主构造函数函数体 , 当次构造函数将操作委托给主构造函数时 , 会先执行 init 初始化代码 , 然后再运行次构造函数体 ; IX .

3.8K10

【Kotlin】类的初始化 ③ ( init 初始化 | 初始化顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化代码 -> 次构造函数代码 )

文章目录 一、init 初始化 二、初始化顺序 一、init 初始化 ---- Kotlin 类中 , 可以定义 init 初始化 , 在其中可以为 变量赋值 , 执行一些检查相关的代码 ,...该 init 初始化 创建类实例对象 时执行 ; 代码示例 : 在下面的代码中的 init 初始化 中 , 对 name 属性进行了修改 , 检查了 age 属性是否合法 ; class Hello...实例对象 各种初始化操作的 初始化顺序 ; class Hello( // 主构造函数, 直接在主构造函数中定义属性 var name: String, // 该值是临时变量,...; 最后 , 为 gender 赋值 , 这是 init 初始化 中进行的赋值 ; 然后分析 次构造函数 , 如下的 次构造函数的代码中 , 先执行了 主构造函数 , 然后才为 type 属性赋值...} 因此得到了上述初始化操作的执行顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化代码 -> 次构造函数代码

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

    【C++】拷贝构造函数调用时机 ① ( 使用一个对象初始化另外一个对象 | 将一个对象赋值给另外一个对象 )

    初始化新创建的对象 , 使其内容与原对象完全相同 ; " 拷贝构造函数 " 又称为 " 赋值构造函数 " , 该类型构造函数有 4 种调用时机 ; 使用 一个 类实例对象 初始化 另外一个 类实例对象...; // 使用一个对象初始化另外一个对象 // 直接手动 调用拷贝构造函数 Student s2 = Student(s1); 将 一个 类实例对象 赋值给 另外一个 类实例对象 ; // 将一个对象赋值给另外一个对象...; 二、使用一个对象初始化另外一个对象 1、拷贝构造函数调用情况说明 使用 一个 类实例对象 初始化 另外一个 类实例对象 会 自动调用 拷贝构造函数 ; // 使用一个对象初始化另外一个对象 /...Student 类实例对象传递给了 拷贝构造函数 ; 2、代码示例 - 使用一个对象初始化另外一个对象 代码示例 : #include "iostream" using namespace std;...(const Student& s) 构造函数 ; 使用 等号 = 进行赋值操作 , 与初始化 是 完全不同的两个概念 ; 2、代码示例 - 将一个对象赋值给另外一个对象 代码示例 : #include

    21610

    【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )

    文章目录 一、使用闭包创建接口对象 ( 接口中有一个函数 ) 二、使用闭包创建接口对象 ( 接口中有多个函数 ) 三、完整代码示例 一、使用闭包创建接口对象 ( 接口中有一个函数 ) ---- Groovy...中 , 声明一个接口 , 接口中定义了 1 个抽象函数 , interface OnClickListener { void onClick() } 传统创建接口的方法如下 , 创建一个匿名内部类...使用闭包创建接口, 接口中有 1 个函数 interface OnClickListener { void onClick() } void setOnClickListener (OnClickListener...( 接口中有多个函数 ) ---- 如果接口中定义了多个函数 , interface OnClickListener2 { void onClick() void onLongClick...() } 则在创建闭包时 , 闭包后面添加 as 接口名 代码 , 如下 : // 使用闭包创建接口对象 OnClickListener2 listener2 = { println "OnClickListener2

    4.5K30

    dotnet C# 多次对一个对象调用构造函数会发生什么

    今天来玩一点变态的,使用反射获取到某个类型的构造函数,接着多次对此类型的某个对象调用构造函数方法。...详细请看 dotnet C# 只创建对象不调用构造函数方法 此时虽然 Foo 对象 foo 创建了,但是此对象还没有经过构造函数。...C# 中,其实构造函数也是一个函数而已,如上面代码,只有写给 F2 赋值的逻辑,而没有给 F1 赋值的逻辑。...因此调用构造函数的时候,只会改变 F2 属性的值,而不会更改 F1 属性的任何值。...也因为构造函数只是一个函数,因此调用多次就和调用一个方法多次是一样的 本文所有代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd

    78010

    《C++Primer》第十八章 用于大型程序的工具

    如果异常发生在构造函数中,则当前的对象可能只构造了一部分(有些成员已经初始化了,另一些成员异常发生前也许还没有初始化)。即使某个对象构造了一部分,我们也要确保已构造的成员能被正确地销毁。...函数try语句构造函数 要想处理构造函数初始值抛出的异常,我们必须将构造函数写成函数try语句。...(e); } 需要注意在初始化构造函数的参数时也可能发生异常,这样的异常不属于函数try语句的一部分,函数try语句只能处理构造函数开始执行后发生的异常。...Endangered 最后初始化Panda 1.2 继承的构造函数与多重继承 C++11新标准中,允许派生类从它的一个或几个基类中继承构造函数。...构造函数与虚继承 虚派生中,虚基类是由最低层的派生类初始化的。以我们的程序为例,当创建Panda对象时,由Panda的构造函数独自控制ZooAnimal的初始化过程。

    1.4K20

    C++ 面向对象

    C++ 面向对象 c++创建对象的时候如果使用new运算符,将会返回返回一个指针,指向堆中的内存地址 类,对象 类定义 定义一个类,用来描述一个盒子 #include using...构造函数 析构函数 构造函数 创建对象的时候会执行构造函数 #include using namespace std; class Line{ public: void setLength...,而不是根据初始化列表进行初始化的 拷贝构造函数 一种特殊的构造函数。...这里会涉及到深拷贝和浅拷贝的问题,深拷贝开辟空间,浅拷贝进行引用 使用的场景 把对象传入函数对象返回函数 深拷贝,浅拷贝,即使用同类型的对象初始化一个新的对象中有指针变量,动态内存分配的时候,必须设置一个拷贝构造函数...int main(){ // 进行拷贝初始化 Line line1(10); //Line line3 = line1; Line line2 = line1; // 调用拷贝构造函数,创建了一新的空间

    44130

    C++拷贝构造函数(深拷贝,浅拷贝)

    例如:类X的拷贝构造函数的形式为X(X& x)。   当用一个初始化过了的自定义类类型对象初始化一个构造对象的时候,拷贝构造函数就会被自动调用。...以下情况都会调用拷贝构造函数:   一个对象以值传递的方式传入函数体   一个对象以值传递的方式从函数返回   一个对象需要通过另外一个对象进行初始化。   ...浅拷贝和深拷   某些状况下,类内成员变量需要动态开辟堆内存,如果实行位拷贝,也就是把对象里的值完全复制给另一个对象,如A=B。...这时,如果B中有一个成员变量指针已经申请了内存,那A中的那个成员变量也指向同一内存。这就出现了问题:当B把内存释放了(如:析构),这时A内的指针就是野指针了,出现运行错误。   ...当用一个已经初始化过了的自定义类类型对象初始化一个构造对象的时候,拷贝构造函数就会被自动调用,如果你没有自定义拷贝构造函数的时候,系统将会提供给一个默认的拷贝构造函数来完成这个过程,上面代码的复制核心语句就是通过

    1.1K70

    C++异常

    try: try 中的代码标识将被激活的特定异常,它后面通常跟着一个或多个 catch 。   如果有一个抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。...函数调用链中异常栈展开匹配原则: 首先检查throw本身是否try内部,如果是再查找匹配的catch语句。如果有匹配的,则调到catch的地方进行处理。...只需要在main函数中创建父类对象的引用,当子类中有错误抛出的时候,会返回到main函数的父类,父类指向子类,就完成了一次多态调用,调用子类重写的what()函数。...) { cout << "Unkown Exception" << endl; } } return 0; } ✈️异常安全 构造函数完成对象构造初始化,最好不要在构造函数中抛出异常...构造函数与析构函数内抛异常是一件很严重的事情,如果构造函数有两个指针需要初始化,当第一个指针进行初始化的时候却抛异常了,这个时候就会跳出构造,导致对象创建不完整,除了作用域会调用析构函数,而类构造函数中有一个指针没有初始化

    8910

    Java中类的静态代码构造代码构造方法、普通代码

    System.out.println("静态代码"); } } b.执行时机 静态代码类加载的时候执行,并且仅执行一次,如果一个中有多个静态代码,将按照书写顺序执行。...c.构造代码的作用 和构造函数的作用类似,都能对对象进行初始化,并且只要创建一个对象构造代码都会执行一次。...但是反过来,构造函数则不一定每个对象建立时都执行(多个构造函数情况下,建立对象时传入的参数不同则初始化使用对应的构造函数)。   ...c.特点 1.构造函数的功能主要用于类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。...;   3.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。

    3.5K10

    多个jvm实例_java类的实例

    一、概述 我们知道,一个对象可以被使用之前必须要被正确地实例化。而实例化实际指的就是以一个java类为模板创建对象/实例的过程。...(类的一个初始化过程和对象的三个初始化过程) 二、类的四种实例化方式 1.使用new关键字 这也是最常见最简单的创建对象的方法。通过这种方法,我们可以借助类的构造函数实例化对象。...,这个方法比起Class自带的更强大: 它可以调用类中有构造方法和私有构造方法创建对象!...2.对象变量的初始化 我们定义对象中的变量的同时,还可以直接对对象变量进行赋值。它们会在构造函数执行之前完成这些初始化操作。...3.代码初始化 我们一般指的代码构造代码和静态代码,静态代码初始化时就执行,而构造代码类一创建就执行,也优先于构造方法。

    1.9K10

    day5(面向对象2)

    构造函数 构造函数和一般函数写法上有不同 构造函数对象一建立就运行, 而一般方法是在对象调用的时候才运行,是给对象添加对象具备的功能。...一个对象建立,构造方法运行 构造代码 作用:给对象初始化对象一建立就运行,而且优先于构造函数执行。...和构造函数的区别: 构造代码是给所有的对象初始化构造函数是给特定的对象初始化构造代码 中定义的是不同对象共性的特性....this到底代表的是什么 this:就代表本类的对象,到底代表哪一个呢?...this代表它所在函数所在对象的引用 简单说:哪个对象调用this所在的函数,this就代表哪个对象 this关键字构造函数间的调用 this语句:用于构造函数间互相调用 this语句只能放在构造函数的第一行

    13120

    为什么不允许使用 Java 静态构造函数

    由于构造函数不是类属性,因此有理由认为它不能是静态的。 静态 / 方法无法访问非静态变量 我们知道静态方法不能访问非静态变量。静态也是如此。 现在,构造函数的主要目的是初始化对象变量。...因此,如果我们将构造函数设置为静态,则无法初始化对象变量。这将破坏使用创建对象构造函数的全部目的。因此,使构造函数为非静态是合理的。 注意,我们不能this静态方法中使用引用对象变量。...我们可以定义一个类层次结构,其中子类构造函数调用超类构造函数。这是通过super()方法调用完成的。大多数情况下,JVM自动调用超类构造函数,但有时如果超类中有多个构造函数,我们必须手动调用它们。...请注意,我们无法将参数传递给静态,因此,如果您要初始化静态变量,则也可以常规构造函数中执行此操作。...我们可以使用静态以及构造函数本身来初始化静态变量。

    3.1K80

    C++ Primer ---类(读书笔记)

    构造函数 类通过一个或几个特殊的成员函数来控制其对象初始化过程,这些特殊的函数就是构造函数构造函数的任务是初始化对象的数据成员,无论何时,只要类的对象被创建,就会执行构造函数。...拷贝初始化、赋值初始化 与 析构 当我们初始化的时候,以值的方式传递或者返回一个对象等,会发生拷贝操作。 当我们使用赋值运算符的时候,会发生赋值操作。...当对象不再存在,比如当一个局部对象所在结束时,会被销毁,数组或容器中被销毁时,其中存储的对象也会被销毁。...可以添加自定义构造函数来进行初始化对象。...我们编写程序的时候,如果要调用一个函数或者是变量,编译器会去寻找所用名字的最佳匹配声明 现在名字当前中寻找其声明语句,只考虑名字使用之前的声明 如果没有找到,继续查找外层的作用域。

    51020

    拷贝构造与深浅拷贝

    ---- 一、拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,而且任何额外参数都有默认值,则此构造函数是拷贝构造函数。...class person { public: person(); //默认构造函数 person(const person&);//拷贝构造函数 }; 拷贝构造函数的第一个参数必须是一个引用类型...如果没有定义一个拷贝构造函数,编译器会自动为我们定义一个,与合成拷贝构造函数。 合成拷贝构造函数用来阻止我们拷贝该类类型的对象。合成的拷贝构造函数会将其参数的成员逐个拷贝到正在创建的对象中。...s3=string(100,'2'); 直接初始化,实际要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数。...拷贝初始化,要求编译器将右侧运算对象拷贝到正在创建的对象中,如果有需要还要进行类型转换。

    16920

    【Java】Java中类的初始化顺序(静态方法,静态,非静态,最后有流程图)

    当你知道了上边的规则之后,我们来看代码,类中有五个静态属性,一个非静态属性,一个静态一个非静态还有一个静态方法。我们优先构建静态方法、属性和静态,之后构建非静态。...类的一个对象进行初始化,按照代码顺序从上往下先构建静态的属性、方法和静态,之后构建非静态和非静态属性。...遇到这种创建本类对象的,我们按照以下的第二条规则。 一个中有静态的本类对象,创建的过程从上到下先执行本类的非静态和非静态属性,最后执行构造方法。...那么我们初始化t1的时候,就要从上向下找非静态和非静态属性(如果有的话 ),最后执行构造方法。...System.out.println("父类静态"); } public InitializeDemoFather(){ System.out.println("父类构造函数

    30810

    Java中静态代码构造代码构造函数、普通代码

    Java中,静态代码构造代码构造函数、普通代码的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。...如果一个中有多个静态代码,会按照书写顺序依次执行。后面比较的时候会通过具体实例来证明。   ③、静态代码的作用   一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码。...③、构造代码的作用    和构造函数的作用类似,都能对对象进行初始化,并且只要创建一个对象构造代码都会执行一次。...java中普通函数可以和构造函数同名,但是必须带有返回值;   2.构造函数的功能主要用于类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。...;   4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。

    1.6K20
    领券