• Scala语言 学习记录(二)


    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中的voidAnyVal子类。用于方法返回值的位置,表示方法无返回值,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)
    
      }
    }

    测试结果:

      

  • 相关阅读:
    Jetty 的工作原理以及与 Tomcat 的比较
    基于Tengine的反向代理详细配置
    mysql定时脚本(event),类似oracle的job
    mysql 强制走索引
    如何检查mysql中建立的索引是否生效的检测方法及相关参数说明
    MySQL查询不使用索引汇总
    [大牛翻译系列]Hadoop 翻译文章索引
    [牛感悟系列]JAVA(1)理解JAVA垃圾回收
    [大牛翻译系列]Hadoop系列性能部分完结
    [大牛翻译系列]Hadoop(22)附录D.2 复制连接框架
  • 原文地址:https://www.cnblogs.com/lx06/p/15842170.html
Copyright © 2020-2023  润新知