- 一、注释
- 1)基本语法
- 2)案例实操
- 3) 代码规范
- 二、变量和常量(重点)
- 0)回顾:Java 变量和常量语法
- 1)基本语法
- 2)案例实操
- 三、标识符的命名规范
- 1)命名规则
- 2)案例实操
- 四、字符串输出
- 1)基本语法
- 2)案例实操
- 五、键盘输入
- 1)基本语法
- 2)案例实操
- 六、数据类型(重点)
- 七、整数类型(Byte、Short、Int、Long)
- 1)整型分类
- 2)案例实操
- (1)Scala 各整数类型有固定的表示范围和字段长度,不受具体操作的影响,以保证
- (2)Scala 的整型,默认为 Int 型,声明 Long 型,须后加‘l’或‘L’
- (3)Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long
- 八、浮点类型(Float、Double)
- 1)浮点型分类
- 2)案例实操
- 九、字符类型(Char)
- 1)基本说明
- 2)案例实操
- 十、布尔类型:Boolean
- 1)基本说明
- 2)案例实操
- 十一、Unit 类型、Null 类型和 Nothing 类型(重点)
- 1)基本说明
- 2)案例实操
- 十二、类型转换
- 1、数值类型自动转换
- 1)基本说明
- 2)案例实操
- 2、强制类型转换
- 1)基本说明
- 2)案例实操
- 3、数值类型和 String 类型间转换
- 1)基本说明
- 2)案例实操
- (3)注意事项
Scala 注释使用和 Java 完全一样。
1)基本语法注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再 用代码去体现。
(1)单行注释://
2)案例实操
(2)多行注释:package com.atguigu.chapter02 object TestNotes { def main(args: Array[String]): Unit = { //(1)单行注释:// println("dalang") //(2)多行注释: //(3)文档注释: } }3) 代码规范(1)使用一次 tab 操作,实现缩进,默认整体向右边移动,用 shift+tab 整体向左移
二、变量和常量(重点)
(2)或者使用 ctrl + alt + L 来进行格式化
(3)运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
(4)一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅常量:在程序执行的过程中,其值不会被改变的变量
0)回顾:Java 变量和常量语法变量类型 变量名称 = 初始值 int a = 10 final 常量类型 常量名称 = 初始值 final int b = 201)基本语法var 变量名 [: 变量类型] = 初始值 var i:Int = 10 val 常量名 [: 常量类型] = 初始值 val j:Int = 20 注意:能用常量的地方不用变量2)案例实操(1)声明变量时,类型可以省略,编译器自动推导,即类型推导 (2)类型确定后,就不能修改,说明 Scala 是强数据类型语言。 (3)变量声明时,必须要有初始值 (4)在声明/定义一个变量时,可以使用 var 或者 val 来修饰,var 修饰的变量可改变, val 修饰的变量不可改。object TestVar { def main(args: Array[String]): Unit = { //(1)声明变量时,类型可以省略,编译器自动推导,即类型推导 var age = 18 age = 30 //(2)类型确定后,就不能修改,说明 Scala 是强数据类型语言。 // age = "tom" // 错误 //(3)变量声明时,必须要有初始值 // var name //错误 //(4)在声明/定义一个变量时,可以使用 var 或者 val 来修饰,var 修饰 的变量可改变 val 修饰的变量不可改 var num1 = 10 // 可变 val num2 = 20 // 不可变 num1 = 30 // 正确 //num2 = 100 //错误,因为 num2 是 val 修饰的 } }var 修饰的对象引用可以改变,val 修饰的对象则不可改变,但对象的状态(值)
却是可以改变的。(比如:自定义对象、数组、集合等等)object TestVar { def main(args: Array[String]): Unit = { // p1 是 var 修饰的,p1 的属性可以变,而且 p1 本身也可以变 var p1 = new Person() p1.name = "dalang" p1 = null // p2 是 val 修饰的,那么 p2 本身就不可变(即 p2 的内存地址不能变), 但是,p2 的属性是可以变,因为属性并没有用 val 修饰。 val p2 = new Person() p2.name = "jinlian" // p2 = null // 错误的,因为 p2 是 val 修饰的 } } class Person { var name: String = "jinlian" }三、标识符的命名规范Scala 对各种变量、方法、函数等命名时使用的字符序列称为标识符。即:凡是自己可
1)命名规则
以起名字的地方都叫标识符。Scala 中的标识符声明,基本和 Java 是一致的,但是细节上会有所变化,有以下三种规
则:(1)以字母或者下划线开头,后接字母、数字、下划线 (2)以操作符开头,且只包含操作符(+ - * / # !等) (3)用反引号`....`包括的任意字符串,即使是 Scala 关键字(39 个)也可以 • package, import, class, object, trait, extends, with, type, for • private, protected, abstract, sealed, final, implicit, lazy, override • try, catch, finally, throw • if, else, match, case, do, while, for, return, yield • def, val, var • this, super • new • true, false, null2)案例实操需求:判断 hello、Hello12、1hello、h-b、x h、h_4、ab、Int、、+-/#!、+-/#!1、if、
if,这些名字是否合法。object TestName { def main(args: Array[String]): Unit = { // (1)以字母或者下划线开头,后接字母、数字、下划线 var hello: String = "" // ok var Hello12: String = "" // ok var 1 hello: String = "" // error 数字不能开头 var h - b: String = "" // error 不能用- var x h: String = "" // error 不能有空格 var h_4: String = "" // ok var _ab: String = "" // ok var Int: String = "" // ok 因为在 Scala 中 Int 是预定义的字符, 不是关键字,但不推荐 var _: String = "hello" // ok 单独一个下划线不可以作为标识符, 因为_被认为是一个方法 println(_) //(2)以操作符开头,且只包含操作符(+ - * / # !等) var +*-/#! : String = "" // ok var +*-/#! 1: String = "" // error 以操作符开头,必须都是操作 符 //(3)用反引号`....`包括的任意字符串,即使是 Scala 关键字(39 个) 也可以 var if : String = "" // error 不能用关键字 var `if`: String = "" // ok 用反引号`....`包括的任意字符串, 包括关键字 } }四、字符串输出 1)基本语法(1)字符串,通过+号连接
2)案例实操
(2)printf 用法:字符串,通过%传值。
(3)字符串模板(插值字符串):通过$获取变量值package chapter02 object Test03_Variable { def main(args: Array[String]): Unit = { //字符串通过+号连接 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}在尚硅谷学习") //2.2f .2 是保留小数点前两位 var num: Double = 2.3456 println(f"The num is ${num}%2.2f") //原封不动的输出 println(raw"The num is ${num}%2.2f") var sql = s""" |select * |from |student |where |name ="湛山" |""".stripMargin println(sql) } }五、键盘输入在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
1)基本语法StdIn.readLine()、StdIn.readShort()、StdIn.readDouble()
2)案例实操需求:可以从控制台接收用户信息,【姓名,年龄,薪水】。
import scala.io.StdIn object TestInput { def main(args: Array[String]): Unit = { // 1 输入姓名 println("input name:") var name = StdIn.readLine() // 2 输入年龄 println("input age:") var age = StdIn.readShort() // 3 输入薪水 println("input sal:") var sal = StdIn.readDouble() // 4 打印 println("name=" + name) println("age=" + age) println("sal=" + sal) } }六、数据类型(重点)Java基本类型:char、byte、short、int、long、float、double、boolean Java引用类型:(对象类型) 由于Java有基本类型,而且基本类型不是真正意义的对象,即使后面产生了基本类型的包装类,但是仍 然存在基本数据类型,所以Java语言并不是真正意思的面向对象。 Java基本类型的包装类:Character、Byte、Short、Integer、Long、Float、Double、Boolean 注意:Java中基本类型和引用类型没有共同的祖先。Scala数据类型
七、整数类型(Byte、Short、Int、Long)
Scala 的整数类型就是用于存放整数值的,比如 12,30,3456 等等。
1)整型分类 2)案例实操 (1)Scala 各整数类型有固定的表示范围和字段长度,不受具体操作的影响,以保证Scala 程序的可移植性。
object TestDataType { def main(args: Array[String]): Unit = { // 正确 var n1:Byte = 127 var n2:Byte = -128 // 错误 // var n3:Byte = 128 // var n4:Byte = -129 } }(2)Scala 的整型,默认为 Int 型,声明 Long 型,须后加‘l’或‘L’object TestDataType { def main(args: Array[String]): Unit = { var n5 = 10 println(n5) var n6 = 9223372036854775807L println(n6) } }(3)Scala 程序中变量常声明为 Int 型,除非不足以表示大数,才使用 Long 八、浮点类型(Float、Double)Scala 的浮点类型可以表示一个小数,比如 123.4f,7.8,0.12 等等。
1)浮点型分类 2)案例实操Scala 的浮点型常量默认为 Double 型,声明 Float 型常量,须后加‘f’或‘F’。
object TestDataType { def main(args: Array[String]): Unit = { // 建议,在开发中需要高精度小数时,请选择 Double var n7 = 2.2345678912f var n8 = 2.2345678912 println("n7=" + n7) println("n8=" + n8) } }//运行的结果
九、字符类型(Char) 1)基本说明
n7=2.2345679
n8=2.2345678912字符类型可以表示单个字符,字符类型是 Char。
2)案例实操(1)字符常量是用单引号 ’ ’ 括起来的单个字符。
(2)t :一个制表位,实现对齐的功能
(3)n :换行符
(4) :表示
(5)" :表示"object TestCharType { 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("同学们都说:"大海哥最帅"") } }十、布尔类型:Boolean 1)基本说明(1)布尔类型也叫 Boolean 类型,Booolean 类型数据只允许取值 true 和 false
2)案例实操
(2)boolean 类型占 1 个字节。object TestBooleanType { def main(args: Array[String]): Unit = { var isResult : Boolean = false var isResult2 : Boolean = true } }十一、Unit 类型、Null 类型和 Nothing 类型(重点) 1)基本说明2)案例实操
数据类型 描述 Unit 表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成()。 Null null , Null 类型只有一个实例值 null Nothing Nothing 类型在 Scala 的类层级最低端;它是任何其他类型的子类型。当一个函数,我们确定没有正常的返回值,可以用 Nothing 来指定返回类型,这样有一个好处,就是我们可以把返回的值(异常)赋给其它的函数或者变量(兼容性) (1)Unit 类型用来标识过程,也就是没有明确返回值的函数。
由此可见,Unit 类似于 Java 里的 void。Unit 只有一个实例——( ),这个实例也没有实
质意义object TestSpecialType { def main(args: Array[String]): Unit = { def sayOk : Unit = {// unit 表示没有返回值,即 void } println(sayOk) } }(2)Null 类只有一个实例对象,Null 类似于 Java 中的 null 引用。Null 可以赋值给任
意引用类型(AnyRef),但是不能赋值给值类型(AnyVal)object TestDataType { def main(args: Array[String]): Unit = { //null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型 (AnyVal) var cat = new Cat(); cat = null // 正确 var n1: Int = null // 错误 println("n1:" + n1) } } class Cat { }(3)Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方
法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼
容。object TestSpecialType { def main(args: Array[String]): Unit = { def test() : Nothing={ throw new Exception() } test } }十二、类型转换扩展 Java 面试题(隐式类型转换):
1、数值类型自动转换
当 Scala 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数值类型,这
1)基本说明
个就是自动类型转换(隐式转换)。数据类型按精度(容量)大小排序为:
(1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有数据转换成
精度大的那种数据类型,然后再进行计算(2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就会进行自动
类型转换(3)(byte,short)和 char 之间不会相互自动转换。
(4)byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型。
2)案例实操object P { def main(args: Array[String]): Unit = { //(1)自动提升原则:有多种类型的数据混合运算时,系统首先自动将所有 数据转换成精度大的那种数值类型 然后再进行计算 var n = 1 + 2.0 println(n) // n 就是 Double //(2)把精度大的数值类型赋值给精度小的数值类型时,就会报错,反之就 会进行自动类型转换 var n2: Double = 1.0 //var n3 : Int = n2 //错误,原因不能把高精度的数据直接赋值和低 精度 //(3)(byte,short)和 char 之间不会相互自动转换。 var n4: Byte = 1 //var c1 : Char = n4 //错误 var n5: Int = n4 //(4)byte,short,char 他们三者可以计算,在计算时首先转换为 int 类型 var n6: Byte = 1 var c2: Char = 1 // var n : Short = n6 + c2 //当 n6 + c2 结果类型就是 int // var n7 : Short = 10 + 90 //错误 } }注意:Scala 还提供了非常强大的隐式转换机制(隐式函数,隐式类等),我们放在高
2、强制类型转换 1)基本说明
级部分专门用一个章节来讲解。自动类型转换的逆过程,将精度大的数值类型转换为精度小的数值类型。使用时要加上
强制转函数,但可能造成精度降低或溢出,格外要注意。Java : int num = (int)2.5 Scala : var num : Int = 2.7.toInt2)案例实操(1)将数据由高精度转换为低精度,就需要使用到强制转换
(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
object TestForceTransfer { def main(args: Array[String]): Unit = { //(1)将数据由高精度转换为低精度,就需要使用到强制转换 var n1: Int = 2.5.toInt // 这个存在精度损失 //(2)强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级 var r1: Int = 10 * 3.5.toInt + 6 * 1.5.toInt // 10 *3 + 6*1 = 36 var r2: Int = (10 * 3.5 + 6 * 1.5).toInt // 44.0.toInt = 44 println("r1=" + r1 + " r2=" + r2) } }3、数值类型和 String 类型间转换 1)基本说明在程序开发中,我们经常需要将基本数值类型转成 String 类型。或者将 String 类型转成
2)案例实操
基本数值类型。(1)基本类型转 String 类型(语法:将基本类型的值+"" 即可)
(2)String 类型转基本数值类型(语法:s1.toInt、s1.toFloat、s1.toDouble、s1.toByte、s1.toLong、s1.toShort)object TestStringTransfer { def main(args: Array[String]): Unit = { //(1)基本类型转 String 类型(语法:将基本类型的值+"" 即可) var str1 : String = true + "" var str2 : String = 4.5 + "" var str3 : String = 100 +"" //(2)String 类型转基本数值类型(语法:调用相关 API) var s1 : String = "12" var n1 : Byte = s1.toByte var n2 : Short = s1.toShort var n3 : Int = s1.toInt var n4 : Long = s1.toLong } }(3)注意事项在将 String 类型转成基本数值类型时,要确保 String 类型能够转成有效的数据,比如我
们可以把"123",转成一个整数,但是不能把"hello"转成一个整数。
var n5:Int = “12.6”.toInt 会出现 NumberFormatException 异常。扩展面试题



