资源描述
Scala基础语法全书教案教学设计
课程名称:Scala基础语法
章节名称:Scala入门与基础
202203月
目 录
一、 基本说明 2
二、 教学目标 2
三、 教学重点 2
四、 教学难点 3
五、 教学方法 3
六、 教学准备 3
七、 教学过程 3
八、 板书设计 18
九、 教具 19
十、 教学反思 19
一、 基本说明
1. 授课班级:
2. 授课人数:
3. 教学时间:
4. 课时:6课时
5. 课型:理论+实践
二、 教学目标
1. 知识与技能
Ø 通过学习本课程,学生能够了解Scala的发展和关键特性。
Ø 通过学习本课程,学生能够了解Scala的应用场景。
Ø 通过学习本课程,学生能够掌握Scala的编译原理与运行。
2. 过程与方法
Ø 通过相关的理论学习和案例练习,学生可以掌握Scala的安装和环境配置。
Ø 通过相关的理论学习和案例练习,学生可以掌握Scala的解释器(REPL)和命令行编程技巧。
Ø 通过相关的理论学习和案例练习,学生可以掌握Scala的标识符、命名规范、注解和换行符、常量与变量等
3. 情感、态度、价值观
Ø 通过Scala的特征学习,学生可以了解Scala与Java的关系,以及Scala相对Java的优势和新特性。
三、 教学重点
Ø HelloWorld案例的编译与运行。
四、 教学难点
Ø 无。
五、 教学方法
Ø 对比教学法+实战演练:教师以对比教学的方式,介绍Scala与Java的关系,以及Scala相对Java的优势和新特性,并通过Scala和Java对比的基础语法学习,向学生展示Scala在标识符、关键字和变量的定义等方面与Java的相同点和不同点。同时,通过REPL的案例练习,向学生展示了如何在REPL中编写程序,以及REPL编程的常用技巧。
六、 教学准备
1. 学生准备
Ø Windows操作系统。
Ø JDK8版本以上的安装包。
Ø Scala2.1x安装包。
2. 教师准备
Ø Windows操作系统。
Ø JDK8版本以上的安装包。
Ø Scala2.1x安装包。
七、 教学过程
1. 导入新课
(1)引出要讲解的知识
我们为什么要学习Scala这门语言呢?
Java之父James Goslin在一次参加JavaOne会议期间被人问道除了Java之外,还会在Java虚拟机(JVM)上运行或者使用哪种语言,他脱口而出的答案就是Scala,足见Scala语言在他心目中的地位。而Groovy语言的创始人James Strachan认为将来可能代替Java的就是Scala,他甚至说如果有人在2003年把Martin Odersky、Lex Spoon以及Bill Venners编写的那本《Programming in Scala》拿给他看的话,Groovy这门语言很有可能就不会诞生了。因为在他看来,拥有众多出色特性的Scala语言不仅跟Groovy语言十分相似,而且还优于Groovy语言。
另外,使用Scala语言的程序员能够获得令人满意的收入。根据国外知名IT网站Stack Overflow 2019 年关于编程语言薪酬排行开发者调查报告得出的数据,Scala入选了全球前十大收入最高的编程语言排名。
(2)进入主题,展开详细讲解
本节课主要讲解一下Scala的入门与基础,主要包括4部分内容。第1部分将介绍何为Scala以及Scala的特点和应用;第2部分将讲解Scala的环境配置和安装;第3部分主要讲解Scala的编译和运行;第4部分我们将详细讲解Scala的基础语法。
(3)明确学习目标
Ø 了解Scala的发展和关键特性。
Ø 了解Scala的应用场景。
Ø 掌握Scala的安装和环境配置。
Ø 掌握Scala的编译原理与运行。
Ø 掌握Scala的解释器(REPL)和命令行编程技巧。
Ø 掌握Scala的标识符、命名规范、注解和换行符、常量与变量等。
2. 讲授课程
(1)Scala的简介、特点和应用
1)为什么选择Scala
① 技术大牛对Scala语言的评价非常之高。
② 使用Scala语言的程序员能够获得令人满意的收入。
2)何为Scala
Scala是Scalable Language的缩写,它是一门多范式的编程语言。Scala最早由瑞士洛桑联邦理工学院(EPFL)的Martin Odersky于2001年基于Funnel(Funnel是把函数式编程思想和Petri网相结合的一种编程语言)的工作开始设计,并于2003年底、2004年初发布Java平台的Scala。
Scala是一门将函数式编程和面向对象相结合的语言。
① Scala是一门纯面向对象的语言
Scala是一个纯面向对象的语言,它比Java更面向对象,前面提到的基本类型、方法,它都当作是一个对象去处理,另外Scala没有静态成员,它采用单例对象来实现与Java静态成员同样的功能。即使是一个+、-、*、/这样的操作符, Scala也认为是一个方法的调用。
② Scala的函数式编程
函数式编程最主要有两个特性:
l 第一个特性就是在函数式编程中,函数是“一等公民”。
l 第二个特性就是函数式编程这个方法不应该有副作用。
3)Scala的面向对象和函数式编程示例
前面为大家讲解了Scala的两个最主要的特性——面向对象和函数式编程,Scala的学习就是围绕这两个特性进行的。本小节我们举例说明这两个特性。
4)Scala的特性
l 面向对象特性。
l 支持命令式风格和函数式风格。
l 自适应静态类型。
l 简洁性。
l 基于事件的并发模型。
l 能与Java很好的兼容。
5)Scala的自适应静态类型和简洁性示例
前面已经举例说明了Scala的面向对象编程和函数式编程这两个特性,下面就举几个例子来帮助大家理解Scala的自适应静态类型和简洁性这两个特性。
6)Scala的应用
l 客户端应用程序。
l Web应用。
l 大数据,如Spark、Flink等。
l Scala还能像shell一样,作为脚本语言。
l Scala与Java的无缝调用。
(2)Scala环境配置和安装
1)Scala的环境准备
Scala语言可以运行在Windows系统、Linux系统、UNIX系统和Mac系统中。由于Scala是运行在JVM上的一种语言,所以想要安装Scala,就必须先安装Java环境,也就是说必须先安装JDK。学习本课程需要安装的Java版本是1.8,Scala的版本是2.12.x(这也是为后期讲解Spark做准备)。
2)Scala在Windows平台上的安装
在Windows平台上安装Scala主要有三个步骤:第一步是安装JDK;第二步是下载和安装Scala;第三步是安装完后配置一个环境变量。因为学习过Java的同学都安装过JDK,所以第一步JDK的安装就不再讲解了。下面我们主要讲解一下Scala的下载与安装以及环境变量的配置。
① Scala的下载和安装
下载地址:http://www.scala-lang.org/downloads
安装步骤:一直下一步即可。
② Scala环境变量配置
系统环境
变量
值 (举例)
UNIX
$SCALA_HOME
/usr/local/share/scala
$PATH
$PATH:$SCALA_HOME/bin
Windows
%SCALA_HOME%
c:\Progra~1\Scala
%PATH%
%PATH%;%SCALA_HOME%\bin
(3)Scala的编译和运行
1)Scala的编译和运行原理
① Scala与Java的编译和运行
我们可以通过两种方式来进行Scala代码的编写:
l 第一种方式是通过Scala的解释器(REPL);
l 第二种方式也是非常常用的一种方式,即使用IDE来编写。
当我们编写完Scala程序之后,可以通过以下三种方式来进行代码的运行。
l 在命令行上运行。
l 使用Scala的解释器(REPL)。
l IDE。
② Scala与Java的编译和运行原理
当编译和运行一个编写好的Java程序或Scala程序时,第一步就是通过一个编译器把这种高级语言的文件(比如Java就是.java,Scala就是.scala)编译成对应的class文件,然后class文件通过执行器运行在JVM上,最后JVM把这个class文件转换成对应的不同平台上的不同指令。
2)Scala的编译、运行和反编译
① Scala程序的入口
Scala的程序入口有两种,通过任何一种方式都可以定义一个可执行的程序:
l 定义一个object对象,然后在object对象里实现一个main方法;
l 定义一个object对象,继承APP的一个特质(这里的特质大家可以理解成对应Java中的一个接口,后面会详细讲解)。
② Scala的编译和运行
之前讲过,要想运行一个Scala程序,我们有三种方式:第一种方式是使用命令行;第二种方式是使用Scala的解释器;第三种方式是直接利用IDE来运行。
这里就以命令行方式为例讲解一下编译和运行Scala程序的过程:首先使用scalac命令将编写好的Scala程序文件(.scala)编译成class文件;然后使用scala命令+编译得到的class文件名就可以运行Scala程序。
③ Scala的反编译
在Scala和Java中进行编译的时候,编译器会在背后帮我们完成许多的工作,此时编译生成的class文件中除了原先的程序代码外,会自动添加很多内容,所以要想知道编译器做了哪些工作,就必须通过反编译的方式进行查看。
编译后的class文件通过一般的文本编辑器打开会显示乱码,无法进行查看,所以当需要查看编译后的class文件的内容,想知道编译器为我们做了哪些工作时,可以通过以下三种方式来实现:
l 使用scalap命令反编译后查看;
l 由于class文件是运行在JVM上的,因此也可以使用javap命令反编译后查看;
l 利用一些第三方的反编译插件查看。
反编译class文件主要有以下三个作用。
l 通过对class文件的反编译,可以更深入了解所编写代码在编译器里的工作原理。
l 通过对class文件的反编译,可以查看编写的代码转换成的汇编指令。汇编指令非常有用,尤其是在理解高并发编程的时候。
l 当实际开发工作中其他程序员所提供Java包中的class文件无法看懂时,可以反编译查看源代码。
3) 指定编译和运行路径
首先以HelloWord案例为基础,在其中引入一个其他的类,再使用scala、scalac命令去编译和运行程序。
然后我们把上面例子中的Person.class文件移动到classes文件夹下,再次编译和运行代码,学习一下如何指定编译和运行时的路径,以及相对路径的使用。
4)反编译的三种方式
之前讲过,要想反编译一个class文件有三种方式,我们可以根据不同的需求选择不同的方式。前面已经练习过怎样使用scalap命令去反编译class文件,这里我们首先举例说明如何使用javap命令反编译一个Scala生成的class文件,然后举例讲解一种可以在编译的同时查看Scala的代码是如何执行的方式。
5)REPL基本操作
这一节我们来学习运行Scala的第二种方式——使用Scala的解释器REPL。REPL是Read-Eval-Print Loop(交互式解释器)的缩写,它是Scala中一个评估表达式的工具,大家把它理解成一个交互式的命令行工具即可。
REPL的常用命令:
use//print<tab>to show typed desugarings. 用// print <tab>显示键入的重复标记。
use:helpfor a list of commands. 获取命令列表。
use:loadto load a file of REPL input. 加载REPL输入文件。
use:pasteto enter a class and object as companions. 以输入类和对象作为伴侣。
use:paste -rawto disable code wrapping, to define a package. 禁用代码包装,以定义软件包。
use:javapto inspect class artifacts. 检查类工件。
use-Yrepl-outdirto inspect class artifacts with external tools. 使用外部工具检查类工件。
use:powerto enter power mode and import compiler components. 进入电源模式并导入编译器组件。
use:settingsto modify compiler settings; some settings require:replay. 来修改编译器设置; 某些设置要求:重播。
use:replayto replay the session with modified settings. 以修改后的设置重播会话。
6)REPL常见命令的应用
① 在Scala解释器中使用自定义类或者第三方类
我们在使用Scala解释器的时候,可以直接使用像字符串、整型、浮点型等这些常用类型的对象还有方法,这是由于Scala解释器在启动时会自动加载Scala和Java的环境变量,从而把Scala和Java的一些默认定义好的方法和类加载进来的缘故。
② 在Scala解释器中输入if…else…语句
像if…else…这种带有多行结束符的语句,是没法在Scala解释器中运行的。就算是提前编写好的一段if…else…代码,复制过来一样是无法使用的,因为解释器会认为代码在第一行就已经结束了。但我们可以使用解释器命令paste来完成if…else…代码的输入。
(4)Scala基础语法
1)Scala的标识符
① 标识符的定义
标识符是用户编程时使用的名字,可用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。
② Scala中标识符的作用
Scala组件都需要名称,所以标识符的作用是给对象、类、变量和方法命名。
在Scala中使用标识符时需要注意以下两点:
l 标识符不能以数字开头,并且不能是Scala中的关键字(但可以包含关键字)。
l 符号$在Scala中也可以看作字母。然而以$开头的标识符被保留作为Scala编译器产生的标识符之用,应用程序应该避免使用$开头的标识符,以免造成冲突。
③ Scala中标识符的分类
Scala中的标识符分为字母数字标识符、运算符标识符、混合标识符和字面量标识符四大类,分别介绍如下。
l 字母数字标识符:字母数字标识符以字母或下划线开头,后面可以有更多的字母、数字或下划线。不建议在标识符中使用$开头的标识符。
l 运算符标识符:运算符标识符由一个或多个运算符字符组成。运算符字符是可打印的ASCII字符,如:+、:::、:->($colon$minus$greater)、?、~、#等。
l 混合标识符:混合标识符是字母数字标识符后面跟着一个下划线和一个运算符标识符,如a_+。
l 字面量标识符:一个字面量标识符是一个随意的字符串,包含在反引号(``)中。前面讲过,Scala中的关键字不可以作为标识符使用,但是用反引号括起来就可以使用了,比如`def`、`yield`等。
2)Scala的关键字和注释
① Scala与Java的关键字
下图列出了Scala和Java中的关键字,可以看到其中有Scala和Java共有的关键字,也有各自独有的关键字。
② Scala代码中的注释
在代码中添加注释可以解释说明程序,提高程序的可读性。和Java一样,在Scala中,主要有单行注释、多行注释和文档注释这三种类型,它们的语法格式分别介绍如下。
单行注释的语法格式:
//注释文字
多行注释的语法格式:
/*注释文字*/
文档注释的语法格式:
/** 注释文字 */
3)Scala的分号
分号是表达式的分隔符,Scala具有自动推断分号的功能。
在Scala和Java中,分号都是一个语句的分隔符,都起到判断一个语句或表达式是否结束的作用。与Java中编写代码换行时必须用分号结束这一强制性要求不同,Scala具有自动推断分号的功能。也就是说,在Scala中编写代码换行时,可以不加分号,当没有加分号时,Scala会在编译时自动加上分号。虽然Scala具有自动推断分号的功能,但是必须遵守以下规则:
l 如果一行只有一条语句或一个表达式时,则分号可以加,也可以不加;
l 如果一行有多条语句或多个表达式时,则分号必须填写。
Scala在自动推断分号时一般以换行代表一条语句或一个表达式的结束,但是在遇到以下任何一种情况时都会推断出表达式尚未结束,从而把当前表达式延续到下一行:
l 如果当前行以一个不能结尾的词结尾,如英文句号或中辍操作符;
l 如果当前行结尾出现在()或[]内。
4) Scala分号示例演示
本节我们举例复习一下Scala分号的使用。
5) Scala的变量
① 变量定义
变量是一种使用方便的占位符,用于引用计算机内存地址,变量创建后会占用一定的内存空间。
② 变量的作用
访问和修改内存数据。
③ 变量的声明
var:声明可变变量;
val:声明不可变变量。
④ 变量的类型声明
var/val 变量名:类型
⑤ 声明多变量
val|var 变量1,变量2,... =变量值
6) Scala变量内存结构
变量的三要素是变量的名称、变量的地址,及真正存储数据的内存空间,我们通过变量的名称和地址来找到真正存储数据的空间。在JVM中,变量和变量的地址还有数据是分开存储的,整个内存被划分为两大部分:“栈”和“堆”。“栈”里主要存储引用的地址,也就是内存空间的地址;而“堆”里存的是内存空间。每一个声明的变量都会被分配“堆”里的一部分内存空间,并为该部分内存空间分配一个标号,这个标号实际就是内存空间的地址,该地址跟变量存储在“栈”里。当一个变量想要访问其内存空间中的数据时,就要先在“栈”里找到该变量对应的内存空间的地址,然后通过该地址指向或者说引用“堆”中的数据。
7) Scala的lazy变量
一个变量在声明时,使用lazy进行修饰,那么这个变量只有在使用的时候才会被赋值。
声明一个lazy变量的语法如下:
lazy val 变量名
在Scala中使用lazy变量主要有以下两个作用。
l 优化程序的性能。
l 解决继承变量为空的问题。
3. 巩固练习
(1)请指出以下哪些选项是合法的标识符。若判断为不合法的标识符,请给出原因。
A. age
B. abc#@
C. salary
D. a b
E. name_+
F. _value
G. __1_value
H. $salary
I. yield
J. 123abc
K. def
L. implicit
M. For
N. -salary
(2)判断以下语句是否为合法的语句。
val s = hello" println(s)
(3)以下哪些是合法的语句。若判断为不合法的语句,请给出原因。
A. val a=10
B. var b:String=100
C. val s= "hello";
s="您好"
A. var age=10;
age=20
(4)以下代码中标注的①、②、③哪个是合法的语句。
class Person {
val name="Scala"
val sex="wo"
var age=20
}
val person= new Person
person. name=“scala”//①
person. age=30 // ②
person= new Person //③
4. 课堂小结
本课程通过Scala的特征学习,向学生展示了Scala与Java的关系,以及Scala相对Java的优势和新特性;并通过对scala和scalac命令的学习,向学生展示了如何编写、运行和编译一个Scala程序;然后通过REPL的案例练习,向学生展示了如何在REPL中编写程序,以及REPL编程常用技巧;最后通过Scala和Java对比的基础语法学习,向学生展示了Scala在标识符、关键字和变量的定义等方面与Java的相同点和不同点。
5. 布置作业
(1)课下作业
用Scala编写一个注册类,含有用户名和密码两个属性,要求:
1)用户名不可修改;
2)密码可修改。
然后在REPL分别输出原始信息(用户名和密码)和修改后的信息。
(2)预习作业
1)Scala的数据类型。
2)Scala的基本运算。
八、板书设计
九、教具
Ø 无
十、 教学反思
课程名称:Java核心基础
章节名称:类型转换和运算符
2019年12月
目 录
一、 基本说明 2
二、 教学目标 2
三、 教学重点 2
四、 教学难点 3
五、 教学方法 3
六、 教学准备 3
七、 教学过程 3
八、 板书设计 11
九、 教具 11
十、 教学反思 11
八、 基本说明
6. 授课班级:
7. 授课人数:
8. 教学时间:
9. 课时:6课时
10. 课型:理论+实践
九、 教学目标
4. 知识与技能
Ø 通过自主学习本课程,学生能够理解精度损失的含义,掌握精度损失出现的原因。
Ø 通过自主学习本课程,学生能够理解运算符和表达式的概念。
5. 过程与方法
Ø 通过课堂练习,学生能够进一步掌握进制间的转换规则和方法。
6. 情感、态度、价值观
Ø 通过完成运算符的运用练习,学生能够掌握Java中的运算符规则,理解运算符的功能及运用,为学生掌握Java语言打下坚实基础。
十、 教学重点
Ø 数据类型转换分类。
Ø 精度损失。
Ø 编码。
Ø 数据类型转换扩展。
Ø 进制转换。
Ø 原码、补码和反码。
十一、 教学难点
Ø 需要学生理解和掌握一些数据类型转换的扩展知识。
Ø 数据类型转换面试题分析。
Ø 掌握不同进制之间的转换规则。
Ø 掌握原码、补码和反码的定义及计算。
十二、 教学方法
Ø 边讲边练:教师以边讲边练的方式,一边介绍Java语言中的舍入误差、精度损失、编码、进制、原码、补码和反码,及算术运算符、赋值运算符、关系运算符和自增自减运算符等内容,一边通过代码演练,让学生巩固所学知识。
十三、 教学准备
3. 学生准备
Ø Windows操作系统。
Ø JDK8版本以上的安装包。
4. 教师准备
Ø Windows操作系统。
Ø JDK8版本以上的安装包。
十四、 教学过程
6. 导入新课
(1)回顾上节课内容并答疑解惑
回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。
(2)进入主题,展开详细讲解
本节课我们将学习Java语言的类型转换和运算符两大部分内容。类型转换部分,除了介绍类型转换的分类等基础知识外,我们还将学习Java语言中的舍入误差、精度损失、编码、进制、原码、补码和反码等内容;而运算符部分,本节课只对一些基本的运算符进行介绍,包括算术运算符、赋值运算符、关系运算符和自增自减运算符等,一些高级的运算符将在下一课程中学习。
(3)明确学习目标
Ø 理解精度损失的含义。
Ø 掌握精度损失出现的原因。
Ø 掌握进制间的转换规则。
Ø 理解运算符和表达式概念。
Ø 掌握Java中的运算符规则。
7. 讲授课程
(1)类型转换
1)变量注意事项
在用Java语言编程的过程中,使用变量时有3个注意事项:
l 变量如果没有进行赋值,是不可以直接使用的;
l 变量只有在自己所属的作用域之内才有效;
l 一行代码中可以一次性定义多个相同类型的变量并且赋值,但是不推荐使用。
而所谓作用域,指的是从变量定义的一行开始,至所在的大括号结束之间的区域。
2)舍入误差
舍入误差(Round-off error)是指运算得到的近似值和精确值之间的差异。在Java语言中多数的小数运算是不能获取精确值的。
3)类型转换分类
类型转换是将一个值从一种类型更改为另一种类型的过程。它分为两大类,分别为自动类型转换和强制类型转换。
自动类型转换也称为隐式类型转换,它是由范围小的数据类型转换为范围大的数据类型,系统将自动执行;强制类型转换也称为显式类型转换,它是由范围大的数据类型转换为范围小的数据类型。
两种类型的数据类型转换都有各自的特点,自动类型转换的特点是自动完成转换,不需要程序员特殊处理。强制类型转换的特点是需要特殊处理,否则可能编译不通过。
4)精度损失
通过强制类型转换确实可以将范围大的数据类型转换为范围小的数据类型,但请注意,当数值在范围小的数据类型的范围之内时,是不会出现错误的,但当数值在其范围之外时,强制类型转换的输出结果就会有误差,这就是精度损失。
强制类型转换可能会出现精度损失的问题,且将小数强转为整数时,会直接将小数部分舍弃,此时也会出现精度损失。
5)编码
编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码,简称编码。主要有ASCII、ISO8859-1、GBK和UTF-8等几种常用的编码。
l ASCII
ASCII为美国标准信息交换码,用一个字节的7位表示,总共有128个,包含了英文的大小写、常用符号和数字。
l ISO8859-1
ISO8859-1为拉丁码表,用一个字节的8位表示。ISO8859-1以ASCII为基础,在空置的范围内,加入192个字母及符号。
l GBK和UTF-8
随着科技的发展,中文也需要码表,此时出现了GBK和UTF-8。它们的英文均占一个字节,GBK的中文占两个字节,UTF-8的中文占三个字节。中文在不同的编码中占的字节数是不同的,这也是中文会出现乱码的原因。
6)类型转换扩展
l byte/short/char类型的数据,在运算时会自动提升为int类型的数据,字符在参与运算时已经转换为了对应码表的数字。
l byte/short/char类型的数据,如果右边的值没有超出范围,那么Java会自动强制类型转换,如果超出范围则不会。
7)进制
进制就是进位计数制,是人为定义的带进位的计数方法。
二进制(bin): 由0~1组成,满2进1,以0b作为二进制的标识。
八进制(oct):由0~7组成,满8进1,以0作为八进制的标识。
十进制(dec):由0~9组成,满10进1。
十六进制(hex):由0~9、a~f组成,满16进1,以0x作为十六进制的标识。十六进制中的a-f,不区分大小写。
8)进制转换
l 十进制转换为二进制
十进制转换为二进制是将十进制的数不断除以2取余,然后将余数倒排序即可。
l 二进制转换为十进制
二进制转换为十进制是从低位次起,按位次乘以2的位次幂,然后求和。
l 十进制转换为其他进制
十进制转换为其他进制的方法和转换为二进制的方法类似,十进制向哪个进制转换就除以哪个进制,然后取余倒排即可。
l 二进制转换为八进制
二进制转换为八进制是从低位次起,每3位为一组,产生一个八进制数字,最高位不足3位时补0,3位以内按照二进制向十进制的转换规则进行运算,产生的八进制数字按顺序排列即可。
l 八进制转换为二进制
八进制转换为二进制,其方法与二进制转换为八进制相反,将每位八进制的值转换为3位二进制的数字,然后将这些二进制的数字按顺序排列即可。
l 二进制转换为十六进制
二进制转换为十六进制其实是四变一的过程,操作方法与二进制转换为八进制方法一致。首先将二进制数从右向左按4位分组,不足以0补全,然后将每组二进制数转换为十六进制,最后按顺序排列即可。
l 十六进制转换为二进制
十六进制转换为二进制是一变四的过程,与二进制转换为十六进制相反。
9)原码、补码和反码
原码(true form)是一种计算机中对数字的二进制定点表示方法。
补码是计算机把减法运算转化为加法运算的关键编码。
反码通常是用来由原码求补码或者由补码求原码的过渡码。
在Java中的数据底层都是使用数据的补码形式存储和计算的。正数的原码、补码和反码都相同;负数的反码是符号位不变,其他位取反;负数的补码是符号位不变,在反码的基础上加1。
在介绍负数的反码和补码时,涉及到符号位,符号位一般放在最高位,常用0作为正数,用1作为负数。
(2)运算符
运算符是对变量和常量进行运算的符号。表达式是使用运算符将常量或者变量连接起来的式子。
1)运算符分类
运算符分为算术运算符、赋值运算符、关系运算符、逻辑运算符、三目运算符和位运算符几种,其中三目运算符也称为三元运算符。本节课将主要介绍算术运算符、赋值运算符、关系运算符和自增自减运算符。
2)运算符的使用
l 算术运算符
Java中的算术运算符包含+、-、*、/和%几种。
表1 算术运算符
序号
运算符
含义
示例
1
+
加
12+3=15
2
-
减
12-3=9
3
*
乘
12*3=36
4
/
除
12/3=4
5
%
取余数
12%5=2
l 自增自减运算符
自增自减运算符包括++、--两种,可以放在变量前面,也可以放在变量后面。它们可以独立使用,也可以混合使用。
独立使用时,自增自减运算符放在变量前面和后面没有区别,都是对变量进行+1或者-1的操作。
自增自减运算符混合使用时,如果运算符++(--)在变量前面,那么首先变量自身加1(减1),然后根据加1(减1)后的结果进行使用;如果运算符++(--)在变量后面,则先对变量进行使用,然后变量自身加1(减1)。
l 赋值运算符
赋值运算符包括+=、-=、*=、/=和%=运算符。赋值运算符默认包含一个强制类型转换操作。
l 关系运算符
关系运算符包括==、!=、>=、<=、>和<运算符,其最终结果都是布尔类型。
表2 关系运算符
序号
运算符
含义
1
==
比较左右两方是否相等
2
!=
比较左方是否不等于右方
3
>=
比较左方是否大于等于右方
4
<=
比较左方是否小于等于右方
5
>
比较左方是否大于右方
6
<
比较左方是否小于右方
8. 巩固练习
(1)以下代码能否编译成功?为什么?
1) char ch1 = 97; short ch2 = ‘a’;
2) char ch1 = 97; short ch2 = ‘a’; short ch2 = ch1。
(2)计算-5的原码、反码和补码。
9. 课堂小结
通过本课程内容的学习,相信同学们已经能够掌握变量使用时的注意事项,以及Java中类型转换和运算符的应用。其中类型转换是本节课程的重点和难点,自增自减运算符是运算符知识点中的难点,常见于企业面试和证书考试中,一定要多多练习。熟练掌握基础运算符的使用,将为接下来学习高级运算符打好基础。
10. 布置作业
(1)课下作业
对于int i = 3, j = 5; 请同学们写出能够交换i和j的值的方式并比较各种方式的优劣性。
(2)预习作业
1)逻辑运算符、三目运算符和位运算符。
2)流程控制语句。
八、板书设计
九、教具
Ø notepad
Ø dos
十、教学反思
课程名称:Java核心基础
章节名称:运算符和流程控制语句
2019年12月
目 录
一、 基本说明 2
二、 教学目标 2
三、 教学重点 2
四、 教学难点 2
五、 教学方法 3
六、 教学准备 3
七、 教学过程 3
八、 板书设计 16
九、 教具 16
十、 教学反思 16
十五、 基本说明
11. 授课班级:
12. 授课人数:
13. 教学时间:
14. 课时:6课时
15. 课型:理论+实践
十六、 教学目标
7. 知识与技能
Ø 通过自主学习本课程,学生能够掌握Java的逻辑运算符、三目运算符和位运算符。
Ø 通过自主学习本课程,学生能够理解短路效果的含义。
Ø 通过自主学习本课程,学生能够熟练流程控制语句结构。
8. 过程与方法
Ø 通过课堂练习,学生能够进一步掌握位运算的算法。
9. 情感、态度、价值观
Ø 通过探究学习本课程,学生能够了解顺序结构、选择结构和循环结构的异同,掌握跳转控制语句的用法,为学生掌握Java语言打下坚实基础。
十七、 教学重点
Ø 运算符的使用。
Ø if语句格式三 。
Ø for循环结构。
十八、 教学难点
Ø 需要学生理解和掌握运算符的使用。
十九、 教学方法
Ø 边讲边练:教师以边讲边练的方式,一边介绍逻辑运算符、位运算符和三目运算符,及顺序结构、选择结构和循环结构等流程控制语句的相关知识,一边通过代码演练的方式,举例说明相关知识点,让学生巩固所学内容。
二十、 教学准备
5. 学生准备
Ø Windows操作系统。
Ø JDK8版本以上的安装包。
6. 教师准备
Ø Windows操作系统。
Ø JDK8版本以上的安装包。
二十一、 教学过程
11. 导入新课
(1)回顾上节课内容并答疑解惑
回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。
(2)进入主题,展开详细讲解
学习了部分基础运算符的相关知识后,本课程将介绍逻辑运算符、位运算符和三目运算符的相关知识。之前我们所学的代码都是顺序结构的,是逐行执行的,但如果需要跳过某行代码或有选择地执行,就需要使用到流程控制语句了,因此本课程我们还会对流程控制语句进行介绍。本课程包含两大内容:
l 运算符(二)
l 流程控制语句
(3)明确学习目标
Ø 掌握Java中的逻辑运算符。
Ø 理解短路效果的含义。
Ø 掌握位运算的算法。
Ø 熟练使用三目运算符。
Ø 熟练流程控制语句结构。
12. 讲授课程
(1)运算符(二)
1)逻辑运算符
逻辑运算符一般用于连接boolean类型的表达式或者值,分为&(与)、|(或)、!(非)和^(异或)4种运算符。
l 与(&)运算符
与(&)运算符,表达式或者值全部为true时,则返回的结果为true;只要有一个为false,则结果为false。
l 或(|)运算符
在或(|)运算符中,只要有一个表达式或者值为true,那么结果就是true;如果全部是false,结果为false。
l 异或(^)运算符
在异或(^)运算符中,左右两侧的表达式或者值相同时返回false,不同时返回true。
l 取反
展开阅读全文