scala支持关联映射,如能够用(key -> value)表示一个键值对java
scala中的全部类型都是对象,包括基本数据类型编程
scala中的case语句用来判断接收的消息,比java中的switch...case...更专一数组
receive{ case msg => action() }并发
scala行动类实现了线程之上的并发抽象,经过发送消息相互通讯,每一个行动类都自动维护一个消息队列,而且实现发送消息和接收消息的基本操做。app
receriver ! msg函数式编程
scala是静态类型的,也即在编译以前就须要肯定参数的类型,与C++的参数化类型类似函数
scala包含两种类型的变量,val变量至关于java中的const,var则是常规变量spa
scala中的基本数据类型,来源于Java中对相应数据类型的类封装,String类型则相同线程
scala具备类型推断功能,在可由上下文推断的状况下,能够省略类型说明,如:val x = 4scala
scala经过def关键字定义函数,在缺省显式return语句的状况下,返回函数最后计算获得的值
scala采用println直接输出到标准输出,而不用System.out.println
scala中的数组索引是args(0),而非java中的args[0]
scala数组Array包含方法foreach(action),其中action是一个传入的函数,例如:x => println(x)
scala提供指令式:for(arg <- args) println(arg)
scala中的全部操做符都是方法的调用,例如:1+2,等效于(1).+(2)
0 to 5,等效于(0).to(5),x(1)="scala",等效于(x).update(1,"scala"),x(1)等效于(x).apply(1)
scala经过定义伴生对象,分离静态成员,相似于java中的static关键字
scala Array数组中全部对象都具备相同类型,实例化后数组长度不能再改变,可是数组元素值能够改变
List数组中的元素值则不可改变,List有"::"实现叠加功能,操做符会建立一个新的List,List不支持append操做
scala包含新的容器对象Tuple,元组能够包含多个不一样类型的对象,例如:val tp = (1,2,"scala"),中tp就是一个Tuple[Int,Int,String]对象,tp._1表示取第一个元素
scala中Set和Map类型有可变和不可变两种实现方式,分别保存在不一样的包中
scala没有"++"操做符
scala提供trait关键字,描述对象的特质,相似于java中的接口interface
scala提倡函数式编程风格,减小var变量的使用,这样能够获得简洁可读性更强的代码
scala从文件中读取数据,Source.fromFile("filename").getLines()返回一个Iterator[String]对象
scala中的"=="操做符比较的是值的相等性,提供函数eq、ne比较引用的相等性
每一个类都继承自Any,scala中“==”和equals相同,能够经过重写equals方法改变“==”的意义。类Any有两个子类,AnyVal和AnyRef。AnyVal是scala中内建值类的父类,Byte、Short、Char、Int、Long、Float、Double、Boolean、Unit,前面8个和java中的基本类型相对应。Unit大约至关于Java的Void类型,只有一个实例,写成()。在java平台上,AnyRef实际上就是java.lang.Object的别名。
scala类和java类的不一样还在于其继承了一个名为ScalaObject的记号特质,目前为止ScalaObject只包含一个方法名为$tag,在内部使用以加速模式匹配。
Null类是null引用对象的类型,它是每一个引用类的子类,Null不兼容值类型,不能把null赋给整数变量。Nothing类型在scala类层级的最底端,它是任何其余类型的子类型,然而根本没有这个类型的任何值,Nothing的一个用处是标明程序的不正常终止。