一、变量:
1、可变的用var修饰。常量用val修饰,相当于加上了final。
ps:声明变量的时候,可以省略类型,编译器会自动推导。类型确定之后就不能修改了。
2、scala中的数据类型分为两大类:①AnyVal(值类型)②AnyRef(引用类型)。它们两个都是对象。
3、AnyVal(值类型)包括:Double、Float、Long、Int、Short、Byte、Boolean、Char、Unit。
4、AnyRef(引用数据类型)包括:collection、classes。
5、Unit、Null、Nothing:
(1)、Unit表示无值,和其他语言中的void一样。
(2)、null,Null类型只有一个实例值null。它可以复制给任意类型的AnyRef,但是不能复制给AnyVal。
(3)、Nothing类型在scala的类层次级的最低端,它是任何其他类型的子类型,当一个函数,我们确定没有正常的返回值,可以用Nothing来指定返回类型。
6、强制类型转换:
(1)、数据从大到小就需要进行强制类型转化。符号为小括号,和java和像。
(2)、Char类型可以保存Int的常量值,但是不能保存Int中的变量值。
(3)、Byte和Short类型在进行计算的时候,会转化成Int类型。
二、运算符:
1、算数运算符:+、-、*、/、%等。
2、关系运算符:==、!=、<、>、<=、>=。
3、逻辑运算:&&、||、!。
4、位运算符:&、|、^、~、<<、>>、>>>。
三、程序流程控制:
1、顺序控制,就是按照程序的流程执行。
2、if...else...
3、for循环,to的话是前后闭合;until是前闭后开。
4、使用yield关键字会返回一个Vector。
5、while循环和do{}while()。
四、函数式编程:
1、函数的定义:
(1)、使用关键字def
(2)、[参数名:参数类型]:表示函数的输入,可以没有,参数类型可以是值类型和引用类型。
(3)、函数的有返回值,也可以没有函数的返回值。返回类型可以是值类型和引用类型。
1、返回值类型1: :返回值 =
2、返回值类型2: = 表示返回值不确定,使用类型推导完成。
3、返回值类型3: 表示没有返回值,return不生效。
(4)、如果没有return语言,那么最后一行结果作为返回值。
2、函数的递归:
(1)、程序执行一个函数时,就创建一个新的受保护的独立空间(新函数的栈)
(2)、函数的局部变量是独立的,不会受影响。
(3)、递归必须向退出递归的条件逼近,否则就是无限递归。
(4)、当一个函数执行完毕或遇到return,就会返回,遵守谁调用,就将结果返回给谁。
(5)、递归必须指明函数的返回值类型,它无法推断函数的返回值类型。
3、函数的可变形参:
(1)、只能放在形参列表的最后。
(2)、格式:y:int *
4、函数的过程:
(1)、声明函数时没有返回值,但是有=号,可以进行类型推断,这个函数实际是有返回值的,该函数并不是过程。
(2)、后面返回值类型时Unit是一个过程,或则没有=号也是一个过程。
5、惰性函数:
(1)、返回值用lazy修饰,只有当真正使用的时候,才会调出来。
(2)、lazy不能修饰var的变量。
五、异常:
1、在scala中只能有一个catch,在catch中可以有多个case来匹配不同的异常。
2、结构:try{}catch{case xxx=>xxx}finaly{}
3、自定义异常:返回值是Nothing,函数体里面是throw new Execption():
六、面向对象一:
1、定义一个类的注意事项:
(1)、如何创建一个类:
在类中name是用var修饰的,相当于Java中的protected,那为什么在主函数中还能直接访问name呢?原因是因为在创建people这个对象的时候,还创建了两个方法:相当于java中的get和set方法。
(2)、类和对象的区别:①类是抽象的,对象是具体的。②类是对象的模板,对象是类的一个个体,对应一个实例。
(3)、创建一个class的时候,不能用public来修饰。
(4)、类中的属性可以是数值类型,也可以是一个引用类型。包括其他class的实例。
2、属性的注意事项:
(1)、属性的定义语法同变量。
(2)、属性的定义类型可以是任意类型,包含数值类型和引用类型。
(3)、scala中声明一个属性,必须显式的初始化。
(4)、如果赋值为null,则一定要加类型,因为不加类型,那么该属性的类型就是null类型。