Scala概述
Scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性。scala运行在虚拟机上,并兼容现有的Java程序。Scala源代码被编译成java字节码,所以运行在JVM上,并可以调用现有的Java类库。
Scala语句末尾的分号可写可不写
1 | object HelloSpark{ |
本文参考:扎心了,老铁
一、Scala的基本语法
1、概述
1 | /** |
2、Scala的数据类型
Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型:
数据类型 | 描述 |
---|---|
Byte | 8位有符号补码整数。数值区间为 -128 到 127 |
Short | 16位有符号补码整数。数值区间为 -32768 到 32767 |
Int | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 |
Float | 32位IEEE754单精度浮点数 |
Double | 64位IEEE754单精度浮点数 |
Char | 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true或false |
Unit | 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 |
Null | null 或空引用 |
Nothing | Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。 |
Any | Any是所有其他类的超类 |
AnyRef | AnyRef类是Scala里所有引用类(reference class)的基类 |
Scala多行字符串的表示方式
1 | var str = |
3、Scala的变量
1 | object VariableTest { |
总结:
(1)据类型可以指定,也可以不指定,如果不指定,那么就会进行数据类型的推断。
(2)如果指定数据类型,数据类型的执行 方式是 在变量名后面写一个冒号,然后写上数据类型。
(3)我们的scala里面变量的修饰符一共有两个,一个是var 一个是val,如果是var修饰的变量,那么这个变量的值是可以修改的。如果是val修饰的变量,那么这个变量的值是不可以修改的。
4、Scala访问修饰符
Scala访问修饰符和Java基本一样,分别有private、protected、public。默认情况下,Scala对象的访问级别是public。
A、私有成员
用private关键字修饰的成员仅在包含了成员定义的类或对象内部可见。
1 | class Outer { |
在上面的代码里start和end两个方法被定义为public类型,可以通过任意Inner实例访问;pause被显示定义为private,这样就不能在Inner类外部访问它。执行这段代码,就会如注释处声明的一样,会在该处报错:
B、protected
和私有成员类似,Scala的访问控制比Java来说也是稍显严格些。在 Scala中,由protected定义的成员只能由定义该成员和其派生类型访问。而在 Java,,由protected定义的成员可以由同一个包中的其它类型访问。在Scala中,可以通过其它方式来实现这种功能。
1 | package p |
C、public
public访问控制为Scala定义的缺省方式,所有没有使用private和 protected修饰的成员(定义的类和方法)都是“公开的”,这样的成员可以在任何地方被访问。Scala不需要使用public来指定“公开访问”修饰符。
注意:Scala中定义的类和方法默认都是public的,但在类中声明的属性默认是private的。
5、Scala运算符
与Java一样,不过Scala的运算符实际上是一种方法。
6、条件表达式
Scala的的条件表达式比较简洁,例如:
1 | def main(args: Array[String]): Unit = { |
运行结果
总结:
(1)if条件表达式它是有返回值的
(2)返回值会根据条件表达式的情况会进行自动的数据类型的推断。
7、块表达式
1 | def main(args: Array[String]): Unit = { |
运行结果
8、循环
A、while循环
1 | def main(args: Array[String]): Unit = { |
总结:
(1)while使用跟java一模一样
(2)注意点:在scala里面不支持 i++ i– 等操作 统一写成 i-=1
B、for循环
在scala中有for循环和while循环,用for循环比较多
for循环语法结构:
for (i <- 表达式/数组/集合)
1 | def main(args: Array[String]): Unit = { |
运行结果
总结:
(1)scala里面没有运算符,都有的符号其实都是方法。
(2)在scala里面没有++ – 的用法
(3)for( i <- 表达式/数组/集合)
(4)在for循环里面我们是可以添加if表达式
(5)有两个特殊表达式需要了解:
(6)To 1 to 3 1 2 3 Until 1 until 3 1 2
(7)如果在使用for循环的时候,for循环的时候我们需要获取,我们可以是使用yield关键字。
9、方法和函数
A、定义方法
方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型。
如果不写等号,代表没有返回值。
B、定义函数
C、方法和函数的区别
在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作
案例:首先定义一个方法,再定义一个函数,然后将函数传递到方法里面
1 | object TestScala { |
D、将方法转换成函数