![01467eeb25a9c45f64c22d8526e4b700.png](https://i-blog.csdnimg.cn/blog_migrate/d548a2209eace6d468417fdbbc001e78.jpeg)
一、Scala入门
1、Scala和Java关系
![3c96b52c7d809b87058f265d35df8249.png](https://i-blog.csdnimg.cn/blog_migrate/4e9c0e5c04c8b32a803904d1393b3d17.png)
Scala在设计时,马丁·奥德斯参考了java的设计思想,可以说Scala是源于java,同时,他也加入了自己的思想,将函数式编程语言的特点融入到Java中,学习中需要搞清Scala和java的不同点,就可以快速入门
Scala源代码会被编异常Java字节码。然后运行早JVM上,并可以调用现有的JJava类库,实现两种语言的无缝对接。
2、class和object说明
Scala完全面向对象,故Scala去掉了java中非面向对象的元素,如Static关键字,void类型
scala无static关键字,由object实现类似静态方法的功能(类名,方法名)
class关键字和java中的class关键字作用相同,用来定义一个类
void对于无返回值的函数,scala定义其返回值类型为Unit类型
二、变量和数据类型(重点)
1、变量和常量
常量:在程序执行的过程中,其值不会被改变的变量
0)回顾:Java变量和常量语法
变量类型 变量名称 = 初始值 int a = 10
final常量类型 常量名称 = 初始值 final int b = 20
1)基本语法
var 变量名 [: 变量类型] = 初始值 var i:Int = 10
val 常量名 [: 常量类型] = 初始值 val j:Int = 20
注意:能用常量的地方不用变量
2)案例实操
(1)声明变量时,类型可以省略,编译器自动推导,即类型推导
(2)类型确定后,就不能修改,说明Scala是强数据类型语言。
(3)变量声明时,必须要有初始值
(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。
2、标识符命名规范
1)命名规则
Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有以下四种规则:
(1)以字母或者下划线开头,后接字母、数字、下划线
(2)以操作符开头,且只包含操作符(+ - * / # !等)
(3)用反引号`....`包括的任意字符串,即使是Scala关键字(39个)也可以
3、字符串输出
基本语法
(1)字符串,通过+号连接
(2)printf用法:字符串,通过%传值。
(3)字符串模板(插值字符串):通过$获取变量值
4、键盘输入
基本语法
StdIn.readLine()、StdIn.readShort()、StdIn.readDouble()
5、数据类型
java数据类型
![d3a062ed110214a5656280035b6889a1.png](https://i-blog.csdnimg.cn/blog_migrate/a601ea03862383c19836b32ffba96fe5.png)
scala数据类型
![e693e54d1a9702c12185c664dde58f27.png](https://i-blog.csdnimg.cn/blog_migrate/4c404e0997aa23e8e3eab30bc7a88fec.jpeg)
6、Unit类型,Null类型,Nothing类型
![219d57f1d6ececbb3a826fbcecdd7ac0.png](https://i-blog.csdnimg.cn/blog_migrate/3529870eb98e6bcda55736c7c60d68ec.png)
(1)Unit类型用来标识过程,也就是没有明确返回值的函数。
(2)Null类只有一个实例对象,Null类似于Java中的null引用。Null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)
(3)Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容。
7、数值类型自动转换
![a814e9466b8d61acad6a8c1bd4b219cf.png](https://i-blog.csdnimg.cn/blog_migrate/c8600635e0b3351fc10e8c60e6858ca4.jpeg)
(1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
(2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
(3)(byte,short)和char之间不会相互自动转换。
(4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。
8、强制类型转换
自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意。
9、数值类型和String类型间转换
(1)基本类型转String类型(语法:将基本类型的值+"" 即可)
(2)String类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)
三、运算符
Scala运算符的使用和Java运算符的使用基本相同,只有个别细节上不同。
注意:Scala中没有++、--操作符,可以通过+=、-=来实现同样的效果;?:可以用if()…替换
Scala运算符本质:在Scala中其实是没有运算符的,所有运算符都是方法。
1)当调用对象的方法时,点.可以省略
2)如果函数参数只有一个,或者没有参数,()可以省略
四、流程控制
与java类似,在Scala中没有Switch,而是使用模式匹配来处理。模式匹配涉及到的知识点较为综合,因此我们放在后面讲解。
Scala也为for循环这一常见的控制结构