Scala基础

入门

基本类型

  • Byte

  • Char

  • Short

  • Int

  • Long

  • BigInt

  • Float

  • Double

  • Boolean

  • Unit

val和var的区别

  不管是val还是var,都可以用来定义变量。用val定义的变量是不可变,初始化之后值就固定类似于java的final关键字修饰的变量,用var定义的变量是可变的,可以修改多次。
  不可变只作用于变量本身,而不作用于变量所引用的实例,比如val buffer=new StringBuffer(),这里不可以将buffer重新指向其他stringBuffer但是可以使用buffer的append方法。

RichInt方法

元组和多重赋值

  • 元组是不可变的。

Scala和java的区别

"=="

  • scala中的"=="不管什么类型都是针对值的比较,eq()比较引用

  • java"=="比较引用地址,equals比较值但是对于一些没有重写Object的equals方法的对象,底层使用的是"==",需要重写equals方法。

访问修饰符

  • 如果不指定任何访问修饰符,java是默认为包内可见,scala默认为public

  • java的protected对任何包的派生类加上当前包的任何类,都可以访问,scala只有派生类可以访问。

  • scala可以定义访问修饰符作用的范围。

Scala的构造类

  • 需要类似Java的getter和setter方法可以在属性加上注解@BeanProperty

类继承

  • scala中继承一个基类,重写的方法需要override关键字,只有主构造函数才能往基类构造函数中传参数。

单例对象

伴生对象

  • class对象虽然指定为private但是它的伴生对象仍然可以访问。

自适应类型

  • scala提供三个特殊的类,Nothing(所有类的子类)、Option、Any(相当于java的Object对象)

容器和类型推导

Any类型

  • Any类型下包含AnyRef和AnyVal,最下层是Nothing,它是所有类的子类,Any是一个抽象类。

  • AnyRef会直接映射为Object,AnyVal和Any会类似于泛型擦除的操作映射给Object

Option类型

传递变参

协变和逆变

  • 将子类实例的容器赋给基类容器的能力称为协变(covariance)。将超类实例的容器赋给子类容器的能力称为逆变(contravariance)。默认情况下,Scala对二者都不支持。

  • 可以使用Parent<:Son,来完成协变

函数值和闭包

curry化

  • curry化可以把函数从接收多个函数转换成接收多个参数列表。

参数的位置标记法

  • 如果某个参数在函数中仅使用一次可以使用_表示。

Execute Around Method模式

偏函数

  • 调用函数可以说成是将函数应用于实参。如果传入所有的预期的参数,就完全应用了这个函数。如果只传入几个参数,就会得到一个偏应用函数。这给了你一个便利,可以绑定几个实参,其他的留在后面填写。

Trait和类型转换

选择性实现

隐式类型转换

  • 将类型通过其他类转换成其他类型的方式就是隐式子转换

Scala容器

Set

  • scala提供可变容器和不变容器,在多线程中可以使用不变容器,这样也可以保证线程安全。

Map

  • 存在可变和不可变Map

List

  • 只有不可变list,可变list可以使用Java或者ListBuffer

for表达式

模式匹配

异常处理

最后更新于