数据类型
- 常见数据类型
Byte 8 bit的有符号数字,范围:-128 —— 127
Short 16 bit有符号数字,范围:-32768 —— 32767
Int 32 bit有符号数字,范围:-9223372036854775808 —— -9223372036854775807
Float 32 bit IEEE 754单精度浮点数
Double 64 bit IEEE 754双精度浮点数
String 字符串
Boolean 布尔类型
- 特有数据类型
Unit 表示无值,和其他语言中void等同
Null 空值或者引用
Nothing 所有其他类型的子类型,表示没有值
Any 所有类型的超类,任何实例都属于Any类型
AnyRef 所有引用类型的超类
AnyVal 所有值类型的超类
None 是Option的两个子类之一,另一个是Some,用于安全的函数返回值
Nil 表示长度为0的List
变量和常量的声明
- 定义常量使用val,不可再给常量赋值。
- 定义变量使用var,可以重新赋值
/*一行的结尾可以省略分号,如果一行有多个语句,可以使用分号分隔*/
var a = "百度"
println(a)
a="腾讯"
创建类和对象
创建类使用Class,有如下需要注意:
- class默认实现了getter setter方法。
- class中如果有参数的传入,那么这个构造器就是这个类的默认构造器。
- 重写构造器,必须调用类默认的构造器。
- class在被new对象的时候,除了方法内部不执行,其他地方的代码都会被执行。
- class默认可以传参数,默认的传参数就是默认的构造函数。
- class使用时要使用new
class Person(xname:String,xage:Int){
val name = xname;
val age = xage;
var money = 100;
/**重写构造器,必须调用类默认的构造器**/
def this(xname:String,xage:Int,xmoney:Int){
this(xname,xage)
money = xmoney
}
def test():Unit = {
println("hello")
}
}
object Test {
def main(args: Array[String]): Unit = {
val person = new Person(xname="lisi",xage=18)
println(person.name+" "+person.age+" "+person.money);
}
}
创建对象
创建对象使用Object,有以下需要注意
- object里面不能传递参数,object里面的属性和方法都是静态的(类似于java中Static修饰的东西)
- object是单例对象,类似于java中的工具类(类名.方法)
- 伴生类和伴生对象:在一个Scala文件中,如果class和object的名字一样,则互为伴生类和伴生对象,他们可以直接访问到互相的私有成员变量
- object使用时不使用new
步长
println(1 to 10) //从1递增到10,每步递增1,闭区间
println(1 until 10) //1递增到10,每步递增1,左闭右开
println(1 to (10,2)) //从1递增到10,每步递增2
for循环
for循环使用yield关键字返回一个集合,语法如下:
for {子句} yield {变量或表达式}
//原来的集合不会被改变,指挥通过你的for/yield构建出一个新的集合
//将for循环中的符合条件的元素通过yield关键字返回成一个集合
//例子
val list = for(i <- 1 to 10; if(i > 5)) yield i
for (w <- list){
println(w)
}