Scala学习笔记
1 val声明常量,var声明变量,使用val时相当于java的final修饰符是不可变的。
2 class中的内容都是非静态的,而object中的都是静态的,可以静态调用。在class中是无法定义main方法。
3 方法声明采用def 方法名(参数:参数类型, ...) : 返回类型 = {} 的形式:
- 多个参数使用
,分隔,无参数时参数列表以及括号可以省略; - 无返回值时返回类型可以省略,大括号直接跟在参数列表后;
- 有返回值时必须在后面加上
=;
4 scala采用类型推断(type inference),编译器会通过上下文推断类型信息。
5 在scala中函数和方法是两个不同的概念,函数可以作为句柄的一部分而方法不行。
6 若无return语句,最后一个有值的语句的值会作为返回值。
7 for循环语句:
for(i <- 1 to 10)
for(i <- 0 util myArray.length)
for(value <- myArray)
8 扩展类可以使用extends关键字,但是一个class只能扩展一个类;
9 特征/特质trait, 类似于java的interface,使用with关键字来使用特质,一个类可以with多个trait,这点与java一致。区别在于,类可以不一定实现trait,但是要在类名上加上abstract修饰符。
10 extends和with的关系:extends后的语句是一体的:
class MyClass extends AnyRef with T1 with T2 with T3
这个类声明实际上应该是
class MyClass extends (AnyRef with T1 with T2 with T3)
因此一个类要“使用”某个trait,必须首先扩展一个类,默认为AnyRef,再使用扩展的类去间接使用trait。
11 模式匹配,可以使用switch,但更常用的是match关键字:
x match {
case 1 => "one"
case "two" => 2
case y: Int => "Scala.Int"
case _ => "many"
}
_表示其它值
12 异常处理,使用try catch finally三级异常处理机制,使用throw抛出异常:
try {
//Did something
} catch {
case e : Exception => //handle exception
} finally {
throw new RuntimeException("balabala")
}
19 类型的上下界:
-
U >: T:下界, U必须是T的本身或者父类; -
S <: T:上界, S必须是T的本身或者子类;
20 Unit类型是一种值类型, 仅用来表明方法的返回类型,Unit代表一个表达式单元,可以是语句也可以是具体值。