• Scala变量和数据类型


    变量和数据类型

    注释

    和 Java 中的注释一模一样,这里不做过多赘述。

    // 单行注释
    
    /*
      多行注释
    */
    
    /*
     * 文档注释
     */
    

    变量和常量

    常量:在程序执行的过程中,其中不会被改变的变量

    // 变量
    // var 变量名 [: 变量类型] = 初始值
    var i:Int = 20
    // 常量
    // val 变量名 [: 变量类型] = 初始值
    val j:Int = 10
    

    能用常量的地方不用变量

    标识符的命名规范

    Scala对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是自己可以起名字的地方都叫标识符。

    命名规则

    Scala中的标识符声明,基本和Java是一致的,但是细节上会有所变化,有一下三种规则:

    • 以字母或者下划线开头,后接字母、数字、下划线
    • 以操作符开头,且只包含操作符
    • 用反引号包括的任意字符串,即使是Scala关键字也可以

    字符串输出

    • 通过+连接
    • printf用法:字符串,通过%传值
    • 字符串模板(插值字符串):通过$获取变量值
    object Test04_String {
    
      def main(args: Array[String]): Unit = {
        val name:String = "zihoo"
        val age:Int = 21
    
        // 通过+连接
        println(age + "岁的" + name + "学习scala")
    
        // * 用于字符串复制多次进行拼接
        println(name * 3)
    
        // printf用法:字符串,通过%传值
        printf("%d岁的%s学习scala\n", age, name)
    
        // 字符串模板(插值字符串):通过$获取变量值
        println(s"${age}岁的${name}学习scala")
    
        // 格式化模板字符串
        val num:Double = 3.1415926
        println(f"The number is ${num}%1.2f")
    
        // 三引号表示字符串,保持多行字符串的原格式输出
        val sql =
          s"""
             |select *
             |from
             |  student
             |where
             |  name = ${name} and age = ${age}
             |""".stripMargin
        println(sql)
      }
    }
    

    键盘输入

    在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。

    import scala.io.StdIn
    
    object Test05_StdIn {
    
      def main(args: Array[String]): Unit = {
        // 输入信息
        print("请输入您的名字:")
        val name:String = StdIn.readLine()
    
        print("请输入您的年龄:")
        val age:Int = StdIn.readInt()
    
        print(s"欢迎${age}岁的${name}学习scala")
      }
    
    }
    

    读写文件

    Scala中没有封装写文件的方法。但是在之前我们已经了解到,Scala中可以直接写Java的方法,所以我们可以使用Java的方法来进行写文件。

    import java.io.{File, PrintWriter}
    import scala.io.Source
    
    object Test06_FileIO {
      def main(args: Array[String]): Unit = {
        // 从文件中读取数据
        Source.fromFile("src/main/resources/test.txt").foreach(print)
    
        // 将数据写入文件
        val writer = new PrintWriter(new File("src/main/resources/output.txt"))
        writer.write("Hello Scala from Java")
        writer.close()
      }
    }
    

    数据类型

    Scala中一切数据都是对象,都是Any的子类

    Scala中数据类型分为两大类:数值类型、引用类型,不管是值类型还是引用类型都是对象

    Scala数据类型仍然遵守,低精度的值类型向高精度值类型,自动转换

    Scala中的StringOps是对Java中的String增强

    Unit对应Java中的void,用于方法返回值的位置,表示方法没有返回值。Unit是一个数据类型,只有一个对象就是()。Void不是数据类型,只是一个关键字。

    Null是一个类型,只有一个对象就是null。它是所有引用类型的子类。

    Nothing,是所有数据类型的子类,主要用在一个函数没有明确返回值时使用,因为这样我们可以把抛出的返回值,返回给任何变量或者函数。

     scala hierarchy

    整数类型

    Scala的整数类型就是用于存放整数值的,比如12, 30, 3456等等

    数据类型 长度 描述
    Byte 1 8位有符号补码整数。数值区间为-128 - 127
    Short 2 16位有符号补码整数。数值区间为-32768 - 32767
    Int 4 32位有符号补码整数。数值区间为-2147483648 - 2147483647
    Long 8 64位有符号补码整数。数值区间为-9223372036854775808 - 9223372036854775807

    字符类型

    可以表示单个字符,字符类型是char

    空类型

    数据类型 描述
    Unit 表示无值,和其它语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()
    Null null,Null类型只有一个实例值null
    Nothing Nothing类型在Scala的类层级最低端;它是任何其它类型的子类型。当一个函数,我们确定没有正常的返回值,可以用Nothing来指定返回类型,这样有一个好处,就是我们可以把返回的值(异常)赋给其它的函数或者变量

    类型转换

    类型自动转换

    自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型

    把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换

    (byte, short)和char之间不会相互自动转换

    byte, short, char它们三者可以计算,在计算时首先转换为int类型

    package chapter02
    
    object Test08_DataTypeConversion {
    
      def main(args: Array[String]): Unit = {
        // 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型
        val a1: Byte = 10
        val b1: Long = 2200
        val result: Long = a1 + b1
        var resultInt: Int = (a1 + b1.toInt)
    
        // 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换
        val a2: Byte = 10
        val b2: Int = a2
        var c2: Byte = b2.toByte
    
        // (byte, short)和char之间不会相互自动转换
        val a3: Byte = 10
        val b3: Char = 'b'
        // val c3: Byte = b3  // error
    
        // byte, short, char它们三者可以计算,在计算时首先转换为int类型
        val a4: Byte = 10
        val b4: Short = 203
        val c4: Char = 'b'
        val result4: Int = a4 + b4
    
      }
    }
    

    除此之外,Scala还提供了非常强大的隐式转换机制(隐式函数,隐式类等)。

    强制类型转换

    自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上强制转函数,但可能造成精度降低或溢出,格外要注意。

    object Test08_DataTypeConversion {
    
      def main(args: Array[String]): Unit = {
        // 强制类型转换
        // 将高精度转换为低精度
        val n1: Int = 2.5.toInt
        println(s"n1: ${n1}")
        val n2: Int = -2.7.toInt
        println(s"n2: ${n2}")
    
        // 强转符号只针对最近的操作符有效,往往会使用小括号来提升优先级
        val n3: Int = 2.3.toInt + 3.7.toInt
        val n4: Int = (2.3 + 3.7).toInt
    
        // 数值类型和String类型的转换
        // 数值-->String
        val number: Int = 27
        val str: String = number + ""
        println(str)
    
        // String --> number
        val number2: Int= "12".toInt
      }
    }
    
  • 相关阅读:
    Windows系统中监控文件复制操作的几种方式
    右击菜单一键优化(增加新建office2003、新建reg和bat,删除新建公文包、新建wps、新建rar)
    美颜我迪!
    为什么我们不要 .NET 程序员
    访问局域网电脑提示“指定的网络名不存在”的解决办法
    WIN7X64SP1极限精简版by双心
    一键精简Windows不常用的字体.cmd
    dll文件32位64位检测工具以及Windows文件夹SysWow64的坑【转发】
    Win7精简成功后的总结
    dependency walker检查dll依赖关系目录设置的问题
  • 原文地址:https://www.cnblogs.com/Gazikel/p/15756022.html
Copyright © 2020-2023  润新知