1、字符串
关键字:
-
package import class obejct trait extends with type for
-
private protected abstract sealed final implicit lazy override
-
try catch finlly throw
-
if else match case do while for return yield
-
def var val
-
this super
-
new
-
true false null
-
其中Java没有的关键字:
object trait with implicit match yield def val var
字符串:
-
类型:
String
-
+
号连接 -
*
字符串乘法,复制一个字符串多次 -
printf
格式化输出 -
字符串插值:
s"xxx${varname}"
前缀s
模板字符串,前缀f
格式化模板字符串,通过$
获取变量值,%
后跟格式化字符串。 -
原始字符串:
raw"rawstringcontents${var}"
,不会考虑后跟的格式化字符串。 -
多行字符串:
""" """
。 -
输出:
print printf println ...
package com.demo2 /** * @author June * @date 2022/1/25 9:12 */ object Test4 { def main(args: Array[String]): Unit = { //字符串输出 //字符串的拼接、println()用法:通过:赋值 //字符串拼接:通过+链接 val name = "alice" val age = 33 println(age+"岁的"+name+"在学习") //*用于将一个字符串复制多次拼接 println(name*2) //println():字符串。通过%传值 printf("%d岁的%s在学习",age,name) println() //字符串的差值(模板)(差值字符串)通过$获取变量值 println(s"${age}岁的${name}在学习") val num: Float = 2.33333445f println(s"The num is ${num}") //格式化模板字符串s val nums: Double = 333232.33333445 println(f"The num is ${nums}%.2f") //格式化模板字符串f println(raw"The num is ${nums}%.2f") //格式化模板字符串raw //三引号表示字符串、保持多行字符串的原格式输出 val sql=s""" |select * |from | student |where | name = ${name} |and | age > ${age} |""".stripMargin println(sql) } }
测试结果:
2、输入
输入:
-
StdIn.readLine()
-
StdIn.readShort() StdIn.readDouble
-
import scala.io.StdIn
package com.demo2 import scala.io.StdIn /** * @author June * @date 2022/1/25 9:35 */ object Test5 { def main(args: Array[String]): Unit = { //信息地输入 println("请输入您的大名:") val name = StdIn.readLine() println("请输入您的年龄:") val age = StdIn.readInt() //控制台的打印输出 println(s"欢迎${age}岁的${name}") } }
测试结果:
3、读取文件
package com.demo2 import java.io.{File, PrintWriter} import scala.io.Source /** * @author June * @date 2022/1/25 9:40 */ object Test6 { def main(args: Array[String]): Unit = { //从文件种读取数据 Source.fromFile("src/main/resources/test.txt").foreach(print) //将数据写入文件 val writer = new PrintWriter(new File("src/main/resources/output1.txt")) writer.write("hello scala from ni") //关闭输出流 writer.close() Source.fromFile("src/main/resources/output1.txt").foreach(print) } }
测试结果:
4、数据类型
数据类型:
-
java基本类型
char byte short int long float double boolean
。 -
java基本类型对应包装类型:
Charater Byte Short Integer Long Float Double Boolean
。 -
java中不是纯粹的面向对象。
-
Scala吸取了这一点,所有数据都是对象,都是
Any
的子类。 -
Any
有两个子类:AnyVal
值类型AnyRef
引用类型。 -
数值类型都是
AnyVal
子类,和Java数值包装类型都一样,只有整数在scala中是Int
、字符是Char
有点区别。 -
StringOps
是java中String
类增强,AnyVal
子类。 -
Unit
对应java中的void
,AnyVal
子类。用于方法返回值的位置,表示方法无返回值,Unit
是一个类型,只有一个单例的对象,转成字符串打印出来为()
。 -
Void
不是数据类型,只是一个关键字。 -
Null
是一个类型,只有一个单例对象null
就是空引用,所有引用类型AnyRef
的子类,这个类型主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。 -
Nothing
所有类型的子类型,也称为底部类型。它常见的用途是发出终止信号,例如抛出异常、程序退出或无限循环。
整数类型:都是有符号整数,标准补码表示。
-
Byte
1字节 -
Short
2字节 -
Int
4字节 -
Long
8字节 -
整数赋初值超出表示范围报错。
-
自动类型推断,整数字面值默认类型
Int
,长整型字面值必须加L
后缀表示。 -
直接向下转换会失败,需要使用强制类型转换,
(a + 10).toByte
。
浮点类型:
-
Float
IEEE 754 32位浮点数 -
Double
IEEE 754 64位浮点数 -
字面值默认
Double
字符类型:
-
同java的
Character
,2字节,UTF-16编码的字符。 -
字符常量:
''
-
类型
Char
-
转义:
\t \n \r \\ \" \'
etc
布尔类型:true false
空类型:
-
Unit
无值,只有一个实例,用于函数返回值。 -
Null
只有一个实例null
,空引用。 -
Nothing
确定没有正常的返回值,可以用Nothing来指定返回值类型。
package com.demo2 /** * @author June * @date 2022/1/25 10:10 */ object Test7 { def main(args: Array[String]): Unit = { val a1: Byte = 127 //错误定义:Byte 值范围 -128~127 //val a2: Byte = 128 val a2: Byte = -128 //定义变量默认为整型 val a3 = 12 //默认Int val a4: Long = 123444322222L //长整型数值定义 //错误定义 val b1: Byte = 10 val b2: Byte = (3+29) println(b2) val b3: Byte = (b1+33).toByte println(b3) //浮点类型 val f1: Float = 1.2243f val d1:Double = 3.223 //字符类型 val c1: Char = 'a' println(c1) val c2: Char = '9' println(c2) //特殊字符 val c3: Char = '\t' //制表符 val c4: Char = '\n' //换行符 println("abc" + c3 + "def") println("abc" + c4 + "def") //转义字符 val c5 = '\\' //表示\ val c6 = '\"' //表示" println("abc" + c5 + "def") println("abc" + c6 + "def") val i1: Int = c1 println("i1:" + i1) val i2: Int = c2 println("i2:" + i2) val c7: Char = (i1+1).toChar println(c7) val c8: Char = (i2-1).toChar println(c8) } }
测试结果: