章节目标
- 掌握变量, 字符串的定义和使用
- 掌握数据类型的划分和数据类型转换的内容
- 掌握键盘录入功能
- 理解Scala中的常量, 标识符相关内容
1. 输出语句和分号
1.1 输出语句
方式一: 换行输出
方式二: 不换行输出
注意:
不管是println(), 还是print()语句, 都可以同时打印多个值.格式为: println(值1, 值2, 值3...)
1.2 分号
Scala语句中, 单行代码最后的分号可写可不写. 如果是多行代码写在一行, 则中间的分号不能省略, 最后一条代码的分号可省略不写.
示例:
2. Scala中的常量
2.1 概述
常量指的是: 在程序的运行过程中, 其值不能发生改变的量.
2.2 分类
- 字面值常量(常用的有以下几种)
- 整型常量
- 浮点型常量
- 字符常量
- 字符串常量
- 布尔常量
- 空常量
- 自定义常量(稍后解释)
2.3 代码演示
3. Scala中的变量
3.1 概述
我们将来每一天编写scala程序都会定义变量, 那什么是变量, 它又是如何定义的呢?
变量, 指的就是在程序的执行过程中, 其值可以发生改变的量. 定义格式如下:
3.2 语法格式
Java变量定义
在scala中,可以使用val
或者var
来定义变量,语法格式如下:
其中
-
val
定义的是不可重新赋值的变量, 也就是自定义常量. -
var
定义的是可重新赋值的变量
注意: scala中定义变量时, 类型写在变量名后面
3.3 示例
**需求:**定义一个变量保存一个人的名字"tom"
步骤
- 打开scala解释器
- 定义一个字符串类型的变量用来保存名字
参考代码
3.4 val和var变量的区别
示例
给名字变量进行重新赋值为Jim,观察其运行结果
参考代码
示例
使用var
重新定义变量来保存名字"tom",并尝试重新赋值为Jim,观察其运行结果
参考代码
注意: 优先使用
val
定义变量,如果变量需要被重新赋值,才使用var
3.5 使用类型推断来定义变量
scala的语法要比Java简洁,我们可以使用一种更简洁的方式来定义变量。
示例
使用更简洁的语法定义一个变量保存一个人的名字"tom"
参考代码
scala可以自动根据变量的值来自动推断变量的类型,这样编写代码更加简洁。
4. 字符串
scala提供多种定义字符串的方式,将来我们可以根据需要来选择最方便的定义方式。
- 使用双引号
- 使用插值表达式
- 使用三引号
4.1 使用双引号
语法
示例
有一个人的名字叫"hadoop",请打印他的名字以及名字的长度。
参考代码
4.2 使用插值表达式
scala中,可以使用插值表达式来定义字符串,有效避免大量字符串的拼接。
语法
注意:
- 在定义字符串之前添加
s
- 在字符串中,可以使用
${}
来引用变量或者编写表达式
示例
请定义若干个变量,分别保存:“zhangsan”、23、“male”,定义一个字符串,保存这些信息。
打印输出:name=zhangsan, age=23, sex=male
参考代码
4.3 使用三引号
如果有大段的文本需要保存,就可以使用三引号来定义字符串。例如:保存一大段的SQL语句。三个引号中间的所有内容都将作为字符串的值。
语法
示例
定义一个字符串,保存以下SQL语句
打印该SQL语句
参考代码
4.4 扩展: 惰性赋值
在企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行。这些SQL语句,如果直接加载到JVM中,会有很大的内存开销, 如何解决这个问题呢?
当有一些变量保存的数据较大时,而这些数据又不需要马上加载到JVM内存中。就可以使用惰性赋值来提高效率。
语法格式:
示例
在程序中需要执行一条以下复杂的SQL语句,我们希望只有用到这个SQL语句才加载它。
参考代码
5. 标识符
5.1 概述
实际开发中, 我们会编写大量的代码, 这些代码中肯定会有变量, 方法, 类等. 那它们该如何命名呢? 这就需要用到标识符了. 标识符就是用来给变量, 方法, 类等起名字的. Scala中的标识符和Java中的标识符非常相似.
5.2 命名规则
- 必须由
大小写英文字母, 数字, 下划线_, 美元符$
, 这四部分任意组合组成. - 数字不能开头.
- 不能和Scala中的关键字重名.
- 最好做到见名知意.
5.3 命名规范
- 变量或方法: 从第二个单词开始, 每个单词的首字母都大写, 其他字母全部小写(小驼峰命名法).
- 类或特质(Trait): 每个单词的首字母都大写, 其他所有字母全部小写(大驼峰命名法)
- 包: 全部小写, 一般是公司的域名反写, 多级包之间用.隔开.
6. 数据类型
6.1 简述
数据类型是用来约束变量(常量)的取值范围的. Scala也是一门强类型语言, 它里边的数据类型绝大多数和Java一样.我们主要来学习
- 与Java不一样的一些用法
- scala中数据类型的继承体系
6.2 数据类型
基础类型 | 类型说明 |
Byte | 8位带符号整数 |
Short | 16位带符号整数 |
Int | 32位带符号整数 |
Long | 64位带符号整数 |
Char | 16位无符号Unicode字符 |
String | Char类型的序列(字符串) |
Float | 32位单精度浮点数 |
Double | 64位双精度浮点数 |
Boolean | true或false |
注意下 scala类型与Java的区别
[!NOTE]
- scala中所有的类型都使用大写字母开头
- 整形使用
Int
而不是Integer- scala中定义变量可以不写类型,让scala编译器自动推断
- Scala中默认的整型是Int, 默认的浮点型是: Double
6.3 Scala类型层次结构
类型 | 说明 |
Any | 所有类型的父类,它有两个子类AnyRef与AnyVal |
AnyVal | 所有数值类型的父类 |
AnyRef | **所有对象类型(引用类型)**的父类 |
Unit | 表示空,Unit是AnyVal的子类,它只有一个的实例{% em %}() {% endem %} 它类似于Java中的void,但scala要比Java更加面向对象 |
Null | Null是AnyRef的子类,也就是说它是所有引用类型的子类。它的实例是{% em %}null{% endem %} 可以将null赋值给任何对象类型 |
Nothing | 所有类型的子类, 不能直接创建该类型实例,某个方法抛出异常时,返回的就是Nothing类型,因为Nothing是所有类的子类,那么它可以赋值为任何类型 |
6.4 思考题
以下代码是否有问题?
Scala会解释报错: Null类型并不能转换为Int类型,说明Null类型并不是Int类型的子类
7. 类型转换
7.1 概述
当Scala程序在进行运算或者赋值动作时, 范围小的数据类型值会自动转换为范围大的数据类型值, 然后再进行计算.例如: 1 + 1.1的运算结果就是一个Double类型的2.1. 而有些时候, 我们会涉及到一些类似于"四舍五入"的动作, 要把一个小数转换成整数再来计算. 这些内容就是Scala中的类型转换.
Scala中的类型转换分为
值类型的类型转换
和引用类型的类型转换
, 这里我们先重点介绍:值类型的类型转换
.值类型的类型转换分为:
- 自动类型转换
- 强制类型转换
7.2 自动类型转换
- 解释
范围小的数据类型值会自动转换为范围大的数据类型值, 这个动作就叫: 自动类型转换.
自动类型转换从小到大分别为:Byte, Short, Char -> Int -> Long -> Float -> Double
- 示例代码
7.3 强制类型转换
- 解释
范围大的数据类型值通过一定的格式(强制转换函数)可以将其转换成范围小的数据类型值, 这个动作就叫: 强制类型转换.
注意: 使用强制类型转换的时候可能会造成精度缺失问题!
- 格式
- 参考代码
7.4 值类型和String类型之间的相互转换
1. 值类型的数据转换成String类型
格式一:
格式二:
示例
将Int, Double, Boolean类型的数据转换成其对应的字符串形式.
参考代码:
2. String类型的数据转换成其对应的值类型
格式:
注意:
- String类型的数据转成Char类型的数据, 方式有点特殊, 并不是调用toChar, 而是toCharArray
- 这点目前先了解即可, 后续我们详细解释
需求:
将字符串类型的整数, 浮点数, 布尔数据转成其对应的值类型数据.
参考代码:
8. 键盘录入
8.1 概述
前边我们涉及到的数据, 都是我们写"死"的, 固定的数据, 这样做用户体验并不是特别好. 那如果这些数据是由用户录入, 然后我们通过代码接收, 就非常好玩儿了. 这就是接下来我们要学习的Scala中的"键盘录入"功能.
8.2 使用步骤
- 导包
格式: import scala.io.StdIn
- 通过
StdIn.readXxx()
来接收用户键盘录入的数据
接收字符串数据: StdIn.readLine()
接收整数数据: StdIn.readInt()
8.3 示例
- 提示用户录入字符串, 并接收打印.
- 提示用户录入整数, 并接收打印.
9. 案例: 打招呼
9.1 概述
聊了这么久, 赶紧来和小伙伴儿们来打个招呼吧.
需求: 提示用户录入他/她的姓名和年龄, 接收并打印.
9.2 具体步骤
- 提示用户录入姓名.
- 接收用户录入的姓名.
- 提示用户录入年龄.
- 接收用户录入的年龄.
- 将用户录入的数据(姓名和年龄)打印到控制台上.
9.3 参考代码
- 提示用户录入整数, 并接收打印.
9. 案例: 打招呼
9.1 概述
聊了这么久, 赶紧来和小伙伴儿们来打个招呼吧.
需求: 提示用户录入他/她的姓名和年龄, 接收并打印.
9.2 具体步骤
- 提示用户录入姓名.
- 接收用户录入的姓名.
- 提示用户录入年龄.
- 接收用户录入的年龄.
- 将用户录入的数据(姓名和年龄)打印到控制台上.
9.3 参考代码