Scala学习笔记(一)

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

你可能感兴趣的:(Scala学习笔记(一))