scala总结

This is about scala

Posted by PsycheLee on 2015-11-08

Scala总结

var val

  • var定义变量,值可变
  • val定义常量,只能被赋值⼀次
  • 建议使⽤val,val不满⾜时候再使⽤var
  • 类中使用var声明的字段默认有getter setter方法, val只有getter

数据类型

常用

Int、Long、Float、Double、Boolean、String

特殊

- Unit

表示⽆值,和其他语⾔中void等同。⽤作不返回任何结果的⽅法的结果类型。Unit只有⼀个实例值,写成()。

- Null null 或空引⽤
- Nothing

Nothing类型在Scala的类层级的最底端;它是任何其他类型的⼦类型。

- Any

Any是所有其他类的超类

- AnyRef

AnyRef类是Scala⾥所有引⽤类(reference class)的基类

image-20210305202726972

占位符_

** 定义val不能使用

var name:String = _ 默认值null

var d:Double = _ 默认值0.0

var i:Int = _ 默认值0

var b:Boolean =_ 默认值 false

构造器

主构造器

Class person(name:String,age:Int)

new class 类中除了⽅法不执⾏(构造⽅法会执⾏),其他都执⾏

附属构造器

def this(参数){}

⼀个附属构造器中第⼀⾏必须要调⽤主构造器或者其他附属构造器 this( , )附属构造器⽤来补充主构造器,多个附属构造器类型不同,和名字⽆关

class 与 object

  • object相当于java中的单例,object中定义的都是静态的

  • object修饰的东⻄,调⽤时不需要new,直接 .属性/⽅法

  • object xxx 和 class xxx是伴⽣类 和 伴⽣对象,⼆者互为伴⽣
    伴⽣类和伴⽣对象可以互相访问私有变量

  • class可以传参;object不可以传参,除⾮⽤apply⽅法

    apply方法

    1
    2
    3
    4

    object val b =ApplyTest 不会调用apply方法
    object val b =ApplyTest() 调用apply方法
    class val c = new ApplyTest() 对象(),调用class中的apply方法

class 与 case class

  • case class 默认实现了equals hashcode方法,重写toString
  • 初始化的时候,不需要new
  • 默认是可以序列化的,也就是实现了Serializable
  • ⾃动从scala.Producet中继承了⼀些函数
  • case class构造函数的参数是publiec级别的,可以直接访问
  • ⽀持模式匹配

case class 与 case object

  • case class的toString⽅法和==被重写、序列化

  • case class T() 必须带括号

  • case object T 不能带括号,不能有参数

Array

定义

不可变⻓数组定义:Array[类型](数组内容) new Array[类型](⻓度)

可变⻓数组定义:

​ import scala.collection.mutable.ArrayBuffer
​ ArrayBuffer[类型](数组内容)

赋值

a(0)=“aa”
不改变原数组向后追加成新数组a1:val a1 = arr :+ 1
不改变原数组向前追加成新数组a2:val a2 = 1 +: arr

数组转字符串

arr.mkString(“分隔类型”)
arr.mkString(“开头”, “分隔类型”, “结尾”)
数组插⼊数据: .insert(位置, 内容)
数组删除数据: .remove(位置)
数组移除n个数据:
.trimStart(n)
.trimEnd(n)
变⻓转定⻓: .toArray
定⻓转变⻓: .toBuffer

List