注:1.本文主要参考自《快学Scala》2.使用jd-gui反编译

Scala的构造方法跟Scala很相似,也可以有任意多的构造器。在Scala中构造器分为主构造器和辅助构造器

在Scala中可以包括一个主构造器和任意多个辅助构造器

主构造器

在Scala中,每个类都有主构造器。而且主构造器的定义是跟类定义交织在一起的。

主构造器的参数是直接放置在类名后面的,如下:

classPerson(val name:String,val age:Int) {//your code

}

主构造器还会执行类语句(不属于任何方法的语句)

classPerson(val name:String,val age:Int) {

println("hello") //该语句属于主构造器

}

主构造器让人感到疑惑的地方主要在于:构造器参数使用不同的形式传递,生成的class文件也是不同的,我们随便列举几种

形式1-val类参数:(在这种形式中,类参数会作为class文件的字段,并且会生成scala形式的getter)

classPerson4(val name:String) {

}

生成的class文件如下:

public classPerson4

{private finalString name;publicString name()

{return this.name;

}publicPerson4(String name) {}

}

形式2-var参数:(该形式的类参数会作为class文件的字段出现,并且会生成scala形式的getter和setter)

classPerson4(var name:String) {

}

生成的class文件如下:

public classPerson4

{privateString name;publicPerson4(String name) {}public void name_$eq(String x$1)

{this.name = x$1;

}publicString name()

{return this.name;

}

}

形式3-普通方法参数

1.如果类参数没有在类方法中用到,该类参数相当于只用于类的主构造函数。

classPerson4(name:String) {

}

该形式生成的class文件如下

public classPerson4

{publicPerson4(String name) {}

}

2.如果类参数在类方法中有用到的话,相当于private[this],即相当于对象私有

classPerson4(name:String) {

def sayHi(){

println(name)

}

}

生成的class文件如下

public classPerson4

{private finalString name;public voidsayHi()

{

Predef..MODULE$.println(this.name);

}publicPerson4(String name) {}

}

主构造器参数还可以是private var、private val形式,这些都比较简单,跟val、var相似,只是get或者set也是private的而已

读者可以自己验证。

辅助构造器

在scala中,辅助构造器的名字必须是this(相比于java中,当类名字改变的时候,就不必在修改构造函数的名字了),而且每个辅助构造器都必须以

主构造函数或者先前定义的辅助构造器开始定义,否则编译不通过。

classPerson4(name:String) {

var age:Int= 0var city:String= ""defthis(name:String,age:Int,city:String){this(name)this.age =age

}

}

scala 主构造函数_Scala主构造器和辅助构造器相关推荐

  1. Scala主构造器和辅助构造器详解

    Java构造器 基本语法 [修饰符] 方法名(参数列表) {构造方法体 } 细节说明 1)在 Java 中一个类可以定义多个不同的构造方法(构造器),构造方法重载 2)如果程序员没有定义构造方法,系统 ...

  2. scala中主构造器和辅助构造器

    class Person (var id: Int , var name: String) {//主构造器//在主构造器中声明了类型 在这个地方就不能再次声明类型 并且可以不用写 id 和 name ...

  3. scala 主构造函数_Scala-构造函数

    /* scala的构造函数分为主构造函数和辅助构造函数. 一.主构造函数 在Scala中,每个类都有主构造函数,和类的定义交织在一起. 一个Scala类的主构造函数包括:1.构造函数的参数:2.类体中 ...

  4. 【Kotlin】Kotlin 类的继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )

    文章目录 I . 类继承基本方式 II . 使用 final 禁止类继承 / 方法重写 III . 父类没有主构造函数 IV . 父类有主构造函数 V . 父类构造函数与子类构造函数总结 I . 类继 ...

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

    文章目录 I . 主构造函数 II . 主构造函数声明属性 III . init 初始化代码块 IV . 主构造函数参数 和 成员变量访问方式 V . 主构造函数 可见性 设置 VI . 次构造函数 ...

  6. scala 主构造器_Scala主构造器深度

    scala 主构造器 In this post, we are going to discuss about Scala Primary Constructor in depth with real- ...

  7. scala 辅助构造函数_Scala辅助构造函数的深入介绍

    scala 辅助构造函数 Before reading this post, please read my previous post about "Scala Primary Constr ...

  8. scala 主构造函数_在Scala中,如何在类的主构造函数中定义局部参数?

    在Scala中,如何在不是数据成员的类的主构造函数中定义局部参数,例如,仅用于初始化基类中的数据成员? 例如,在下面的代码中,如何在B类的主构造函数中正确定义参数b,以便它只生成临时本地参数而不是数据 ...

  9. C# 的未来:主构造函数

    我们上次提到主构造函数是 2014 年,当时, C# 6 和 VB 12 的候选列表上去掉了主构造函数.去年底,主构造函数重新出现,作为提案#2691 ,现在成为 C# 9 的一个候选项. 主构造函数 ...

  10. Android学习-Kotlin语言入门-变量、函数、语法糖、when、for-in、主构造函数、单例类、函数式API、集合遍历、隐式Intent、Activity生命周期、四种启动模式、标准函数

    探究java语言的运行机制 变量.函数.语法糖 when条件语句 for循环 主构造函数.次构造函数 数据类和单例类 集合的创建与遍历 集合的函数式API 创建菜单 隐式使用Intent Activi ...

最新文章

  1. C语言中的CONST使用
  2. 一批高校调整国庆假期!教育部回应,大学生国庆假期能否离校?
  3. 在原神里钓鱼,有人竟然用上了深度强化学习,还把它开源了
  4. [转载]xcode5时代如何设置Architectures和Valid Architectures
  5. 【项目合作】瓷砖表面打印缺陷识别
  6. 使用Ant制作发布版本
  7. 《云云众声》第95期:业界大事接着看 HP成功收购Aruba;IBM战略变动 前景发展被看好...
  8. Android动画系列 - PropertyAnim 详解
  9. Mysql中max函数取得的值不是最大
  10. Maven 解决parent项目下部分子项目的依赖问题
  11. php6简介,[PHP框架] ThinkPHP6 介绍、安装及配置
  12. ffplay flv mp4 转_FLV与MP4格式视频转换
  13. 时分秒倒计时的js实现
  14. 美国农业初创公司Gotham Greens获2900万美元融资:用大数据运营温室
  15. 零基础做油管搬运二创项目的正确方式,短视频小白玩家套利的可能
  16. Linux Mint 18安装sougou拼音输入法
  17. C++核心编程笔记——内存分区模型(出自b站黑马程序员视频)
  18. 一毕业就失业?应届生错过秋招有多难受
  19. 野火STM32例程学习笔记
  20. 互联网大佬简史:马云/雷军/罗永浩/刘强东...

热门文章

  1. Asterisk 函数
  2. Flash对联广告及关闭按钮的制作
  3. wdcp安装多种php版本共存
  4. 算法(algorithm):#include<algorithm>
  5. 【前端】相信你会用到的一篇笔记---CSS篇(2)
  6. c++输出的值精确到小数点后5位_直击灵魂——圆周率小数点后3位到12411亿位到底有啥用?...
  7. 细数继承与派生(纯干货推荐)1.0
  8. OpenCV(一)---支持向量机 SVM
  9. 安卓手机怎么彻底清理手机内存_手机内存难清理?试试直接删掉这3个文件夹...
  10. python %号_python基础集结号