(文章目录)

一、变量和常量

如何定义?

	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, forprivate, protected, abstract, sealed, final, implicit, lazy, overridetry, catch, finally, throwif, else, match, case, do, while, for, return, yielddef, val, varthis, supernewtrue, 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 位有符号补码整数。数值区间为 -128127
  • Short [2个字节] 16 位有符号补码整数。数值区间为 -3276832767
  • Int [4个字节] 32 位有符号补码整数。数值区间为 -21474836482147483647
  • Long [8个字节 ] 64 位有符号补码整数。数值区间为 -92233720368547758089223372036854775807= 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 类型数据只允许取值 truefalse
  • 占一个字节

举个栗子:

    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
    }

类型转换

  • 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成 精度大的那种数据类型,然后再进行计算。
  • 高精度数据转嘀精度时会报错。
  • ByteShortChar 之间不会相互自动转换。
  • ByteShortChar 他们三者可以计算,在计算时首先转换为 Int 类型。

举个栗子:

    val a1: Byte = 10;
    val b1: Long = 20L;
    val result1: Long = a1 + b1
    println(result1)

强制类型转换

  • 强制类型转换:toBytetoInt、......
  • '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)

本次文章分享到这里就结束了,希望对你有所帮助!!!