提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 变量和数据类型
- 1.注释
- 2 变量和常量(重点)
- 3 标识符的命名规范
- 4 字符串输出
- 5.IO 输入 输出
- 键盘输入
- 读写文件 IO
- 6.数据类型(重点)
- 回顾:Java数据类型
- Scala数据类型
- 7 整数类型(Byte、Short、Int、Long)
- 8 浮点类型(Float、Double)
- 9 字符类型(Char)
- 10 布尔类型:Boolean
- 11 Unit 类型、Null 类型和 Nothing 类型(重点)
- Unit 类型
- Null 类
- Nothing 类型
- 类型转换
- 1 数值类型自动转换
- 2 强制类型转换
- 3 数值类型和 String 类型间转换
变量和数据类型
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)案例实操
- 声明变量时,类型可以省略,编译器自动推导,即类型推导
- 类型确定后,就不能修改,说明 Scala 是强数据类型语言。
- 变量声明时,必须要有初始值
- 在声明/定义一个变量时,可以使用 var 或者 val 来修饰,var 修饰的变量可改变,val 修饰的变量不可改。
- var 修饰的对象引用可以改变,val 修饰的对象则不可改变,但对象的状态(值)
却是可以改变的。(比如:自定义对象、数组、集合等等)
package chapter02import chapter01.Studentobject Test02_Variable {def main(args: Array[String]): Unit = {// 声明一个变量的通用语法var a: Int = 10//(1)声明变量时,类型可以省略,编译器自动推导,即类型推导var a1 = 10val b1 = 23//(2)类型确定后,就不能修改,说明Scala是强数据类型语言。var a2 = 15 // a2类型为Int
// a2 = "hello"//(3)变量声明时,必须要有初始值
// var a3: Int//(4)在声明/定义一个变量时,可以使用var或者val来修饰,var修饰的变量可改变,val修饰的变量不可改。a1 = 12
// b1 = 25var alice = new Student("alice", 20)alice = new Student("Alice", 20)alice = nullval bob = new Student("bob", 23)bob.age = 24bob.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 chapter02object Test04_String {def main(args: Array[String]): Unit = {//(1)字符串,通过+号连接val name: String = "alice"val age: Int = 18println(age + "岁的" + name + "在尚硅谷学习")// *用于将一个字符串复制多次并拼接println(name * 3)//(2)printf用法:字符串,通过%传值。printf("%d岁的%s在尚硅谷学习", age, name)println()//(3)字符串模板(插值字符串):通过$获取变量值println(s"${age}岁的${name}在尚硅谷学习")val num: Double = 2.3456println(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}|""".stripMarginprintln(sql)}
}
5.IO 输入 输出
键盘输入
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
1)基本语法
- StdIn.readLine()
- StdIn.readShort()
- StdIn.readDouble()
package chapter02import scala.io.StdInobject 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
- 从文件中读取数据
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()}
}
- 将数据写入文件 (引入java的io流)
import java.io.{File, PrintWriter}
import scala.io.Sourceobject 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)案例实操
- Scala 各整数类型有固定的表示范围和字段长度,不受具体操作的影响,以保证Scala 程序的可移植性
- Scala 的整型,默认为 Int 型,声明 Long 型,须后加‘l’或‘L’
- Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long
import chapter01.Studentobject Test07_DataType {def main(args: Array[String]): Unit = {// 1. 整数类型val a1: Byte = 127val a2: Byte = -128// val a2: Byte = 128 // errorval a3 = 12 // 整数默认类型为Intval a4: Long = 1324135436436L // 长整型数值定义val b1: Byte = 10val b2: Byte = 10 + 20println(b2)// val b3: Byte = b1 + 20val b3: Byte = (b1 + 20).toByteprintln(b3)}
}
8 浮点类型(Float、Double)
Scala 的浮点类型可以表示一个小数,比如 123.4f,7.8,0.12 等等
object Test01 {def main(args: Array[String]): Unit = {// 建议,在开发中需要高精度小数时,请选择 Doublevar n7 = 2.2345678912fvar n8 = 2.2345678912println("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' + 1println(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 = falsevar isResult2: Boolean = trueprintln(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 表示没有返回值,即 voidprintln("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 NullPointerExceptionelsereturn n}println(m1(5))println(m1(-2))println(m1(0))}
}
类型转换
1 数值类型自动转换
- 当 Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
- 自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。
- 把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。
- (byte,short)和 char 之间不会相互自动转换。
- byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型。
object Test01 {def main(args: Array[String]): Unit = {// 1. 自动类型转换// (1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成精度大的那种数据类型,然后再进行计算。val a1: Byte = 10val b1: Long = 2353val result1: Long = a1 + b1val result11: Int = (a1 + b1.toInt) // 强转// (2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动类型转换。val a2: Byte = 10val b2: Int = a2// val c2: Byte = b2 // error// (3)(byte,short)和char之间不会相互自动转换。val a3: Byte = 10val b3: Char = 'b'// val c3: Byte = b3 // errorval c3: Int = b3println(c3)// (4)byte,short,char他们三者可以计算,在计算时首先转换为int类型。val a4: Byte = 12val b4: Short = 25val c4: Char = 'c'val result4: Int = a4 + b4val result44: Int = a4 + b4 + c4println(result44)}
}
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"转成一个整数。