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)的基类
占位符_
** 定义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