Null Nothing Unit|学习笔记

简介: 快速学习 Null Nothing Unit。

开发者学堂课程【Scala 核心编程-基础Null Nothing Unit】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8895


Null Nothing Unit

 

目录

一、字符类型本质探讨

二、布尔类型: Boolean

三、Unit 类型、NulI 类型和Nothing 类型

四、作业

 

一、字符类型本质探讨

1、字符型 存储到计算机中,需要将字符对应的码值(整数)找出来

存储: 字符 --> 码值 --> 二进制 --> 存储

读取: 二进制 --> 码值 --> 字符 --> 读取

2、字符和码值的对应关系是通过字符编码表决定的(是规定好),这一点和 Java 一样。

var c3:Char = '国'

println("c3=" + c3 +“c3对应的码值=”+ c3.toInt)

 

二、布尔类型: Boolean

1、基本介绍

(1) 布尔类型也叫 Boolean 类型,Booolean 类型数据只允许取值 true 和 false

注意:在 scala 里布尔类型只允许取真和假。在有些编程语言里,还可以用零和非零来表示真或是假,但scala里只能是真或假。

(2) boolean 类型占1个字节。

布尔类型,只能是真和假,没有别的类型数据。不要用别的类型来替代布尔类型。

(3) boolean 类型适于逻辑运算,一般用于程序流程控制:

① if 条 件控制语句

② while 循环控制语句

③ do-while 循环控制语句

④ for 循环控制语句

boolean 类型主要用在 if 语句判断,while、do-while、for 循环控制语句中。

 

三、Unit 类型、Null 类型和 Nothing 类型

1、基本说明

在 Scala 里有 Unit、Null 和 Nothing 三个比较特别的类型。

Unit

表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成()。

Null

null, Null 类型只有一个实例值 null

Nothing

Nothing 类型在 Scala 的类层级的最低端;它是任何其他类型的子类型。

当一个函数确定没有正常的返回值,可以用 Nothing来指定返回类型,这样有一个好处,就是可以把返回的值(异常)赋给其它的函数或者变量(兼容性)

(1)Unit 实例

Unit 代表 void 是非空。举例:

新建 Create New Scala Class,Name为UnitNulINothingDeme,

Kind为Object。打开编辑:

package com.atguigu.chapter02.datatype

object UnitNullNothingDemo {

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

val res = sayHello()

println("res=" + res)

}

//Unit 等价 java 的 void,只有一个实例值()

def sayHello(): Unit = {

}

}

有一个函数叫做 sayHello,需要返回 Unit,unit 就代表 void,只有一个实例就是()。小括号代表 Unit。计算结果

val res = sayHello()

println("res=" + res)

运行结果:

res=()

看到res返回的是一对小括号,代表 unit。

(2)Null 实例

继续打开 UnitNullNothingDemo.scala 编辑

① 有一个类 class 叫 Dog,Dog 类型赋值为空,Null,程序没有报错。这里的 Dog 类属于 Anyref 的类。但不能这样给值。

再有一个 Char 类型1,给赋值为空,Null,看到程序也没有报错。

输入 println 结果。先注销 val char1: Char = null,运行。

……

def sayHello(): Unit = {

}

//Null 类只有一个实例对象,null, 类似于 Java 中的 null 引用。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型

val dog: Dog = nu11

//val char1: Char = null

println("ok~~~")

}

class Dog {

}

这里也能正常运行。执行结果为:

OK~~~  

res=()

看到结果能正常输出。

② 把这段代码放到主函数里面去,使程序看起来更加清晰。

……

val res = sayHello()

println("res=" + res)

//Null 类只有一个实例对象,null, 类似于 Java 中的 null 引用。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型

val dog: Dog = nu11

//val char1: Char = null

println("ok~~~")

}

//Unit 等价 java 的 void,只有一个实例值()

def sayHello(): Unit = {

}

}

看输出顺序,运行结果为:

res=()

OK~~~  

应该是先输出 res,再输出 OK~~~。

③ 再把//val char1: Char = null 打开,看到null下有一个下划线,下划线代表有隐式转换在里面。

再执行,看结果:

Error:(11, 23) an expression of type Null is ineligible for implicit conversion

val charl: Char = null

Err:(11, 23) type mismatch;

found : Null(nul)

required: Char

val charl: Char = null

看到报错。虽然在写程序的时候没有报错,但出现下划线就说明:隐式转换过不去。不能把一个空 null 隐式转换为Char。

编程中,看到值有下划线,就代表有转化的过程。如:不能把空转换为 Char,但可以把空给 Anyref 引用。

2、使用细节和注意事项

(1) Null 类只有一个实例对象,null, 类似于 Java 中的 null 引用。null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal:比如 Int, Float,Char,Boolean,Long,Double,Byte, Short)

(2) Unit 类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit 类似于 Java 里的 void。Unit 只有一个实例,(), 这个实例也没有实质的意义

def sayok(): Unit = { //println("sayok 被调用")

}

(3) Nothing, 可以作为没有正常返回值的方法的返回类型,非常直观的告诉这个方法不会正常返回,而且由于Nothing 是其他任意类型的子类,他还能跟要求返回值的方法兼容。

Def test():Nothing ={

throw new exception()

}//没有正常返回值

是 sccla 底层最低端的类,它主要用来抛异常,而且可以用来做兼容性。

 

四、作业

1、在 Scala REPL 中,计算3的平方根,然后再对该值求平方。现在,这个结果与3相差多少?

提示: scala.math 找相应的方法

在 Scala 的 REPL 中,REPL 指的是交互指令的环境。

在计算机的开始菜单的搜索程序和文件中搜索 scala,打开 scala.bat,看到对话框

图片4.png

这就是 REPL 的运行环境。REPL 是(read->evaluateion->print->loop)的简称。

在 REPL 环境里计算3的平方根,然后再对这个值求平方,把值算出来之后再把相差结果算出来。

举例:求两个数的和。

先定义 num1等于10,回车,看到 num1: Int = 10,就意味着 num1已经被保存起来。这只是一句话。

原来写一个代码是形成一个整体。但这里是分开写的。

再定义 num2等于30。回车。现在有两个变量,num1和 num2。保存在缓存里。接着用 res=num1+num2,回车对比。

scala> val num1 = 10

num1: Int = 10

scala> val num2 = 30

num2: Int = 30

scala> val res = num1 + nun2

res: Int = 40

scala>

看到回车后结果是10+30=40

这就是在 REPL 中的基本使用。

作业1提示:在 scala.math 这个包下面有一个方法,想一想怎么去使用它。

2、Scala 语言的 sdk 是什么?

3、Scala 环境变量配置及其作用。

4、Scala 程序的编写、编译、运行步骤是什么?能否一步执行?

5、Scala 程序编写的规则。

6、简述:在配置环境、编译、运行各个步骤中常见的错误

7、如何检测一个变量是 val 还是 var?

8、Scala 允许你用数字去乘-个字符串,去 REPL 中试一下"crazy"*3。 这个操作做什么?在 Scaladoc 中如何找到这个操作?

去查手册,找一个字符串乘以三会得到什么结果?然后找到它的出处。

9、10 max2的含义是什么? max 方法定义在哪个类中?

10、用 BigInt计算2的1024次方

提示:在 BigInt 找相应的方法

11、在 Scala 中如何获取字符串“Hello”的首字符和尾字符?

提示:在 String 中找相应的方法

相关文章
|
分布式计算 大数据 Spark
缺失值处理_null&;NaN_读取文件 | 学习笔记
快速学习缺失值处理_null&;NaN_读取文件
266 0
缺失值处理_null&;NaN_读取文件 | 学习笔记
|
大数据 数据处理 开发者
缺失值处理_null&NaN_处理 | 学习笔记
快速学习缺失值处理_null&NaN_处理
75 0
缺失值处理_null&NaN_处理 | 学习笔记
|
C语言 开发者
void 指针和 NULL 指针|学习笔记
快速学习 void 指针和 NULL 指针
57 0
|
关系型数据库 MySQL 数据库
null 字段的判断|学习笔记
快速学习 null 字段的判断
162 0
|
2月前
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
35 0
|
2月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL NULL 值处理
总结 vue3 的一些知识点:MySQL NULL 值处理
|
4月前
|
SQL 关系型数据库 MySQL
MySQL NULL 值处理
MySQL NULL 值处理
|
1月前
|
SQL 关系型数据库 MySQL
python在mysql中插入或者更新null空值
这段代码是Python操作MySQL数据库的示例。它执行SQL查询从表`a_kuakao_school`中选取`id`,`university_id`和`grade`,当`university_id`大于0时按升序排列。然后遍历结果,根据`row[4]`的值决定`grade`是否为`NULL`。若不为空,`grade`被格式化为字符串;否则,设为`NULL`。接着构造UPDATE语句更新`university`表中对应`id`的`grade`值,并提交事务。重要的是,字符串`NULL`不应加引号,否则更新会失败。
20 2
|
4月前
|
存储 关系型数据库 MySQL
Flink CDC中mysql cdc 抽取这个时间字段的值为null 有什么好的解决方案吗 ?
Flink CDC中mysql cdc 抽取这个时间字段的值为null 有什么好的解决方案吗 ?
99 0
|
26天前
|
关系型数据库 MySQL
mysql中判断NULL和空字符串
mysql中判断NULL和空字符串
8 0