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表达式
模式匹配
异常处理
最后更新于