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

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

文章目录 一、主构造函数定义临时变量 二、主构造函数中定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- 在 Kotlin 类中 , 可以在 类声明 时 在 类名后...定义 " 主构造函数 " ; 在 主构造函数 中 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 在 主构造函数 中 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 的名称..., 每个次构造函数都可以有不同的参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 的 参数设置 参数值 ; 次构造函数中可以实现代码逻辑 , 作为主构造函数的补充 ; 代码示例...: 下面代码中 , 次构造函数 必须 调用主构造函数 , 如 name 和 age 参数必须设置默认值 name = "Jerry", age = 12 ; class Hello( // 主构造函数...---- 在定义 构造函数 时 , 可以为 构造函数 的参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入的值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数有 指定默认值

4.9K20

Scala入门系列终章:类与对象

而在Scala中,由于方法不接受任何参数时可缺省小括号,所以这个区别反倒不那么明显,也就不能通过是否带小括号来区分属性和方法。...除了在类名后增加小括号用于实现主构造器,Scala中的类定义还支持辅助构造器。...以上就是Scala中类的定义和创建对象的常用方法,此外还包括的两个知识点是:主构造器中的变量支持初始化默认值,同时类的方法和属性也支持不同的权限等级,在不做任何显示声明的情况下即为public级别(Scala...另外,上述由类创建对象过程中,都用到了关键字new来实例化一个对象,Scala还支持定义伴生对象apply的方法实现省略new来创建对象的过程,这将在后文给出。...1)伴生类(对象)——Companions 在Scala中,当定义了一个同名的class和object时,这个类和对象互为伴生,即这个class为object的伴生类,这个object为class的伴生对象

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

    Scala学习二-面向对象

    class 类名(var/val 参数名:类型 = 默认值, var/val 参数名: 类型 = 默认值){ //构造代码块 } 如:设置构造器 object OopDemo{ //创建...在java中main方法是静态的,而在scala中没有静态方法,所以在scala中,main方法必须放在一个单例对象中。...,写在object的构造方法体内 object 单例对象名 extends App{ //方法体 } 在kafka中,我们可以看到程序的主入口是kafka.scala //主入口 def main...一个class和obect具有相同的名字,这个object称为伴生对象,这个class称为伴生类 注意: 伴生对象必须要和伴生类一样的名字 伴生对象和伴生类在同一个scala源文件中 伴生对象和伴生类可以相互访问...中,支持创建对象的时候,可以不写new的操作,要想实现不写new操作,就需要通道伴生对象的appky方法来实现 定义apply方法 object 伴生对象名{ def apply(参数名:参数类型

    89321

    原 荐 Scala的面向对象

    而直接写在类的体中的既不是类的成员变量也不是成员函数的部分,会自动收集为构造函数的体。     scala声明主构造的形式是在类右侧声明,如果不声明,Scala也提供了默认构造器。...示例: //scala中的类不需要明确声明一个构造器,而是直接将构造参数通过构造参数列表声明为类的一部分 class Person(v1: String, v2: Int) { //创建一个类,并定义类里的两个成员变量.../而直接写在类的体中的既不是类的成员变量也不是成员函数的部分,会自动收集为构造函数的体。...(object)     1)scala中的类(class)不能定义静态成员(或静态方法),而代之以定义单例对象来替代。     ...6)类和他的伴生对象可以互相访问其私有成员。     7)以伴生的方式为类增加静态成员成为了可能。     8)单例对象不能new,因此也没有构造参数。

    853130

    带你快速掌握Scala操作———(4)

    语法 class 类名(var/val 参数名:类型 = 默认值, var/val 参数名:类型 = 默认值){ // 构造代码块 }  主构造器的参数列表是直接定义在类名后面,添加了val/var...表示直接通过主构造器定义成员变量  构造器参数列表可以指定默认值  创建实例,调用构造器可以指定字段进行初始化  整个class中除了字段定义和方法定义的代码都是构造代码 示例 1....定义一个Person类,通过主构造器参数列表定义姓名和年龄字段,并且设置它们的默认值 2. 在主构造器中输出"调用主构造器" 3....创建"man40"对象,不传入姓名参数,指定年龄为40,打印对象的姓名和年龄 参考代码 object _06ConstructorDemo { // 定义类的主构造器 // 指定默认值 class...这个object称为伴生对象,这个class称为伴生类  伴生对象必须要和伴生类一样的名字  伴生对象和伴生类在同一个scala源文件中  伴生对象和伴生类可以互相访问private属性 示例 示例说明

    70730

    Scala

    新的函数返回⼀个以原有的第⼆个参数作为参数的函数 例如: 1 def mul(x:Int,y:Int) = x * y //该函数接受两个参数 2 def mulOneAtTime(x:Int) = (...7、scala中的伴生类和伴生对象是怎么一回事   在 Scala 中,每个类都可以有一个同名的伴生对象(companion object),用于存放静态方法和属性,或者说是类级别的方法和属性。...具体来说,一个类和它的伴生对象必须在同一个源文件中定义,并且它们的名称必须相同。   伴生类和伴生对象之间可以互相访问对方的私有成员。...样本类具有以下特性:   (1)⾃动添加与类名一致的构造函数(这个就是前面提到的伴生对象,通过apply⽅法实现),即构造对象时,不需要new;   (2)样本类中的参数默认添加val关键字,即参数不能修改...先讲⼀个概念——提取器,它实现了构造器相反的效果,构造器从给定的参数创建⼀一个对象,然⽽而提取器却从对象中提取出构造该对象的参数,scala标准库预定义了⼀些提取器,如上⾯面提到的样本类中,会⾃动创建⼀

    19230

    多面编程语言Scala

    这段代码有以下值得注意的地方: 我们可以把字段定义和构造函数直接写在Scala的类定义里,其中,关键字val的含义是“不可变”,var 为“可变”,Scala的惯用法是优先考虑val,因为这更 贴近函数式编程风格...伴生对象与伴生类 伴生对象与伴生类在Scala的面向对象编程方法中占据极其重要的位置,例如Scala中许多工具方法都是由伴 生对象提供的。...这是一个典型的伴生类和伴生对象的例子,注意以下说明: 伴生类Person的构造函数定义为private,虽然这不是必须的,却可以有效防止外部实例化Person类,使得Person类只能供对应伴生对象使用...; 每个类都可以有伴生对象,伴生类与伴生对象写在同一个文件中; 在伴生类中,可以访问伴生对象的private字段Person.uniqueSkill; 而在伴生对象中,也可以访问伴生类的private方法...这在函数式编程中称为柯里化(Curry),柯里化可以把函数定义中原有的一个参数列表转变为接收多个参数列表。在函数式编程中,一个参数列表里含多个参数的函数都是柯里函数,可以柯里化。

    2.5K40

    Scala最基础入门教程

    // 主构造器参数 分为3类: // 没有修饰符: 作为构造方法中的传入参数使用 // val 修饰: 会自动生产同名的属性 并且定义为val // var 修饰 : 会自动生产同名的属性 并且定义为...object中定义的所有属性与方法、函数,除开private修饰的,都可以通过对象名.属性、对象名.方法、对象名.函数 的方式调用,可以理解为java中的static修饰的。...用以统一面向对象编程和函数式编程的风格。 当使用new关键字构建对象时,调用的其实是类的构造方法,当直接使用类名构建对象时,调用的其实时伴生对象的apply方法。...,并且伴生对象中自动提供了一些常用的方法,如apply、unapply、toString、equals、hashCode和copy。...构造器中的每一个参数都成为val,除非它被显式地声明为var(不建议这样做) 3、偏函数中的模式匹配 偏函数也是函数的一种,通过偏函数我们可以方便的对输入参数做更精确的检查。

    68370

    大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    } // object ScalaPerson 是伴生对象,将静态的内容写到该对象中 // object ScalaPerson 编译后生成 ScalaPerson$.class // 对于伴生对象的内容...-apply 方法   在伴生对象中定义 apply 方法,可以实现: 类名(参数) 方式 来创建对象实例。...:new 出来     val p1 = new Pig("小花猪")     println("p1.name="+p1.name)     // 现在的方式     // 在伴生对象中自定义 apply...嵌套类的使用1   请编写程序,定义 Scala 的成员内部类和静态内部类,并创建相应的对象实例。...(2)当同时有隐式值和隐式参数的默认值的时候,隐式值的优先级高。 (3)当隐式参数默认值匹配不到隐式值时,如果有隐式参数默认值的话,会使用默认值。如果没有隐式参数默认值的话,会运行报错。

    1.4K20

    Scala:面向对象、Object、抽象类、内部类、特质Trait(二)

    语法 class 类名(var/val 参数名:类型 = 默认值, var/val 参数名:类型 = 默认值){ // 构造代码块 } [!...NOTE] 主构造器的参数列表是直接定义在类名后面,添加了val/var表示直接通过主构造器定义成员变量 构造器参数列表可以指定默认值 创建实例,调用构造器可以指定字段进行初始化 整个class中除了字段定义和方法定义的代码都是构造代码...示例 定义一个Person类,通过主构造器参数列表定义姓名和年龄字段,并且设置它们的默认值 在主构造器中输出"调用主构造器" 创建"张三"对象(姓名为张三,年龄为20),打印对象的姓名和年龄 创建"空...这个object称为伴生对象,这个class称为伴生类 伴生对象必须要和伴生类一样的名字 伴生对象和伴生类在同一个scala源文件中 伴生对象和伴生类可以互相访问private属性 示例 示例说明 参考代码...定义 定义apply方法 object 伴生对象名 { def apply(参数名:参数类型, 参数名:参数类型...) = new 类(...) } 创建对象 伴生对象名(参数1, 参数2...)

    88110

    02.Scala:面向对象、Object、抽象类、内部类、特质Trait

    语法 class 类名(var/val 参数名:类型 = 默认值, var/val 参数名:类型 = 默认值){ // 构造代码块 } [!...NOTE] 主构造器的参数列表是直接定义在类名后面,添加了val/var表示直接通过主构造器定义成员变量 构造器参数列表可以指定默认值 创建实例,调用构造器可以指定字段进行初始化 整个class中除了字段定义和方法定义的代码都是构造代码...示例 定义一个Person类,通过主构造器参数列表定义姓名和年龄字段,并且设置它们的默认值 在主构造器中输出"调用主构造器" 创建"张三"对象(姓名为张三,年龄为20),打印对象的姓名和年龄 创建"空...这个object称为伴生对象,这个class称为伴生类 伴生对象必须要和伴生类一样的名字 伴生对象和伴生类在同一个scala源文件中 伴生对象和伴生类可以互相访问private属性 示例 示例说明 参考代码...定义 定义apply方法 object 伴生对象名 { def apply(参数名:参数类型, 参数名:参数类型...) = new 类(...) } 创建对象 伴生对象名(参数1, 参数2...)

    1.2K10

    Scala学习笔记(四) 类的初步Scala 类相关总结

    Scala 类相关 终于来到面向对象的地方了,虽说函数式编程是 Scala 的特性,让人们觉得 Scala 是更好的 Java。但是在架构层面上一直提倡着:小处用函数式编程,大处用面向对象编程。...构造器 在 java 中定义一个简单的用户类,以及构造函数 public class User { private String name; private String password...单例对象、伴生对象、Case Class、Trait 2.1 单例对象 在Scala学习笔记(二)中,讲述过Scala 中没有静态修饰符 static,在 object 下的成员全部都是静态的,而且 object...相对于伴生对象,单独的 object 对象是独立对象(Standalone Object)。他们的主要用途是可以用于工具类,或者定义 Scala 程序的入口等等。...初始化的时候不需要 new 自动创建伴生对象 默认是可以序列化的,实现了 Serializable 构造函数的参数都是 val 类型的 支持模式匹配。

    46620

    3小时Scala入门

    函数的类型是函数的参数和返回值的类型映射关系, 如 Int => Unit , (Array[Int],String) => Int 。...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。...辅助构造器的名称为this,每个辅助构造器都必须调用一个此前已经定义好的主构造器或辅助构造器。 ? 二十三,单例对象和伴生对象 object定义的对象为单例对象,可以直接使用无需实例化。...实践中我们一般用apply方法来构造对象,而无需用new声明一个对象,从而相当于一个语法糖。 unapply方法是apply方法的逆方法,我们一般用它来从对象中反推得到其构造参数。

    1.6K30

    大数据利器--Scala语言学习(基础)

    在 Scala 当中,函数是一等公民,像变量一样,既可以作为函数的参数使用,也可以将函数赋值给一个变量....1) Scala 中伴生对象采用 object 关键字声明,伴生对象中声明的全是 “静态“内容,可以通过伴生对象名称直接调用。...3) 伴生对象中的属性和方法都可以通过伴生对象名直接调用访问 4) 从语法角度来讲,所谓的伴生对象其实就是类的静态方法和静态变量的集合 5) 从技术角度来讲,scala 还是没有生成静态的内容,只不过是将伴生对象生成了一个新的类...构造参数有且只能有一个 2) 隐式类必须被定义在“类”或“伴生对象”或“包对象”里,即隐式类不能是顶级的(top-level objects) 3) 隐式类不能是 case class(case class...b) 如果 T 是参数化类型,那么类型参数和与类型参数相关联的部分都算作 T 的部分,比如 List[String]的隐式搜索会搜索 List 的伴生对象和 String 的伴生对象。

    1K10

    Scala专题系列(五):类与对象

    Scala 是一个函数式编程语言,也是一个面向对象的编程语言,与 Java、 Python、 Ruby、Smalltalk 等其他语言一样,Scala 在架构层面上提倡的方法是:小处用函数式编程,大处用面向对象编程...1.scala中,主构造器的参数直接放在类名后面 class person(val name:String,val age:Int){ ….. } 主构造器的参数被编译成自段,其值被初始化成构造时传入的参数...,如上面的例子中,name和age成为person类的字段 2:主构造器会执行类定义中的所有语句 构造参数也可以是普通的方法参数,不带val或var,这样的参数如何处理取决于它们在类中如何被定义。...中,几乎可以在任何语法结构中内嵌任何语法结构,可以在函数中定义函数,可以在类中定义类 class Network{ class member{ } } val net = new NetWork...var newNum() = { lastNum += 1 ; lastNum } } 类可以和它的伴生对象相互访问私有特性,且必须是在同一个源文件中 再次回顾apply方法 通常,一个apply方法返回的是伴生类的对象

    57230

    3小时Scala入门

    函数的类型是函数的参数和返回值的类型映射关系, 如 Int => Unit , (Array[Int],String) => Int 。...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。...辅助构造器的名称为this,每个辅助构造器都必须调用一个此前已经定义好的主构造器或辅助构造器。 ? 二十三,单例对象和伴生对象 object定义的对象为单例对象,可以直接使用无需实例化。...实践中我们一般用apply方法来构造对象,而无需用new声明一个对象,从而相当于一个语法糖。 unapply方法是apply方法的逆方法,我们一般用它来从对象中反推得到其构造参数。

    1.6K30

    3小时Scala入门

    函数的类型是函数的参数和返回值的类型映射关系, 如 Int => Unit , (Array[Int],String) => Int 。...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。...辅助构造器的名称为this,每个辅助构造器都必须调用一个此前已经定义好的主构造器或辅助构造器。 ? 二十三,单例对象和伴生对象 object定义的对象为单例对象,可以直接使用无需实例化。...实践中我们一般用apply方法来构造对象,而无需用new声明一个对象,从而相当于一个语法糖。 unapply方法是apply方法的逆方法,我们一般用它来从对象中反推得到其构造参数。

    3.5K20

    Scala学习笔记

    函数的参数默认值,建议有默认值的参数放到参数列表的最后         def sayHello(name:String, msg:String="Hi !")...class,还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类         2)伴生类和伴生对象必须存放在一个.scala文件之中...        3)伴生类和伴生对象,最大的特点就在于,互相可以访问private field     (*)构造器         类似于java中的构造方法         1)主构造器(...* 辅助构造中的参数不可以加val或者var         3)私有构造器             * 私有构造器是针对于主构造器的             * 如果声明了私有构造器,那么只能被他的伴生对象访问...不能定义接受参数的构造器         4)注意object的构造器只会在第一次调用时执行,以后再次调用不会再执行构造器了         在scala中可以用object实现:

    2.6K40

    【Scala篇】--Scala初始与基础

    java switch) 6).高阶函数 二、Scala基础  1.数据类型 ?...2、变量和常量的声明 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int = 10 常量不可再赋值 /** * 定义变量和常量 * 变量 :用 var...scala 中的object是单例对象,相当于java中的工具类,可以看成是定义静态的方法的类。object不可以传参数。...另:Trait不可以传参数  scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。 重写构造函数的时候,必须要调用默认的构造函数。...如果在同一个文件中,object对象和class类的名称相同,则这个对象就是这个类的伴生对象,这个类就是这个对象的伴生类。可以互相访问私有变量。

    78810

    Scala-8.面向对象-构造函数

    Scala类的主构造函数是以下组合: 构造函数参数 在类内部被调用的方法 在类内部执行的语句和表达式 和Java类似,类被实例化的时候它们会被赋值。...辅助构造函数必须用this为名创建 每个辅助构造函数必须从调用之前定义的构造函数开始 一个构造函数通过this调用另一个不同的构造函数 case class里添加的辅助构造函数不是构造函数,是类的伴生对象中的...apply方法 私有构造函数:在类名和构造函数接受的任意参数之间插入一个private关键字,就创建了私有主构造函数 这种写法可以用在单例模式 设置构造参数默认值: class Socket(val...通常需要吧字段定义为Option可以给到一个默认的初始值 * 继承类的构造函数参数:将基类的构造函数的参数定义为var或者val。...* 调用父类的构造函数:在Scala定义子类时,可以在子类定义extends时控制被其主构造函数调用的超类构造函数。

    98540
    领券