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

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

文章目录

  • 变量和数据类型
    • 1.注释
    • [2 变量和常量(重点)](#2 变量和常量(重点))
    • [3 标识符的命名规范](#3 标识符的命名规范)
    • [4 字符串输出](#4 字符串输出)
    • [5.IO 输入 输出](#5.IO 输入 输出)
    • 6.数据类型(重点)
    • [7 整数类型(Byte、Short、Int、Long)](#7 整数类型(Byte、Short、Int、Long))
    • [8 浮点类型(Float、Double)](#8 浮点类型(Float、Double))
    • [9 字符类型(Char)](#9 字符类型(Char))
    • [10 布尔类型:Boolean](#10 布尔类型:Boolean)
    • [11 Unit 类型、Null 类型和 Nothing 类型(重点)](#11 Unit 类型、Null 类型和 Nothing 类型(重点))
      • [Unit 类型](#Unit 类型)
      • [Null 类](#Null 类)
      • [Nothing 类型](#Nothing 类型)
  • 类型转换
    • [1 数值类型自动转换](#1 数值类型自动转换)
    • [2 强制类型转换](#2 强制类型转换)
    • [3 数值类型和 String 类型间转换](#3 数值类型和 String 类型间转换)

变量和数据类型

1.注释

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

  • 注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
scala 复制代码
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 修饰的对象则不可改变,但对象的状态(值)
    却是可以改变的。(比如:自定义对象、数组、集合等等)
scala 复制代码
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 是一致的,但是细节上会有所变化,有以下三种规则:

scala 复制代码
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)字符串模板(插值字符串):通过$获取变量值

scala 复制代码
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()
scala 复制代码
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. 从文件中读取数据
scala 复制代码
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流)
scala 复制代码
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
scala 复制代码
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 等等

scala 复制代码
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)" :表示"

scala 复制代码
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 个字节。

scala 复制代码
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 只有一个实例------( ),这个实例也没有实质意义
scala 复制代码
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)
scala 复制代码
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 应用场景

scala 复制代码
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 类型。
scala 复制代码
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"转成一个整数。
相关推荐
kiiila7 分钟前
【Qt】编辑框/按钮控件---实现HelloWorld
开发语言·qt
Dcy_ASK10 分钟前
认识Python语言
开发语言·python
三天不学习16 分钟前
C# 中的记录类型简介 【代码之美系列】
后端·c#·微软技术·record·记录类型
任小永的博客42 分钟前
VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)
后端·python·django
凡人的AI工具箱44 分钟前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
凡人的AI工具箱1 小时前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
数据小小爬虫1 小时前
Python爬虫获取AliExpress商品详情
开发语言·爬虫·python
小爬虫程序猿1 小时前
利用Python爬虫速卖通按关键字搜索AliExpress商品
开发语言·爬虫·python
一朵好运莲1 小时前
React引入Echart水球图
开发语言·javascript·ecmascript
Eiceblue1 小时前
使用Python获取PDF文本和图片的精确位置
开发语言·python·pdf