Scala--03--变量和数据类型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


变量和数据类型

1.注释

Scala 注释使用和 Java 完全一样。

  • 注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

在这里插入图片描述

package com.atguigu.chapter02
object TestNotes {
 def main(args: Array[String]): Unit = {
 //(1)单行注释://
 println("dalang")
 
 //(2)多行注释:/* */
 /*
 println("dalang")
 println("jinlian")
 */
 
 //(3)文档注释:/**
 //*
 //*/
 /**
 * println("qingge")
 println("qingge")
 println("qingge")
 */
 }
}

2) 代码规范
(1)使用一次 tab 操作,实现缩进,默认整体向右边移动,用 shift+tab 整体向左移
(2)或者使用 ctrl + alt + L 来进行格式化
(3)运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
(4)一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅

2 变量和常量(重点)

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

在这里插入图片描述
2)案例实操

  1. 声明变量时,类型可以省略,编译器自动推导,即类型推导
  2. 类型确定后,就不能修改,说明 Scala 是强数据类型语言。
  3. 变量声明时,必须要有初始值
  4. 在声明/定义一个变量时,可以使用 var 或者 val 来修饰,var 修饰的变量可改变,val 修饰的变量不可改。
  5. var 修饰的对象引用可以改变,val 修饰的对象则不可改变,但对象的状态(值)
    却是可以改变的。(比如:自定义对象、数组、集合等等)

在这里插入图片描述

package chapter02

import chapter01.Student

object Test02_Variable {
  def main(args: Array[String]): Unit = {
    // 声明一个变量的通用语法
    var a: Int = 10

    //(1)声明变量时,类型可以省略,编译器自动推导,即类型推导
    var a1 = 10
    val b1 = 23

    //(2)类型确定后,就不能修改,说明Scala是强数据类型语言。
    var a2 = 15    // a2类型为Int
//    a2 = "hello"

    //(3)变量声明时,必须要有初始值
//    var a3: Int

    //(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。
    a1 = 12
//    b1 = 25

    var alice = new Student("alice", 20)
    alice = new Student("Alice", 20)
    alice = null
    val bob = new Student("bob", 23)
    bob.age = 24
    bob.printInfo()
//    bob = new Student("bob", 24)
  }
}

3 标识符的命名规范

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

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

在这里插入图片描述

object Test03_Identifier {
  def main(args: Array[String]): Unit = {
    //(1)以字母或者下划线开头,后接字母、数字、下划线
    val hello: String = ""
    var Hello123 = ""
    val _abc = 123

//    val h-b = ""
//    val 123abc = 234

    //(2)以操作符开头,且只包含操作符(+ - * / # !等)
    val -+/% = "hello"
    println(-+/%)

    //(3)用反引号`....`包括的任意字符串,即使是Scala关键字(39个)也可以
    val `if` = "if"
    println(`if`)
  }
}

4 字符串输出

1)基本语法
(1)字符串,通过+号连接
(2)printf 用法:字符串,通过%传值。
(3)字符串模板(插值字符串):通过$获取变量值

package chapter02

object Test04_String {
  def main(args: Array[String]): Unit = {
    //(1)字符串,通过+号连接
    val name: String = "alice"
    val age: Int = 18
    println(age + "岁的" + name + "在尚硅谷学习")

    // *用于将一个字符串复制多次并拼接
    println(name * 3)

    //(2)printf用法:字符串,通过%传值。
    printf("%d岁的%s在尚硅谷学习", age, name)
    println()

    //(3)字符串模板(插值字符串):通过$获取变量值
    println(s"${age}岁的${name}在尚硅谷学习")

    val num: Double = 2.3456
    println(f"The num is ${num}%2.2f")    // 格式化模板字符串
    println(raw"The num is ${num}%2.2f")

    // 三引号表示字符串,保持多行字符串的原格式输出
    val sql = s"""
       |select *
       |from
       |  student
       |where
       |  name = ${name}
       |and
       |  age > ${age}
       |""".stripMargin
    println(sql)
  }
}

在这里插入图片描述

5.IO 输入 输出

键盘输入

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

1)基本语法

  • StdIn.readLine()
  • StdIn.readShort()
  • StdIn.readDouble()
package chapter02

import scala.io.StdIn

object Test05_StdIn {
  def main(args: Array[String]): Unit = {
    // 输入信息
    println("请输入您的大名:")
    val name: String = StdIn.readLine()
    println("请输入您的芳龄:")
    val age: Int = StdIn.readInt()

    // 控制台打印输出
    println(s"欢迎${age}岁的${name}来到尚硅谷学习")
  }
}

在这里插入图片描述

读写文件 IO

  1. 从文件中读取数据
    在这里插入图片描述
object Test06_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/output.txt"))
    writer.write("hello scala from java writer")
    writer.close()
  }
}

在这里插入图片描述

  1. 将数据写入文件 (引入java的io流
import java.io.{File, PrintWriter}
import scala.io.Source

object Test06_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/output.txt"))
    writer.write("hello scala from java writer")
    writer.close()
  }
}

在这里插入图片描述

6.数据类型(重点)

回顾:Java数据类型

在这里插入图片描述

Scala数据类型

在这里插入图片描述

7 整数类型(Byte、Short、Int、Long)

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

1)整型分类
在这里插入图片描述
2)案例实操

  1. Scala 各整数类型有固定的表示范围和字段长度,不受具体操作的影响,以保证Scala 程序的可移植性
  2. Scala 的整型,默认为 Int 型,声明 Long 型,须后加‘l’或‘L’
  3. Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long

import chapter01.Student

object Test07_DataType {
  def main(args: Array[String]): Unit = {
    // 1. 整数类型
    val a1: Byte = 127
    val a2: Byte = -128

//    val a2: Byte = 128    // error

    val a3 = 12    // 整数默认类型为Int
    val a4: Long = 1324135436436L    // 长整型数值定义

    val b1: Byte = 10
    val b2: Byte = 10 + 20
    println(b2)

//    val b3: Byte = b1 + 20
    val b3: Byte = (b1 + 20).toByte
    println(b3)

  }
}

8 浮点类型(Float、Double)

Scala 的浮点类型可以表示一个小数,比如 123.4f,7.8,0.12 等等

在这里插入图片描述

object Test01 {
  def main(args: Array[String]): Unit = {
    // 建议,在开发中需要高精度小数时,请选择 Double
    var n7 = 2.2345678912f
    var n8 = 2.2345678912
    println("n7=" + n7)
    println("n8=" + n8)
    
  }
}

在这里插入图片描述

9 字符类型(Char)

在这里插入图片描述

1)基本说明
字符类型可以表示单个字符,字符类型是 Char。

2)案例实操
(1)字符常量是用单引号 ’ ’ 括起来的单个字符。
(2)\t :一个制表位,实现对齐的功能
(3)\n :换行符
(4)\ :表示 \
(5)" :表示"

object Test01 {
  def main(args: Array[String]): Unit = {

    //(1)字符常量是用单引号 ' ' 括起来的单个字符。
    var c1: Char = 'a'
    println("c1=" + c1)
    //注意:这里涉及自动类型提升,其实编译器可以自定判断是否超出范围,
    //不过 idea 提示报错
    var c2:Char = 'a' + 1
    println(c2)

    //(2)\t :一个制表位,实现对齐的功能
    println("姓名\t 年龄")
    //(3)\n :换行符
    println("西门庆\n 潘金莲")
    //(4)\\ :表示\
    println("c:\\岛国\\avi")
    //(5)\" :表示"
    println("同学们都说:\"大海哥最帅\"")

  }
}

在这里插入图片描述

10 布尔类型:Boolean

1)基本说明
(1)布尔类型也叫 Boolean 类型,Booolean 类型数据只允许取值 true 和 false
(2)boolean 类型占 1 个字节。

object Test01 {
  def main(args: Array[String]): Unit = {
    var isResult: Boolean = false
    var isResult2: Boolean = true
    println(isResult)
    println(isResult2)

  }
}

在这里插入图片描述

11 Unit 类型、Null 类型和 Nothing 类型(重点)

1)基本说明
在这里插入图片描述

Unit 类型

  • Unit 类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit 类似于 Java 里的 void。Unit 只有一个实例——( ),这个实例也没有实质意义
object Test01 {
  def main(args: Array[String]): Unit = {
    def sayOk: Unit = { // unit 表示没有返回值,即 void
      println("sayOk 被调用执行")
    }

    println(sayOk)
  }
}

在这里插入图片描述

Null 类

  • Null 类只有一个实例对象,Null 类似于 Java 中的 null 引用。
  • Null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)
object Test01 {
  def main(args: Array[String]): Unit = {
    //null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型 (AnyVal)
    var cat = new Cat();
    cat = null // 正确
    println("cat:" + cat)
  }
}

class Cat {
}

在这里插入图片描述

Null 不能赋值给值类型(AnyVal)

在这里插入图片描述

Nothing 类型

  • Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方 法不会正常返回
  • 而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容
    在这里插入图片描述

Nothing 应用场景

object Test01 {
  def main(args: Array[String]): Unit = {

    def m1(n: Int): Int = {
      if (n == 0)
        throw new NullPointerException
      else
        return n
    }
    
    println(m1(5))
    println(m1(-2))
    println(m1(0))
  }
}

在这里插入图片描述

类型转换

1 数值类型自动转换

  • 当 Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:

在这里插入图片描述

  1. 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
  2. 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
  3. (byte,short)和 char 之间不会相互自动转换。
  4. byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型。
object Test01 {
  def main(args: Array[String]): Unit = {

    // 1. 自动类型转换
    //    (1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
    val a1: Byte = 10
    val b1: Long = 2353
    val result1: Long = a1 + b1
    val result11: Int = (a1 + b1.toInt) // 强转

    //    (2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
    val a2: Byte = 10
    val b2: Int = a2
    //    val c2: Byte = b2    // error

    //    (3)(byte,short)和char之间不会相互自动转换。
    val a3: Byte = 10
    val b3: Char = 'b'
    //    val c3: Byte = b3    // error
    val c3: Int = b3
    println(c3)

    //    (4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。
    val a4: Byte = 12
    val b4: Short = 25
    val c4: Char = 'c'
    val result4: Int = a4 + b4
    val result44: Int = a4 + b4 + c4
    println(result44)
  }
}

2 强制类型转换

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

在这里插入图片描述
2)案例实操

  1. 将数据由高精度转换为低精度,就需要使用到强制转换
  2. 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
    在这里插入图片描述
    在这里插入图片描述

3 数值类型和 String 类型间转换

1)基本说明

  • 在程序开发中,我们经常需要将基本数值类型转成 String 类型。或者将 String 类型转成基本数值类型。

2)案例实操

  • 基本类型转 String 类型(语法:将基本类型的值+“” 即可
  • String 类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)
    在这里插入图片描述
    在这里插入图片描述

注意事项

在将 String 类型转成基本数值类型时,要确保 String 类型能够转成有效的数据

  • 比如我们可以把"123",转成一个整数,但是不能把"hello"转成一个整数。

在这里插入图片描述

在这里插入图片描述

相关推荐

  1. Scala 变量数据类型

    2024-03-20 09:28:04       13 阅读
  2. scala基础学习--变量,标识符,类型类型转换

    2024-03-20 09:28:04       14 阅读
  3. Scala学习一:语法基础/数据类型/变量

    2024-03-20 09:28:04       40 阅读
  4. 二:C语言-数据类型变量

    2024-03-20 09:28:04       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-20 09:28:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-20 09:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-20 09:28:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-20 09:28:04       20 阅读

热门阅读

  1. ROS分布式多机通信(主从机配置)

    2024-03-20 09:28:04       17 阅读
  2. FFmpeg-- c++实现:pcm和yuv编码

    2024-03-20 09:28:04       20 阅读
  3. 播放器视频卡顿,延迟的原因

    2024-03-20 09:28:04       56 阅读
  4. JVM简介

    JVM简介

    2024-03-20 09:28:04      19 阅读
  5. 【c语言篇】经典100例之第1-5例

    2024-03-20 09:28:04       19 阅读
  6. 企业产品网络安全建设实录日报规划

    2024-03-20 09:28:04       23 阅读
  7. 项目当中 签到功能 +多级缓存+介绍一下点赞功能

    2024-03-20 09:28:04       20 阅读
  8. python Jira库如何修改一个issue的status

    2024-03-20 09:28:04       23 阅读
  9. 爬虫基本原理介绍、实现以及问题解决

    2024-03-20 09:28:04       17 阅读