变量
-
val : 不可变变量
-
var: 可变变量
-
lazy val: 使用时初始化变量
变量声明
声明类
class Person(val name: String, var age: Int)
分号
= , { . 表示下一行还有代码
代码块
方法和变量可以定义为单行,也可以嵌套。
注释
/*
This is a multiline comment:
*/
// This is a single line comment
数据类型
类型层次结构
-
scala 中所有的类型都是对象。
-
Any,AnyVal和AnyRef类型是Scala类型层次结构的根。
-
扩展AnyVal的类型称为值类型。
类型
-
字符 “a”
-
布尔 false, !false
-
数字 Byte . Short . Int . Long . Float . Double. (可按顺序自动将数字从一种类型转换为另一种类型)
-
常量 Long, Int, Short, Char, Byte
-
字符串插值{book title}"
-
Option Map.get返回一个Optio[T]
- 如果为some,则Some.get取值
- 如果为None, 则None.get 抛出异常
-
Range
- min-value to max-value by step-value
- min-value until max-value
-
元组
- 创建:
- (item1,item2)
- item1 -> item2
- 访问元组的索引值
- ._index后缀
- 创建:
-
Unit 类似void
语句
-
匹配 MATCH
match { case 0 => println("Zero") case 1 => println("One") case _ => println("more than one") }
-
循环遍历 <-
val books = List("Scala", "Groovy", "Java", "SQL", "CSS") for (book<-books) println(book)
类
-
Case类:提供与普通类相同的功能,但编译器生成toString,hashCode和equals方法,您可以覆盖。
-
方法声明:def
-
值类:AnyVal
class SomeClass(val i: Int) extends AnyVal { def twice() = i*2 }
-
对象
-
单例对象:只能有一个实例的类
object Car { def drive { println("drive car") } } Car.drive
-
-
接口 Traits
- 子接口 extend
-
继承
- 单继承,子类只可以有一个父类
- 根:Any
- 覆盖 override
-
构造函数
-
参数声明为val,只生成一个getter方法
-
参数声明为val,生成访问器和mutator方法
-
可以将
private
关键字添加到val
或var
字段,以防止getter和setter方法生成。 -
辅助构造函数以提供创建对象的不同方法。
辅助构造函数通过创建名为this的方法来定义。
我们可以定义多个辅助构造函数,但它们必须有不同的签名。
每个辅助构造函数必须以对先前定义的构造函数的调用开始
class Book (var title :String, var ISBN: Int) { def this(title: String) { this(title, 2222) } def this() { this("CSS") this.ISBN = 1111 } override def toString = s"$title ISBN- $ISBN" } val book1 = new Book val book2 = new Book("Clojure") val book3 = new Book("Scala", 3333)
-
-
伴生对象
- 概念:对象与一个类共享一个名称时,它被称为伴生对象,并且该类被称为伴生类。
伴生对象是与另一个类或特征共享相同名称和源文件的对象。
-
优点:允许在类上创建静态成员
-
注:与伴生类不共享相同名称的单例对象称为独立对象。
-
闭包
-
概念:一个函数,它的返回值取决于在该函数之外声明的一个或多个变量的值
-
函数链:Currying转换具有多个参数的函数,创建一个函数链,每个函数都需要一个参数
def add(x: Int)(y: Int) = x + y def add(x: Int) = (y: Int) => x + y
-
-
导入
-
使用下划线
_
作为通配符导入所有类型import java.awt._
-
程序包名称是代码所有者的反向域名
-
源文件中的第一个非注释行:
package com.java2s.stuf
-
-
-
集合
-
数组 Array
-
列表 List
-
空列表
val empty = Nil
-
创建
val books: List[String] = List("Scala", "Groovy", "Java")
val books = "Scala" :: ("Groovy" :: ("Java" :: Nil))
-
列表上的操作可以用head和tail方法表示,其中head返回列表的第一个元素,tail返回一个由除第一个元素之外的所有元素组成的列表。
-
-
网友评论