Scala-变量与数据类型

变量与数据类型

变量声明

 // var | val 变量名 :变量类型 = 变量值
// 用户名称
var username : String = "zhangsan"  //可变变量 :值可以改变的变量
// 用户密码
val userpswd : String = "000000"  //不可变变量 :值一旦初始化后无法改变的变量

变量的类型如果能够通过变量值推断出来,那么可以省略类型声明

变量初始化(强制)

var username // Error
val username = "zhangsan" // OK

标识符

1. 数字,字母,下划线,$
2. 数字不能开头
3. 不能使用关键字或保留字
4. 区分大小写
5. 长度没有限制

Scala 可以使用两种形式的标志符,字符数字和符号。

  • 字符数字使用字母或是下划线开头,后面可以接字母或是数字,符号"\("在 Scala 中也看作为字母。然而以"\)"开头的标识符为保留的 Scala 编译器产生的标志符使用,应用程序应该避免使用"$"开始的标识符,以免造成冲突。
  • Scala 的命名规范采用和 Java 类似的 camel 命名规范,首字符小写,比如 toString。类名的首字符还是使用大写。此外也应该避免使用以下划线结尾的标志符以避免冲突。
  • Scala 内部实现时会使用转义的标志符,比如:-> 使用 \(colon\)minus$greater 来表示这个符号。

字符串

在 Scala 中,字符串的类型实际上就是 Java中的 String类,它本身是没有 String 类的。

在 Scala 中,String 是一个不可变的字符串对象,所以该对象不可被修改。这就意味着你如果修改字符串就会产生一个新的字符串对象。

val name : String = "scala"
val subname : String = name.substring(0,2)
println("Hello " + name) // 字符串连接
printf("name=%s\n", name) // 传值字符串(格式化字符串)
println(s"name=${name}") // 插值字符串 将变量值插入到字符串
// 多行格式化字符串
// 在封装JSON或SQL时比较常用
// 竖线表示顶格符
        val s =
            """
              | Hello
                Scala
              |""".stripMargin('#')

        val json =
            s"""
              | { "username":"${name}", "password":"${password}" }
              |""".stripMargin

        val sql = "select id from (select * from t_user where id = 1 order by id desc) a group by id"

        val sql1 =
            """
              | select
              |    id
              | from
              |    (
              |        select
              |           *
              |        from t_user
              |        where id = 1
              |        order by id desc
              |
              |    ) a
              | group by id
              |
              |""".stripMargin

输入与输出

输入

val age : Int = scala.io.StdIn.readInt() // 从控制台输入
scala.io.Source.fromFile("input/user.json").foreach(
	line => {
		print(line)
	}
)
scala.io.Source.fromFile("input/user.json").getLines() // 从文件中输入
// 也可静态导入

输出

val writer = new PrintWriter(new File("output/test.txt" ))
writer.write("Hello Scala")
writer.close()

网络

object TestServer {
    def main(args: Array[String]): Unit = {
        val server = new ServerSocket(9999)
        while ( true ) {
            val socket: Socket = server.accept()
            val reader = new BufferedReader(
                new InputStreamReader(
                    socket.getInputStream,
                    "UTF-8"
                )
            )
            var s : String = ""
            var flg = true
            while ( flg  ) {
                s = reader.readLine()
                if ( s != null ) {
                    println(s)
                } else {
                    flg = false
                }
            }
        }
    }
}

...

object TestClient {
    def main(args: Array[String]): Unit = {
        val client = new Socket("localhost", 9999)
        val out = new PrintWriter(
            new OutputStreamWriter(
                client.getOutputStream,
                "UTF-8"
            )
        )
        out.print("hello Scala")
        out.flush()
        out.close()
        client.close()
    }
}

数据类型

image

Scala是完全面向对象的语言,所以不存在基本数据类型的概念,有的只是任意值对象类型(AnyVal)和任意引用对象类型(AnyRef)

// Nothing是scala语言中特殊的类型,用于统一方法的异常和正常的返回
}
def test(): Nothing = {
    throw new Exception()
}
def test1(): String = {
    throw new Exception()
posted @ 2022-09-15 18:30  POCOPOCOPOCO  阅读(47)  评论(0编辑  收藏  举报