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
代表一个表达式单元,可以是语句也可以是具体值。