1.Scala中的常量
常量:在程序运行的过程中,不发生改变的值
1.分类
字面值常量
- 整型常量
- 浮点型常量
- 字符常量
- 字符串常量
- 布尔常量
- 空常量
//整型常量
println(10)
//浮点型常量
println(10.3)
//字符常量, 值要用单引号括起来
println('a')
//字符串常量, 值要用双引号括起来
println("abc")
//布尔常量, 值只有true和false
println(true)
//空常量
println(null)
2.Scala中的变量
变量:在程序运行的过程中,其值可以改变的量
在scala中,可以使用val
或者var
来定义变量
val/var 变量名:变量类型 = 初始值
val
定义的是不可变的, 也就是自定义常量. val没有线程安全问题var
定义的是可以变的
注意:在声明变量时,类型可以省略(编译器会自动类型推到)
类型确定后,就不能修改
声明一个变量时,可以用val或者var 来修饰
val 修饰的变量在编译后 ,就等同于加上 final
var 修饰的对象引用是可以改变,val修饰的则不可以改变 ,但对象的状态(值)可以改变的
程序中+ 号的使用
- 当左右两边都是数值类型时,做加法运算
- 当左右两边一边为字符串时,做拼接运算
3.字符串
scala定义字符串的方式
- 使用双引号
- 使用插值表达式
- 使用三引号
1.使用双引号
val/var 变量名 = “字符串”
//定义一个人的名字为 java
//打印他的名字及长度
val name ="java"
println(name + namne.length)
java4
2.使用插值表达式
scala中,可以使用插值表达式来定义字符串,有效避免大量字符串的拼接。
val/var 变量名 = s"${变量/表达式}字符串"
注意:
- 在定义字符串之前添加
s
- 在字符串中,可以使用
${}
来引用变量或者编写表达式
scala> val name = "zhangsan"
name: String = zhangsan
scala> val age = 23
age: Int = 23
scala> val sex = "male"
sex: String = male
scala> val result = s"name=${name}, age=${age}, sex=${sex}"
result: String = name=zhangsan, age=23, sex=male
scala> println(result)
name=zhangsan, age=23, sex=male
3.三引号
如果有大段的文本需要保存,就可以使用三引号来定义字符串。例如:保存一大段的SQL语句。
val/var 变量名 = """字符串1
字符串2"""
保存sql 语句
select
*
from
t_user
where
name = "zhangsan"
val sql = """select
| *
| from
| t_user
| where
| name = "zhangsan""""
println(sql)
4.Scala中的数据类型
1)Scala和java都有相同的数据类型,在Scala中数据类型都是对象 也就是说scala没有原生的数据类型
2)Scala中 数据类型分为: AnyVal(值类型)和AnyRef(引用类型) , 不管是AnyVal 还是AnyRef 都是对象
3)相对于java的类型系统,Scala要更复杂一点
Scala数据类型
基础类型 | 类型说明 |
---|---|
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
Scala类型层次结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3bXGjYg-1606185726811)(F:\项目\java高级\竞赛笔记\task01\scala\数据结构图.png)]
在开发中用异常处理,或者用Nothing作为返回值,说明该方法没有正常返回值
类型 | 说明 |
---|---|
Any | 所有类型的父类,它有两个子类AnyRef与AnyVal |
AnyVal | 所有数值类型的父类 |
AnyRef | **所有对象类型(引用类型)**的父类 |
Unit | 表示空,Unit是AnyVal的子类,它只有一个的实例{% em %}() {% endem %} 它类似于Java中的void,但scala要比Java更加面向对象 |
Null | Null是AnyRef的子类,也就是说它是所有引用类型的子类。它的实例是{% em %}null{% endem %} 可以将null赋值给任何对象类型 |
Nothing | 所有类型的子类, 不能直接创建该类型实例,某个方法抛出异常时,返回的就是Nothing类型,因为Nothing是所有类的子类,那么它可以赋值为任何类型 |
5.类型转换
Scala中的类型转换分为值类型的类型转换
和引用类型的类型转换
, 这里我们先重点介绍:值类型的类型转换
.
值类型的类型转换分为:
- 自动类型转换
- 强制类型转换
4.1自动类型转换
- 范围小的数据类型和范围大的数据类型进行计算的时候,范围小的数据类型值会自动转换为大的数据类型值这过程叫自动类型换行
val a:Int = 3
val b:Double = 3 + 3.31 //int和Double类型计算,最终返回Double数据类型
val c:Byte= a + 1 //将int类型赋值给Byte类型会报错
4.2强制类型转换
范围小的数据类型和范围大的数据类型进行计算的时候,将范围大的数据类型通过一定的格式将其转换为小的数据类型,这个过程就叫做强制类型转换
格式
val/var 变量名:数据类型 = 具体的值.toXxx //Xxx表示你要转换到的数据类型
代码
val a:Double = 5.21
val b:Int = a.toInt
4.3值类型和String类型之间的相互转换
1.值类型的数据转换成String类型
格式一:
val/var 变量名:String = 值类型数据 + ""
格式二:
val/var 变量名:String = 值类型数据.toString
示例
将Int, Double, Boolean类型的数据转换成其对应的字符串形式.
val a1:Int = 10
val b1:Double = 2.1
val c1:Boolean = true
//方式一: 通过和空字符串拼接的形式实现
val a2:String = a1 + ""
val b2:String = b1 + ""
val c2:String = c1 + ""
//方式二: 通过toString函数实现
val a3:String = a1.toString
val b3:String = b1.toString
val c3:String = c1.toString
2.String类型的数据转换成其对应的值类型
val/var 变量名:值类型 = 字符串值.toXxx //Xxx表示你要转换到的数据类型
- String类型的数据转成Char类型的数据, 方式有点特殊, 并不是调用toChar, 而是toCharArray
需求:
将字符串类型的整数, 浮点数, 布尔数据转成其对应的值类型数据.
val s1:String = "100"
val s2:String = "2.3"
val s3:String = "false"
//将字符串类型的数据转成其对应的: Int类型
val a:Int = s1.toInt
//将字符串类型的数据转成其对应的: Double类型
val b:Double = s2.toDouble
//将字符串类型的数据转成其对应的: Boolean类型
val c:Boolean = s3.toBoolean
6.键盘录入
-
导包
格式: import scala.io.StdIn
-
通过
StdIn.readXxx()
来接收用户键盘录入的数据接收字符串数据: StdIn.readLine()
接收整数数据: StdIn.readInt()
-
提示用户录入字符串, 并接收打印.
println("请录入一个字符串: ") val str = StdIn.readLine() println("您录入的字符串内容为: " + str)
-
提示用户录入整数, 并接收打印.
println("请录入一个整数: ") val num = StdIn.readInt() println("您录入的数字为: " + num)
-
Line()
接收整数数据: StdIn.readInt()
-
提示用户录入字符串, 并接收打印.
println("请录入一个字符串: ") val str = StdIn.readLine() println("您录入的字符串内容为: " + str)
-
提示用户录入整数, 并接收打印.
println("请录入一个整数: ") val num = StdIn.readInt() println("您录入的数字为: " + num)