Scala第一天
目录
1 Scala介绍
2 Scala开发环境安装
2.1 安装JDK
安装JDK 1.8 64位版本,并配置好环境变量
2.2 安装scala SDK
本次安装的版本是: 2.12.11
百度网盘:
链接:https://pan.baidu.com/s/1GVNIklmyPNERMrNYuUwpRg
提取码:p1lh
双击安装
配置环境变量
在cmd窗口输入 scala -version
出现版本号说明安装成功了
2.3 安装IDEA scala插件
IDEA默认是不支持scala程序开发,所以需要来安装scala插件来支持scala语言。
装完插件后重启
3 scala解释器
3.1 启动scala解释器
cmd窗口输入输入scala即可
3.2 执行scala代码(hello world)
println(“hello world”)
3.3 退出解释器
:quit
4 声明变量
4.1 语法格式
在scala中,可以使用val或者var来定义变量,语法格式如下:
val/var 变量标识:变量类型 = 初始值
其中:
val定义的是不可重新赋值的变量
var定义的是可重新赋值的变量
* scala中定义变量类型写在变量名后面
* scala的语句最后不需要添加分号
4.2在解释器中定义一个变量
示例:定义一个变量保存一个人的名字"tom"
4.3 val和var变量
给名字变量进行重新赋值为Jim,发现报错了,val 定义的变量不能改变值
使用var重新定义变量来保存名字"tom",并尝试重新赋值为Jim,不报错
优先使用val定义变量,如果变量需要被重新赋值,才使用var
4.4使用类型推断来定义变量
使用更简洁的语法定义一个变量保存一个人的名字"tom"
scala可以自动根据变量的值来自动推断变量的类型,这样编写代码更加简洁
4.5 惰性赋值
在企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行。这些SQL语句,如果直接加载到JVM中,会有很大的内存开销。
当有一些变量保存的数据较大时,但是不需要马上加载到JVM内存。可以使用“惰性赋值”来提高效率。
语法格式:
lazy val/var 变量名 = 表达式
被标记为惰性的变量, 什么时候使用, 什么时候才会进行加载
5字符串
使用三引号方式来定义变量, 一般适用于定义大量文本情况, 定义后, 会保持原有的格式, 也就是输入的格式是什么样子, 输出的格式就是什么样, 同时在三引号内部 认为所有的都是字符串
scala提供多种定义字符串的方式,将来我们可以根据需要来选择最方便的定义方式。
- 使用双引号
- 使用插值表达式
- 使用三引号
5.1 使用双引号
语法
val/var 变量名 = “字符串”
示例
有一个人的名字叫"hadoop",请打印他的名字以及名字的长度。
5.2 使用插值表达式
scala中,可以使用插值表达式来定义字符串,有效避免大量字符串的拼接
语法
val/var 变量名 = s”${变量/表达式}字符串”
在定义字符串之前添加s
在字符串中,可以使用${}来应用变量或者编写表达式
示例
请定义若干个变量,分别保存:"zhangsan"、30、"male",定义一个字符串,保存这些信息。
打印输出:name=zhangsan, age=30, sex=male
5.3 使用三引号
如果有大段的文本需要保存,就可以使用三引号来定义字符串。
例如:保存一大段的sql语句。三个引号中间的所有字符串都将作为字符串的值。
语法
val/var 变量名 = """字符串1
字符串2"""
示例
定义一个字符串,保存以下SQL语句
select
*
from
t_user
where
name = "zhangsan"
打印该SQL语句
6数据类型与操作符
scala中的类型以及操作符绝大多数和Java一样,我们主要来学习
- 与Java不一样的一些用法
- scala类型的继承体系
6.1 数据类型
注意下 scala类型与Java的区别
- scala中所有的类型都使用大写字母开头
- 整形使用`Int`而不是Integer
- scala中定义变量可以不写类型,让scala编译器自动推断
6.2 运算符
- scala中没有,++、--运算符
- 与Java不一样,在scala中,可以直接使用==、!=进行比较,它们与equals方法
表示一致。而比较两个对象的引用值,使用eq
示例
有一个字符串"abc",再创建第二个字符串,值为:在第一个字符串后拼接一个空字符串。
然后使用比较这两个字符串是否相等、再查看它们的引用值是否相等。
6.3 scala类型层次结构
类型 | 说明 |
Any | 是所有数据类型的共同的父类, 类似于java中Object |
AnyVal | 所有数值类型的父类 |
AnyRef | 所有对象类型(引用类型)的父类 |
Unit | 是 AnyVal下子类, 表示空, 类似于 java中 void |
Null | 是所有引用类型的子类, 引用类型的可以赋值为 Null |
Nothing | 是所有类型的子类, 一般直接使用这个类型, 此类型主要是程序在出现异常的时候, 其返回值的类型是Nothing |
问题
以下代码是否有问题?
val b:Int = null
scala会解释报错:
Null类型并不能转换为Int类型,说明Null类型并不是Int类型的子类
7条件表达式
条件表达式就是if表达式,if表达式可以根据给定的条件是否满足,根据条件的结果(真或假)决定执行对应的操作。scala条件表达式的语法和java一样。
7.1 有返回值的if
与Java不一样的是
- 在scala中,条件表达式也是有返回值的
- 在scala中,没有三元表达式,可以使用if表达式替代三元表达式
示例
定义一个变量sex,再定义一个result变量,如果sex等于"male",result等于1,否则result等于0
7.2 块表达式
- scala中,使用{}表示一个块表达式
- 和if表达式一样,块表达式也是有值的
- 值就是最后一个表达式的值
这段代码 a = 2
8循环
在scala中,可以使用for和while,但一般推荐使用for表达式,因为for表达式语法更简洁
8.1 for表达式
语法
java的for循环:
for(int i = 10 ; i <= 20 ; i ++) {
xxxx
}
scala中定义for循环:
for(i <- 表达式/数组/集合) {
// 表达式
}
8.1.1 简单循环
使用for表达式打印1-10的数字
步骤
1. 生成1-10的数字(提示:使用to方法)
2. 使用for表达式遍历,打印每个数字
参考代码1
简写方式
参考代码2
8.1.2 嵌套循环
需求 打印一个 三行五列的 *号
使用for表达式,打印以下字符
*****
*****
*****
步骤
1. 使用for表达式打印3行,5列星星
2. 每打印5个星星,换行
8.1.3 守卫
for表达式中,可以添加if判断语句,这个if判断就称之为守卫。我们可以使用守卫让for表达式更简洁。
for(i <- 表达式/数组/集合 if 表达式) {
// 表达式
}
需求: 使用for表达式打印1-10之间能够整除3的数字