(文章目录)
一、变量和常量
如何定义?
var 变量名 [: 变量类型] = 初始值
val 常量名 [: 常量类型] = 初始值
举个栗子:
var a: Int = 10;
val b: Int = 22;
// 变量类型可以省略
var a = 10;
val b = 22;
由于Scala是一个函数式编程语言,所以能用常量的地方不用变量。
重要的结论:
- 声明变量时,类型可以省略,编译器自动推导,即类型推导。
- 静态类型,类型经过给定或推导确定后就不能修改。
- 变量和常量声明时,必须有初始值。
- var修饰的变量可变,val修饰的常量不可变。
- 引用类型常量,不能改变常量指向的对象,可以改变对象的字段。
- 不以;作为语句结尾,scala编译器自动识别语句结尾。
标识符命名的规范
- 以字母或者下划线开头,后接字母、数字、下划线,和Java语法一样
- Scala可以使用操作符开头,且只包含操作符(+ - * / # !等)
- 特别之处:scala用反引号包括的任意字符串,即使是 Scala 关键字(39 个)也可以。
举个栗子:
val hello = ""
var Helo = ""
var _abc=123
var -+/% = "hello"
var `if` = 123
Scala中的关键字合集:
• package, import, class, object, trait, extends, with, type, for
• private, protected, abstract, sealed, final, implicit, lazy, override
• try, catch, finally, throw
• if, else, match, case, do, while, for, return, yield
• def, val, var
• this, super
• new
• true, false, null
与Java中不同的是:
object trait with implicit match yield def val var
字符串
基本的语法
- 关键字为
String
- 通过
+
号连接 *
用于将一个字符串复制多次拼接printf
输出字符串,通过%传值- 插值字符串:
s"${变量名}“
,前缀为s
格式化模板字符串,f
为格式化模板浮点数,%
后面为格式化的内容 - 原始输出:
raw"输出内容${变量名}"
,输出的结果原样输出 - 输出语句:
print(输出内容)
、println()
、printf()
- 三引号表示字符串,保持多行字符串的原格式输出。
"""......."""
举个栗子:
val name: String = "lisi" + " ";
val age: Int = 12
println(name * 3)
printf("%d岁的%s在吃饭", age, name)
// 格式化模板字符串
println(s"${age}岁的${name}在吃饭")
val num: Double = 2.26054
println(s"this number is ${num}")
println(f"this num is ${num}%2.2f")
println(raw"this num is ${num}%2.2f")
val sql =
s"""
|select *
| from student
| where name = ${name}
| and
| age > ${age}
|""".stripMargin
println(sql)
键盘输入
基本语法
import scala.io.StdIn
,StdIn在 IO 包下StdIn.readLine()
读取字符串StdIn.readShort()
StdIn.readDouble()
- .....................
举个栗子:
object Test04_StdInt {
def main(args: Array[String]): Unit = {
println("请输入你的名字:")
val name = StdIn.readLine()
println("请输入你的年龄:")
val age = StdIn.readInt()
println(s"欢迎${age}的${name},光临本系统!!!")
}
}
文件输入输出:
import scala.io.Source
import java.io.PrintWriter
import java.io.File
object Test05_FileIO {
def main(args: Array[String]): Unit = {
// 1.从文件中读取数据
Source.fromFile("src/main/resources/test.txt").foreach(print)
// 2。将数据写入文件
val writer = new PrintWriter(new File("src/main/resources/put.txt"))
writer.write("hello scala from java")
writer.close()
}
}
二、数据类型
Java中的数据类型
- 基本类型:
char、byte、short、int、long、float、double、boolean
- 对应的包装类:
Character、Byte、Short、Integer、Long、Float、Double、Boolean
- 由于Java有基本类型,而且基本类型不是真正意义的对象,Java不是纯粹的面向对象。
Scala中的数据类型
- Scala中一切数据都是对象,
Any
是所有数据的父类。 Any
对应有两个子类,一个是数值类型(AnyVal
),另一个是引用类型(AnyRef
)StringOps
是对Java中的String
增强。Unit
为Scala中的一个数据类型,对应Java中的void
,表示方法没有返回值,只有一个单例对象,输出为符串()
,而void
是一个关键字- Scala中默认为低精度数据类型转为高精度数据类型(自动转换 \ 隐式转换)
Null
是一个类型,只 有一个对 象就 是null
。它是所有引用类型(AnyRef
)的子类。Nothing
,是所有数据类型的子类,在一个函数没有明确返回值时使用,因为这样我们可以把抛出的返回值,返回给任何的变量或者函数。 <center>数据类型图(来源于网络~)</center>
整数类型
Byte
[1个字节]8 位有符号补码整数
。数值区间为-128
到127
Short
[2个字节]16 位有符号补码整数
。数值区间为-32768
到32767
Int
[4个字节]32 位有符号补码整数
。数值区间为-2147483648
到2147483647
Long
[8个字节 ]64 位有符号补码整数
。数值区间为-9223372036854775808
到9223372036854775807
= 2 的(64-1)次方-1- 各整数类型有固定的表示范围和字段长度
- Scala默认的数据类型为
Int
,长整型需要加l
或者L
- 高精度数转低精度数需要强制类型转换:
val b3: Byte = (1 + 10).toByte
举个栗子:
val al: Byte = 127
val a2: Byte = -128
val a3 = 12
val b1: Byte = 10
val b2: Byte = (10 + 20)
println(b2)
val b3: Byte = (b1 + 10).toByte
浮点类型
Float
[4] 32 位, IEEE 754 标准的单精度浮点数Double
[8] 64 位 IEEE 754 标准的双精度浮点数- 默认为
Double
类型
举个栗子:
val f1: Float = 1.232f
val d2 = 12.987
字符类型
- 字符类型是
Char
,表示单个字符 - 字符常量是用单引号 ' ' 括起来的单个字符。
- 转义字符:
\t 、\n、\\、\”
布尔类型
- Booolean 类型数据只允许取值
true
和false
- 占一个字节
举个栗子:
val isTrue = true
val isFalse: Boolean = false
println(isTrue)
空类型
Unit
:表示无值 只有一个实例值,写成()
Null
: Null 类型只有一个实例值null
Nothing
: 确定没有正常的返回值,可以用 Nothing 来指定返回类型
举个栗子:
def m2(n: Int): Int = {
if (n == 0)
throw new NullPointerException
else
return n
}
类型转换
- 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成 精度大的那种数据类型,然后再进行计算。
- 高精度数据转嘀精度时会报错。
Byte
,Short
和Char
之间不会相互自动转换。Byte
,Short
,Char
他们三者可以计算,在计算时首先转换为Int
类型。
举个栗子:
val a1: Byte = 10;
val b1: Long = 20L;
val result1: Long = a1 + b1
println(result1)
强制类型转换
- 强制类型转换:
toByte
、toInt
、...... 'aaa'.toInt 2.2.toInt
- 存在精度丢失
- 数值和String之间的转换:
基本类型的值+" "
、s1.toInt、s1.toFloat、s1.toDouble、s1.toByte
举个栗子:
val n1: Int = 2.5.toInt
println(n1)
val n2: Int = (2.6 + 3.7).toInt
println(n2)
// 数值转为String
val a: Int = 27
val s: String = a + " "
println(s)
//String转换为数值
val m: Int = "12".toInt
val f: Float = "12.4".toFloat
val f2: Int = "12.6".toFloat.toInt
println(f2)
本次文章分享到这里就结束了,希望对你有所帮助!!!