Scala基础语法全书教案教学设计_第1页
Scala基础语法全书教案教学设计_第2页
Scala基础语法全书教案教学设计_第3页
Scala基础语法全书教案教学设计_第4页
Scala基础语法全书教案教学设计_第5页
已阅读5页,还剩178页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Scala基础语法全书教案教学设计课程名称:Scala基础语法章节名称:Scala入门与基础202203月目录TOC\o"1-2"\h\u一、基本说明 2二、教学目标 2三、教学重点 2四、教学难点 3五、教学方法 3六、教学准备 3七、教学过程 3八、板书设计 18九、教具 19十、教学反思 19基本说明授课班级:授课人数:教学时间:课时:6课时课型:理论+实践教学目标知识与技能通过学习本课程,学生能够了解Scala的发展和关键特性。通过学习本课程,学生能够了解Scala的应用场景。通过学习本课程,学生能够掌握Scala的编译原理与运行。过程与方法通过相关的理论学习和案例练习,学生可以掌握Scala的安装和环境配置。通过相关的理论学习和案例练习,学生可以掌握Scala的解释器(REPL)和命令行编程技巧。通过相关的理论学习和案例练习,学生可以掌握Scala的标识符、命名规范、注解和换行符、常量与变量等情感、态度、价值观通过Scala的特征学习,学生可以了解Scala与Java的关系,以及Scala相对Java的优势和新特性。教学重点HelloWorld案例的编译与运行。教学难点无。教学方法对比教学法+实战演练:教师以对比教学的方式,介绍Scala与Java的关系,以及Scala相对Java的优势和新特性,并通过Scala和Java对比的基础语法学习,向学生展示Scala在标识符、关键字和变量的定义等方面与Java的相同点和不同点。同时,通过REPL的案例练习,向学生展示了如何在REPL中编写程序,以及REPL编程的常用技巧。教学准备学生准备Windows操作系统。JDK8版本以上的安装包。Scala2.1x安装包。教师准备Windows操作系统。JDK8版本以上的安装包。Scala2.1x安装包。教学过程导入新课(1)引出要讲解的知识我们为什么要学习Scala这门语言呢?Java之父JamesGoslin在一次参加JavaOne会议期间被人问道除了Java之外,还会在Java虚拟机(JVM)上运行或者使用哪种语言,他脱口而出的答案就是Scala,足见Scala语言在他心目中的地位。而Groovy语言的创始人JamesStrachan认为将来可能代替Java的就是Scala,他甚至说如果有人在2003年把MartinOdersky、LexSpoon以及BillVenners编写的那本《ProgramminginScala》拿给他看的话,Groovy这门语言很有可能就不会诞生了。因为在他看来,拥有众多出色特性的Scala语言不仅跟Groovy语言十分相似,而且还优于Groovy语言。另外,使用Scala语言的程序员能够获得令人满意的收入。根据国外知名IT网站StackOverflow2019年关于编程语言薪酬排行开发者调查报告得出的数据,Scala入选了全球前十大收入最高的编程语言排名。(2)进入主题,展开详细讲解本节课主要讲解一下Scala的入门与基础,主要包括4部分内容。第1部分将介绍何为Scala以及Scala的特点和应用;第2部分将讲解Scala的环境配置和安装;第3部分主要讲解Scala的编译和运行;第4部分我们将详细讲解Scala的基础语法。(3)明确学习目标了解Scala的发展和关键特性。了解Scala的应用场景。掌握Scala的安装和环境配置。掌握Scala的编译原理与运行。掌握Scala的解释器(REPL)和命令行编程技巧。掌握Scala的标识符、命名规范、注解和换行符、常量与变量等。讲授课程(1)Scala的简介、特点和应用1)为什么选择Scala①技术大牛对Scala语言的评价非常之高。②使用Scala语言的程序员能够获得令人满意的收入。2)何为ScalaScala是ScalableLanguage的缩写,它是一门多范式的编程语言。Scala最早由瑞士洛桑联邦理工学院(EPFL)的MartinOdersky于2001年基于Funnel(Funnel是把函数式编程思想和Petri网相结合的一种编程语言)的工作开始设计,并于2003年底、2004年初发布Java平台的Scala。Scala是一门将函数式编程和面向对象相结合的语言。Scala是一门纯面向对象的语言Scala是一个纯面向对象的语言,它比Java更面向对象,前面提到的基本类型、方法,它都当作是一个对象去处理,另外Scala没有静态成员,它采用单例对象来实现与Java静态成员同样的功能。即使是一个+、-、*、/这样的操作符,Scala也认为是一个方法的调用。Scala的函数式编程函数式编程最主要有两个特性:第一个特性就是在函数式编程中,函数是“一等公民”。第二个特性就是函数式编程这个方法不应该有副作用。3)Scala的面向对象和函数式编程示例前面为大家讲解了Scala的两个最主要的特性——面向对象和函数式编程,Scala的学习就是围绕这两个特性进行的。本小节我们举例说明这两个特性。4)Scala的特性面向对象特性。支持命令式风格和函数式风格。自适应静态类型。简洁性。基于事件的并发模型。能与Java很好的兼容。5)Scala的自适应静态类型和简洁性示例前面已经举例说明了Scala的面向对象编程和函数式编程这两个特性,下面就举几个例子来帮助大家理解Scala的自适应静态类型和简洁性这两个特性。6)Scala的应用客户端应用程序。Web应用。大数据,如Spark、Flink等。Scala还能像shell一样,作为脚本语言。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的下载与安装以及环境变量的配置。=1\*GB3①Scala的下载和安装下载地址:/downloads安装步骤:一直下一步即可。=2\*GB3②Scala环境变量配置系统环境变量值(举例)UNIX$SCALA_HOME/usr/local/share/scala$PATH$PATH:$SCALA_HOME/binWindows%SCALA_HOME%c:\Progra~1\Scala%PATH%%PATH%;%SCALA_HOME%\bin(3)Scala的编译和运行1)Scala的编译和运行原理=1\*GB3①Scala与Java的编译和运行我们可以通过两种方式来进行Scala代码的编写:第一种方式是通过Scala的解释器(REPL);第二种方式也是非常常用的一种方式,即使用IDE来编写。当我们编写完Scala程序之后,可以通过以下三种方式来进行代码的运行。在命令行上运行。使用Scala的解释器(REPL)。IDE。=2\*GB3②Scala与Java的编译和运行原理当编译和运行一个编写好的Java程序或Scala程序时,第一步就是通过一个编译器把这种高级语言的文件(比如Java就是.java,Scala就是.scala)编译成对应的class文件,然后class文件通过执行器运行在JVM上,最后JVM把这个class文件转换成对应的不同平台上的不同指令。2)Scala的编译、运行和反编译=1\*GB3①Scala程序的入口Scala的程序入口有两种,通过任何一种方式都可以定义一个可执行的程序:定义一个object对象,然后在object对象里实现一个main方法;定义一个object对象,继承APP的一个特质(这里的特质大家可以理解成对应Java中的一个接口,后面会详细讲解)。=2\*GB3②Scala的编译和运行之前讲过,要想运行一个Scala程序,我们有三种方式:第一种方式是使用命令行;第二种方式是使用Scala的解释器;第三种方式是直接利用IDE来运行。这里就以命令行方式为例讲解一下编译和运行Scala程序的过程:首先使用scalac命令将编写好的Scala程序文件(.scala)编译成class文件;然后使用scala命令+编译得到的class文件名就可以运行Scala程序。=3\*GB3③Scala的反编译在Scala和Java中进行编译的时候,编译器会在背后帮我们完成许多的工作,此时编译生成的class文件中除了原先的程序代码外,会自动添加很多内容,所以要想知道编译器做了哪些工作,就必须通过反编译的方式进行查看。编译后的class文件通过一般的文本编辑器打开会显示乱码,无法进行查看,所以当需要查看编译后的class文件的内容,想知道编译器为我们做了哪些工作时,可以通过以下三种方式来实现:使用scalap命令反编译后查看;由于class文件是运行在JVM上的,因此也可以使用javap命令反编译后查看;利用一些第三方的反编译插件查看。反编译class文件主要有以下三个作用。通过对class文件的反编译,可以更深入了解所编写代码在编译器里的工作原理。通过对class文件的反编译,可以查看编写的代码转换成的汇编指令。汇编指令非常有用,尤其是在理解高并发编程的时候。当实际开发工作中其他程序员所提供Java包中的class文件无法看懂时,可以反编译查看源代码。指定编译和运行路径首先以HelloWord案例为基础,在其中引入一个其他的类,再使用scala、scalac命令去编译和运行程序。然后我们把上面例子中的Person.class文件移动到classes文件夹下,再次编译和运行代码,学习一下如何指定编译和运行时的路径,以及相对路径的使用。4)反编译的三种方式之前讲过,要想反编译一个class文件有三种方式,我们可以根据不同的需求选择不同的方式。前面已经练习过怎样使用scalap命令去反编译class文件,这里我们首先举例说明如何使用javap命令反编译一个Scala生成的class文件,然后举例讲解一种可以在编译的同时查看Scala的代码是如何执行的方式。5)REPL基本操作这一节我们来学习运行Scala的第二种方式——使用Scala的解释器REPL。REPL是Read-Eval-PrintLoop(交互式解释器)的缩写,它是Scala中一个评估表达式的工具,大家把它理解成一个交互式的命令行工具即可。REPL的常用命令:use//print<tab>toshowtypeddesugarings.用//print<tab>显示键入的重复标记。use:helpforalistofcommands.获取命令列表。use:loadtoloadafileofREPLinput.加载REPL输入文件。use:pastetoenteraclassandobjectascompanions.以输入类和对象作为伴侣。use:paste-rawtodisablecodewrapping,todefineapackage.禁用代码包装,以定义软件包。use:javaptoinspectclassartifacts.检查类工件。use-Yrepl-outdirtoinspectclassartifactswithexternaltools.使用外部工具检查类工件。use:powertoenterpowermodeandimportcompilercomponents.进入电源模式并导入编译器组件。use:settingstomodifycompilersettings;somesettingsrequire:replay.来修改编译器设置;某些设置要求:重播。use:replaytoreplaythesessionwithmodifiedsettings.以修改后的设置重播会话。6)REPL常见命令的应用=1\*GB3①在Scala解释器中使用自定义类或者第三方类我们在使用Scala解释器的时候,可以直接使用像字符串、整型、浮点型等这些常用类型的对象还有方法,这是由于Scala解释器在启动时会自动加载Scala和Java的环境变量,从而把Scala和Java的一些默认定义好的方法和类加载进来的缘故。=2\*GB3②在Scala解释器中输入if…else…语句像if…else…这种带有多行结束符的语句,是没法在Scala解释器中运行的。就算是提前编写好的一段if…else…代码,复制过来一样是无法使用的,因为解释器会认为代码在第一行就已经结束了。但我们可以使用解释器命令paste来完成if…else…代码的输入。(4)Scala基础语法1)Scala的标识符=1\*GB3①标识符的定义标识符是用户编程时使用的名字,可用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。=2\*GB3②Scala中标识符的作用Scala组件都需要名称,所以标识符的作用是给对象、类、变量和方法命名。在Scala中使用标识符时需要注意以下两点:标识符不能以数字开头,并且不能是Scala中的关键字(但可以包含关键字)。符号$在Scala中也可以看作字母。然而以$开头的标识符被保留作为Scala编译器产生的标识符之用,应用程序应该避免使用$开头的标识符,以免造成冲突。=3\*GB3③Scala中标识符的分类Scala中的标识符分为字母数字标识符、运算符标识符、混合标识符和字面量标识符四大类,分别介绍如下。字母数字标识符:字母数字标识符以字母或下划线开头,后面可以有更多的字母、数字或下划线。不建议在标识符中使用$开头的标识符。运算符标识符:运算符标识符由一个或多个运算符字符组成。运算符字符是可打印的ASCII字符,如:+、:::、:->($colon$minus$greater)、?、~、#等。混合标识符:混合标识符是字母数字标识符后面跟着一个下划线和一个运算符标识符,如a_+。字面量标识符:一个字面量标识符是一个随意的字符串,包含在反引号(``)中。前面讲过,Scala中的关键字不可以作为标识符使用,但是用反引号括起来就可以使用了,比如`def`、`yield`等。2)Scala的关键字和注释=1\*GB3①Scala与Java的关键字下图列出了Scala和Java中的关键字,可以看到其中有Scala和Java共有的关键字,也有各自独有的关键字。=2\*GB3②Scala代码中的注释在代码中添加注释可以解释说明程序,提高程序的可读性。和Java一样,在Scala中,主要有单行注释、多行注释和文档注释这三种类型,它们的语法格式分别介绍如下。单行注释的语法格式://注释文字多行注释的语法格式:/*注释文字*/文档注释的语法格式:/**注释文字*/3)Scala的分号分号是表达式的分隔符,Scala具有自动推断分号的功能。在Scala和Java中,分号都是一个语句的分隔符,都起到判断一个语句或表达式是否结束的作用。与Java中编写代码换行时必须用分号结束这一强制性要求不同,Scala具有自动推断分号的功能。也就是说,在Scala中编写代码换行时,可以不加分号,当没有加分号时,Scala会在编译时自动加上分号。虽然Scala具有自动推断分号的功能,但是必须遵守以下规则:如果一行只有一条语句或一个表达式时,则分号可以加,也可以不加;如果一行有多条语句或多个表达式时,则分号必须填写。Scala在自动推断分号时一般以换行代表一条语句或一个表达式的结束,但是在遇到以下任何一种情况时都会推断出表达式尚未结束,从而把当前表达式延续到下一行:如果当前行以一个不能结尾的词结尾,如英文句号或中辍操作符;如果当前行结尾出现在()或[]内。Scala分号示例演示本节我们举例复习一下Scala分号的使用。Scala的变量=1\*GB3①变量定义变量是一种使用方便的占位符,用于引用计算机内存地址,变量创建后会占用一定的内存空间。=2\*GB3②变量的作用访问和修改内存数据。=3\*GB3③变量的声明var:声明可变变量;val:声明不可变变量。=4\*GB3④变量的类型声明var/val变量名:类型=5\*GB3⑤声明多变量val|var变量1,变量2,...=变量值Scala变量内存结构变量的三要素是变量的名称、变量的地址,及真正存储数据的内存空间,我们通过变量的名称和地址来找到真正存储数据的空间。在JVM中,变量和变量的地址还有数据是分开存储的,整个内存被划分为两大部分:“栈”和“堆”。“栈”里主要存储引用的地址,也就是内存空间的地址;而“堆”里存的是内存空间。每一个声明的变量都会被分配“堆”里的一部分内存空间,并为该部分内存空间分配一个标号,这个标号实际就是内存空间的地址,该地址跟变量存储在“栈”里。当一个变量想要访问其内存空间中的数据时,就要先在“栈”里找到该变量对应的内存空间的地址,然后通过该地址指向或者说引用“堆”中的数据。Scala的lazy变量一个变量在声明时,使用lazy进行修饰,那么这个变量只有在使用的时候才会被赋值。声明一个lazy变量的语法如下:lazyval变量名在Scala中使用lazy变量主要有以下两个作用。优化程序的性能。解决继承变量为空的问题。巩固练习(1)请指出以下哪些选项是合法的标识符。若判断为不合法的标识符,请给出原因。ageabc#@salaryabname_+_value__1_value$salaryyield123abcdefimplicitFor-salary(2)判断以下语句是否为合法的语句。vals=hello"println(s)(3)以下哪些是合法的语句。若判断为不合法的语句,请给出原因。vala=10varb:String=100vals="hello";s="您好"varage=10;age=20(4)以下代码中标注的①、②、③哪个是合法的语句。classPerson{valname="Scala"valsex="wo"varage=20}valperson=newPersonperson.name=“scala”//①person.age=30//②person=newPerson//③课堂小结本课程通过Scala的特征学习,向学生展示了Scala与Java的关系,以及Scala相对Java的优势和新特性;并通过对scala和scalac命令的学习,向学生展示了如何编写、运行和编译一个Scala程序;然后通过REPL的案例练习,向学生展示了如何在REPL中编写程序,以及REPL编程常用技巧;最后通过Scala和Java对比的基础语法学习,向学生展示了Scala在标识符、关键字和变量的定义等方面与Java的相同点和不同点。布置作业(1)课下作业用Scala编写一个注册类,含有用户名和密码两个属性,要求:1)用户名不可修改;2)密码可修改。然后在REPL分别输出原始信息(用户名和密码)和修改后的信息。(2)预习作业1)Scala的数据类型。2)Scala的基本运算。八、板书设计九、教具无教学反思课程名称:Java核心基础章节名称:类型转换和运算符2019年12月目录TOC\o"1-2"\h\u一、基本说明 2二、教学目标 2三、教学重点 2四、教学难点 3五、教学方法 3六、教学准备 3七、教学过程 3八、板书设计 11九、教具 11十、教学反思 11基本说明授课班级:授课人数:教学时间:课时:6课时课型:理论+实践教学目标知识与技能通过自主学习本课程,学生能够理解精度损失的含义,掌握精度损失出现的原因。通过自主学习本课程,学生能够理解运算符和表达式的概念。过程与方法通过课堂练习,学生能够进一步掌握进制间的转换规则和方法。情感、态度、价值观通过完成运算符的运用练习,学生能够掌握Java中的运算符规则,理解运算符的功能及运用,为学生掌握Java语言打下坚实基础。教学重点数据类型转换分类。精度损失。编码。数据类型转换扩展。进制转换。原码、补码和反码。教学难点需要学生理解和掌握一些数据类型转换的扩展知识。数据类型转换面试题分析。掌握不同进制之间的转换规则。掌握原码、补码和反码的定义及计算。教学方法边讲边练:教师以边讲边练的方式,一边介绍Java语言中的舍入误差、精度损失、编码、进制、原码、补码和反码,及算术运算符、赋值运算符、关系运算符和自增自减运算符等内容,一边通过代码演练,让学生巩固所学知识。教学准备学生准备Windows操作系统。JDK8版本以上的安装包。教师准备Windows操作系统。JDK8版本以上的安装包。教学过程导入新课(1)回顾上节课内容并答疑解惑回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。(2)进入主题,展开详细讲解本节课我们将学习Java语言的类型转换和运算符两大部分内容。类型转换部分,除了介绍类型转换的分类等基础知识外,我们还将学习Java语言中的舍入误差、精度损失、编码、进制、原码、补码和反码等内容;而运算符部分,本节课只对一些基本的运算符进行介绍,包括算术运算符、赋值运算符、关系运算符和自增自减运算符等,一些高级的运算符将在下一课程中学习。(3)明确学习目标理解精度损失的含义。掌握精度损失出现的原因。掌握进制间的转换规则。理解运算符和表达式概念。掌握Java中的运算符规则。讲授课程(1)类型转换1)变量注意事项在用Java语言编程的过程中,使用变量时有3个注意事项:变量如果没有进行赋值,是不可以直接使用的;变量只有在自己所属的作用域之内才有效;一行代码中可以一次性定义多个相同类型的变量并且赋值,但是不推荐使用。而所谓作用域,指的是从变量定义的一行开始,至所在的大括号结束之间的区域。2)舍入误差舍入误差(Round-offerror)是指运算得到的近似值和精确值之间的差异。在Java语言中多数的小数运算是不能获取精确值的。3)类型转换分类类型转换是将一个值从一种类型更改为另一种类型的过程。它分为两大类,分别为自动类型转换和强制类型转换。自动类型转换也称为隐式类型转换,它是由范围小的数据类型转换为范围大的数据类型,系统将自动执行;强制类型转换也称为显式类型转换,它是由范围大的数据类型转换为范围小的数据类型。两种类型的数据类型转换都有各自的特点,自动类型转换的特点是自动完成转换,不需要程序员特殊处理。强制类型转换的特点是需要特殊处理,否则可能编译不通过。4)精度损失通过强制类型转换确实可以将范围大的数据类型转换为范围小的数据类型,但请注意,当数值在范围小的数据类型的范围之内时,是不会出现错误的,但当数值在其范围之外时,强制类型转换的输出结果就会有误差,这就是精度损失。强制类型转换可能会出现精度损失的问题,且将小数强转为整数时,会直接将小数部分舍弃,此时也会出现精度损失。5)编码编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码,简称编码。主要有ASCII、ISO8859-1、GBK和UTF-8等几种常用的编码。ASCIIASCII为美国标准信息交换码,用一个字节的7位表示,总共有128个,包含了英文的大小写、常用符号和数字。ISO8859-1ISO8859-1为拉丁码表,用一个字节的8位表示。ISO8859-1以ASCII为基础,在空置的范围内,加入192个字母及符号。GBK和UTF-8随着科技的发展,中文也需要码表,此时出现了GBK和UTF-8。它们的英文均占一个字节,GBK的中文占两个字节,UTF-8的中文占三个字节。中文在不同的编码中占的字节数是不同的,这也是中文会出现乱码的原因。6)类型转换扩展byte/short/char类型的数据,在运算时会自动提升为int类型的数据,字符在参与运算时已经转换为了对应码表的数字。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)进制转换十进制转换为二进制十进制转换为二进制是将十进制的数不断除以2取余,然后将余数倒排序即可。二进制转换为十进制二进制转换为十进制是从低位次起,按位次乘以2的位次幂,然后求和。十进制转换为其他进制十进制转换为其他进制的方法和转换为二进制的方法类似,十进制向哪个进制转换就除以哪个进制,然后取余倒排即可。二进制转换为八进制二进制转换为八进制是从低位次起,每3位为一组,产生一个八进制数字,最高位不足3位时补0,3位以内按照二进制向十进制的转换规则进行运算,产生的八进制数字按顺序排列即可。八进制转换为二进制八进制转换为二进制,其方法与二进制转换为八进制相反,将每位八进制的值转换为3位二进制的数字,然后将这些二进制的数字按顺序排列即可。二进制转换为十六进制二进制转换为十六进制其实是四变一的过程,操作方法与二进制转换为八进制方法一致。首先将二进制数从右向左按4位分组,不足以0补全,然后将每组二进制数转换为十六进制,最后按顺序排列即可。十六进制转换为二进制十六进制转换为二进制是一变四的过程,与二进制转换为十六进制相反。9)原码、补码和反码原码(trueform)是一种计算机中对数字的二进制定点表示方法。补码是计算机把减法运算转化为加法运算的关键编码。反码通常是用来由原码求补码或者由补码求原码的过渡码。在Java中的数据底层都是使用数据的补码形式存储和计算的。正数的原码、补码和反码都相同;负数的反码是符号位不变,其他位取反;负数的补码是符号位不变,在反码的基础上加1。在介绍负数的反码和补码时,涉及到符号位,符号位一般放在最高位,常用0作为正数,用1作为负数。(2)运算符运算符是对变量和常量进行运算的符号。表达式是使用运算符将常量或者变量连接起来的式子。1)运算符分类运算符分为算术运算符、赋值运算符、关系运算符、逻辑运算符、三目运算符和位运算符几种,其中三目运算符也称为三元运算符。本节课将主要介绍算术运算符、赋值运算符、关系运算符和自增自减运算符。2)运算符的使用算术运算符Java中的算术运算符包含+、-、*、/和%几种。表1算术运算符序号运算符含义示例1+加12+3=152-减12-3=93*乘12*3=364/除12/3=45%取余数12%5=2自增自减运算符自增自减运算符包括++、--两种,可以放在变量前面,也可以放在变量后面。它们可以独立使用,也可以混合使用。独立使用时,自增自减运算符放在变量前面和后面没有区别,都是对变量进行+1或者-1的操作。自增自减运算符混合使用时,如果运算符++(--)在变量前面,那么首先变量自身加1(减1),然后根据加1(减1)后的结果进行使用;如果运算符++(--)在变量后面,则先对变量进行使用,然后变量自身加1(减1)。赋值运算符赋值运算符包括+=、-=、*=、/=和%=运算符。赋值运算符默认包含一个强制类型转换操作。关系运算符关系运算符包括==、!=、>=、<=、>和<运算符,其最终结果都是布尔类型。表2关系运算符序号运算符含义1==比较左右两方是否相等2!=比较左方是否不等于右方3>=比较左方是否大于等于右方4<=比较左方是否小于等于右方5>比较左方是否大于右方6<比较左方是否小于右方巩固练习(1)以下代码能否编译成功?为什么?1)charch1=97;shortch2=‘a’;2)charch1=97;shortch2=‘a’;shortch2=ch1。(2)计算-5的原码、反码和补码。课堂小结通过本课程内容的学习,相信同学们已经能够掌握变量使用时的注意事项,以及Java中类型转换和运算符的应用。其中类型转换是本节课程的重点和难点,自增自减运算符是运算符知识点中的难点,常见于企业面试和证书考试中,一定要多多练习。熟练掌握基础运算符的使用,将为接下来学习高级运算符打好基础。布置作业(1)课下作业对于inti=3,j=5;请同学们写出能够交换i和j的值的方式并比较各种方式的优劣性。(2)预习作业1)逻辑运算符、三目运算符和位运算符。2)流程控制语句。八、板书设计九、教具notepaddos十、教学反思课程名称:Java核心基础章节名称:运算符和流程控制语句2019年12月目录TOC\o"1-2"\h\u一、基本说明 2二、教学目标 2三、教学重点 2四、教学难点 2五、教学方法 3六、教学准备 3七、教学过程 3八、板书设计 16九、教具 16十、教学反思 16基本说明授课班级:授课人数:教学时间:课时:6课时课型:理论+实践教学目标知识与技能通过自主学习本课程,学生能够掌握Java的逻辑运算符、三目运算符和位运算符。通过自主学习本课程,学生能够理解短路效果的含义。通过自主学习本课程,学生能够熟练流程控制语句结构。过程与方法通过课堂练习,学生能够进一步掌握位运算的算法。情感、态度、价值观通过探究学习本课程,学生能够了解顺序结构、选择结构和循环结构的异同,掌握跳转控制语句的用法,为学生掌握Java语言打下坚实基础。教学重点运算符的使用。if语句格式三。for循环结构。教学难点需要学生理解和掌握运算符的使用。教学方法边讲边练:教师以边讲边练的方式,一边介绍逻辑运算符、位运算符和三目运算符,及顺序结构、选择结构和循环结构等流程控制语句的相关知识,一边通过代码演练的方式,举例说明相关知识点,让学生巩固所学内容。教学准备学生准备Windows操作系统。JDK8版本以上的安装包。教师准备Windows操作系统。JDK8版本以上的安装包。教学过程导入新课(1)回顾上节课内容并答疑解惑回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。(2)进入主题,展开详细讲解学习了部分基础运算符的相关知识后,本课程将介绍逻辑运算符、位运算符和三目运算符的相关知识。之前我们所学的代码都是顺序结构的,是逐行执行的,但如果需要跳过某行代码或有选择地执行,就需要使用到流程控制语句了,因此本课程我们还会对流程控制语句进行介绍。本课程包含两大内容:运算符(二)流程控制语句(3)明确学习目标掌握Java中的逻辑运算符。理解短路效果的含义。掌握位运算的算法。熟练使用三目运算符。熟练流程控制语句结构。讲授课程(1)运算符(二)1)逻辑运算符逻辑运算符一般用于连接boolean类型的表达式或者值,分为&(与)、|(或)、!(非)和^(异或)4种运算符。与(&)运算符与(&)运算符,表达式或者值全部为true时,则返回的结果为true;只要有一个为false,则结果为false。或(|)运算符在或(|)运算符中,只要有一个表达式或者值为true,那么结果就是true;如果全部是false,结果为false。异或(^)运算符在异或(^)运算符中,左右两侧的表达式或者值相同时返回false,不同时返回true。取反(!)运算符取反(!)又称为非,只能用于连接一个布尔类型的值,将true变为false,将false变为true。在使用逻辑运算符时,也可以写成双与(&&)、双或(||)的形式,与&和|的结果是完全一样的,只是&&和||的效率更高。因为使用双与、双或会出现短路效果,即如果左边已经可以判断出最终结果,那么右边代码就不再执行了。2)位运算符位运算符的使用前提是要把数据转换为二进制的补码形式,包括&(与)、|(或)、^(异或)、<<(左移)、>>(右移)、>>>(无符号右移)和~(取反)。按位与(&)按位与运算符"&"是双目运算符,其功能是参与运算的两数各对应的二进位相与。只有对应的两个操作数中位均为1时,结果才为1,否则为0。根据按位与的说明,可以得到如下推论:推论1:任意一个数&一个偶数,结果一定是偶数。因为在二进制中偶数的最后一位数肯定是0,0与上任意数结果还是0,那么最后一位是0,则结果肯定是偶数。推论2:任意一个数&1,如果结果是0,这个数一定是偶数。按位或(|)按位或运算符“|”是双目运算符,其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为1时,那么结果就是1,否则为0。根据按位或的说明,可以得到如下推论:推论1:任意一个数|一个奇数,结果一定是奇数。推论2:与0或的结果还是自身。异或(^)按位异或运算符“^”是双目运算符,其功能是参与运算的两数各对应的二进位相异或。当两对应的二进位相异时,结果为1,否则为0。左移(<<)左移运算符“<<”是双目运算符,其功能是把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。左移n位就是乘以2的n次方,它是更底层的指令集。右移(>>)右移运算符“>>”是双目运算符,其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。右移n位就是除以2的n次方,低位丢弃,高位补位(正数补0,负数补1)。无符号右移(>>>)无符号右移和右移类似,但是最高位空出之后,无论是正数还是负数,都补0。取反(~)取反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。即将数字转换为二进制后,1变0,0变1,然后最高位按照-128计算,其余位按照二进制向十进制的转换规则计算。如果最高位是0,那么不用计算。3)三目(三元)运算符三目运算符是计算机语言的重要组成部分,它是唯一有3个操作数的运算符,所以又称为三元运算符。格式:数据类型变量名=判断条件?表达式A:表达式B;如果判断条件成立,那么将表达式A的结果赋值给等式左边变量;如果判断条件不成立,那么将表达式B的结果赋值给等式左边变量。(2)流程控制语句流程控制语句用于对程序流程的选择、循环、转向和返回等进行控制,以实现程序的各种结构方式。流程控制语句包括顺序结构、选择结构和循环结构。1)顺序结构顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序依次执行,程序中大多数的代码都是顺序结构的。2)选择结构选择结构也被称为分支结构,用于判断给定的条件,根据判断的结果来控制程序的流程。选择结构有特定的语法规则,代码要执行具体的逻辑运算然后进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。Java语言提供了if语句和switch语句两种选择结构。if语句格式一格式:if(布尔表达式){ 语句体;}if语句格式一的流程图:if语句格式二格式:if(关系表达式){ 语句体1;}else{ 语句体2;}if语句格式二流程图:if语句格式三格式:if(判断条件1){执行语句1;}elseif(判断条件2){ 执行语句2;}...elseif(判断条件n){ 执行语句n;}else{执行语句n+1;}if语句格式三流程图:switch语句格式:switch(表达式){ case目标值1: 语句体1; break; case目标值2: 语句体2; break; … default: 语句体n+1; break;}switch语句流程图:3)循环结构循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码称为循环体语句。当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环;否则循环将一直执行下去,形成死循环。循环语句的组成分为:①循环变量初始化(初始化表达式);②循环出口(布尔表达式);③循环逻辑内容(循环体);④循环增量(步进表达式)。循环结构for格式:for(初始化表达式①;布尔表达式②;步进表达式④){循环体③}循环结构for流程图:循环结构while格式:初始化表达式①while(布尔表达式②){ 循环体③ 步进表达式④}循环结构while流程图:循环结构do-while格式:初始化表达式①do{ 循环体③ 步进表达式④}while(布尔表达式②);循环结构do-while语句流程图:4)三种循环的区别do…while循环至少会执行一次循环体;for循环和while循环只有在条件成立的时候才会执行循环体。For循环语句和while循环语句的区别,是控制条件语句所控制的变量,在for循环结束后,就不能再被访问了,而while循环结束还可以继续使用。5)跳转控制语句Java支持3种跳转语句:break、continue和return。这些语句把控制转移到程序的其他部分。break表示中断,在选择结构switch语句和循环语句中使用,可结束当前循环;continue表示继续,在循环语句中使用,可结束本次循环,继续下一次循环。巩固练习(1)键盘录入学生考试成绩,判断学生等级。要求:90-100 优秀80-90 好70-80 良60-70 及格60以下 不及格使用技能:Scanner类、if语句格式三(2)根据键盘录入的数值1、2、3...7输出对应的星期一、星期二、星期三...星期日。使用技能:Scanner类、switch语句(3)统计水仙花数有多少个。说明:水仙花数是指一个三位数,其每一位数字的立方和等于该数本身。使用技能:for循环(4)求出1-100之间的偶数和。使用技能:while循环(5)统计水仙花数有多少个。说明:水仙花数是指一个三位数,其每一位数字的立方和等于该数本身。使用技能:do-while循环课堂小结通过本节课的学习,同学们能够掌握逻辑运算符、位运算符和三目运算符以及选择结构if、switch语句和循环结构for、while和do-while语句的使用。if语句常用于判断场景,switch语句常用于固定内容的匹配。当有大量循环性的语句时,可以使用循环结构。循环结构优先推荐使用for循环和while循环。布置作业(1)课下作业打印99乘法表。(2)预习作业1)java数组。2)java中的内存分配。八、板书设计九、教具notepaddos十、教学反思课程名称:Java核心基础章节名称:数组和方法2019年12月目录TOC\o"1-2"\h\u一、基本说明 2二、教学目标 2三、教学重点 2四、教学难点 3五、教学方法 3六、教学准备 3七、教学过程 4八、板书设计 10九、教具 10十、教学反思 10基本说明授课班级:授课人数:教学时间:课时:6课时课型:理论+实践教学目标知识与技能通过自主学习本课程,学生能够理解JVM划分区域的作用。通过自主学习本课程,学生能够熟练应用Java中的数组。通过自主学习本课程,学生能够熟练使用Java中的方法。过程与方法通过课堂练习实际操作,学生能够进一步掌握数组和方法的应用技巧和方法。情感、态度、价值观通过探究学习本课程,学生能够掌握使用数组和方法的不同编程方式,培养自己写出简洁、有效率代码的编程思路。教学重点动态初始化。Java中的内存分配。定义数组的练习。静态初始化。数组操作的常见问题。遍历数组的练习。冒泡排序的练习。获取数组中的最大值练习。使用选择排序法对数组进行排序。方法的定义格式。void修饰的方法。方法的重载。方法的参数传递。教学难点练习定义数组的方法。编程实现冒泡排序。编程获取数组中的最大值。使用选择排序法对数组进行排序。方法的参数传递。递归的使用。教学方法边讲边练+课堂陷阱:教师可以故意用一段有缺陷的程序代码设置陷阱,介绍动态初始化的相关知识的同时,引出访问数组元素的方法,及Java中的内存分配等知识;然后边讲边练,介绍Java的数组和方法的其他相关基础知识。教学准备学生准备Windows操作系统。JDK8版本以上的安装包。教师准备Windows操作系统。JDK8版本以上的安装包。教学过程导入新课(1)回顾上节课内容并答疑解惑回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。(2)进入主题,展开详细讲解数组和方法是Java基础知识中的核心内容,本节课我们将首先介绍Java的数组,包括数组的定义和格式、数组的初始化、数组操作的常见问题及二维数组等内容;另外,我们还将介绍Java方法的概述、定义、调用、重载和参数传递,以及void修饰的方法和递归等知识。(3)明确学习目标理解JVM划分区域的作用。熟练应用Java中的数组。熟练使用Java中的方法。讲授课程(1)数组数组是最常见的一种数据结构,是相同类型的、用一个标识符封装到一起的基本类型的数据序列或对象序列。1)数组的定义和格式数组是存储同一种数据类型的多个元素的容器。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素。数组的定义格式:格式1:数据类型[]数组名;格式2:数据类型数组名[];2)数组的初始化数组的初始化是为数组中的数组元素分配内存空间,并为每个数组元素赋值。动态初始化动态初始化在初始化时只指定数组长度,由系统为数组分配初始值。动态初始化格式:数据类型[]数组名=new数据类型[数组长度];其中,数组长度就是数组中元素的个数。访问数组元素访问数组元素的格式为:数组名[索引]Java中的内存分配Java程序运行时,需要在内存中分配空间。Java中的内存共分为5个区域,分别为栈、堆、方法区、本地方法区和寄存器。栈主要用于存储局部变量,当局部变量超出作用域其内存空间就会被回收;方法区主要存储和类相关的信息;本地方法区与操作系统相关;寄存器与CPU相关;堆存储的是new出来的内容,内容在堆中,具有一个首地址值,根据数据类型的不同被赋予一个不同的初始化值。堆的这一特性,正是上面的例子输出结果都为0的原因。Java中堆的初始化值的规则如下:byte/short/int默认值为0;long类型默认值为0L;float类型默认值为0.0F;double类型默认值为0.0;char类型默认值为'\u0000';boolean类型默认值为false;引用数据类型默认值为null。静态初始化静态初始化是在初始化时指定每个数组元素的初始值,由系统决定数组长度。静态初始化格式:数据类型[]数组名=new数据类型[]{元素值1,元素值2,…};简化格式:数据类型[]数组名={元素值1,元素值2,...};3)数组操作的常见问题数组操作的常见问题有以下两种:数组索引越界异常(ArrayIndexOfBoundsException)在访问到数组中不存在的索引时,会发生数组索引越界异常。空指针异常(NullPointerException)当数组引用没有指向对象却在操作对象中的元素时,会发生空指针异常。4)二维数组二维数组本质上是以一维数组作为二维数组的元素的数组,即“数组的数组”。二维数组的定义格式:数据类型[][]数组名;数据类型数组名[][];(不推荐)数据类型[]数组名[];(不推荐)初始化方式:数据类型[][]变量名=new数据类型[m][n];其中m表示二维数组的长度(二维数组中一维数组的个数);n表示二维数组中一维数组的长度。数据类型[][]变量名=new数据类型[][]{{元素…},{元素…},{元素…}};数据类型[][]变量名={{元素…},{元素…},{元素…}};(简化版格式)(2)方法1)方法概述方法就是完成特定功能的代码块。在很多语言里面都有函数的定义,函数在Java中就是方法。2)方法的定义格式修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2…){方法体;return返回值;}3)方法的调用方法没有调用是不会被执行的,而且单独调用方法也是没有意义的。使用格式:方法名(参数);在代码中main也是方法,因为方法不能嵌套使用,所以要在main方法之外定义方法。4)void修饰的方法void是Java中的关键字,用于描述没有返回值的方法。没有明确返回值的函数调用,就是void类型方法调用,void只能单独调用。格式:修饰符void方法名(参数类型参数名1,参数类型参数名2…){ 方法体; return;}5)方法的重载(Overload)方法重载是指在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。方法重载的特点:与返回值类型无关,只看方法名和参数列表;在调用时,虚拟机通过参数列表的不同来区分同名方法;本质上就是方法在调用时,保证能通过方法名和参数区分要调用的方法。6)方法的参数传递参数传递可以理解为在调用一个方法时,我们会把指定的数值传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值在方法中运算。定义方法时,参数列表中的变量,称为形式参数。调用方法时,传递给方法的数值,称为实际参数。方法参数传递的两个注意事项分别为:其一,基本数据类型(加上String)形式参数的改变不影响实际参数;其二,引用数据类型(除了String)形式参数的改变影响实际参数。7)递归递归(recursion)是指程序调用自身的编程技巧,通俗地讲,就是方法的递归就是在方法里面执行本方法。巩固练习(1)首先定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素,并分析内存图。(2)定义两个数组,先定义一个数组并赋值输出结果。然后在定义第二个数组时把第一个数组的地址赋值给第二个数组,为第二个数组赋值,再次输出两个数组名及元素,并分析内存图。(3)获取数组中的最大值。(4)使用选择排序法对数组进行排序。(5)比较两个数据是否相等。课堂小结通过本节内容的学习,相信同学们已经掌握了Java中数组和方法的定义以及使用方式。数组是一个容器,主要用于在内存中存储数据类型相同的数据,既可以存储基本数据类型,也可以存储引用数据类型。本节课介绍的方法都是使用static修饰,称之为静态方法,在后续的面向对象阶段中我们将学习成员方法,以及static关键字的具体含义。布置作业(1)课下作业1)给定一个数组将这个数组中所有元素的顺序进行颠倒。2)15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子成为大王。问:哪只猴子会成为大王?使用代码实现。3)输入一个数字n,利用递归求出1~n的和。(2)预习作业1)面向对象思想。2)private关键字。八、板书设计九、教具notepaddos十、教学反思课程名称:Java核心基础章节名称:面向对象(一)2019年12月目录TOC\o"1-2"\h\u一、基本说明 2二、教学目标 2三、教学重点 2四、教学难点 3五、教学方法 3六、教学准备 3七、教学过程 4八、板书设计 12九、教具 13十、教学反思 13基本说明授课班级:授课人数:教学时间:课时:6课时课型:理论+实践教学目标知识与技能通过自主学习本课程,学生能够独立安装Eclipse。通过自主学习本课程,学生能够使用Eclipse删除和导入项目。通过自主学习本课程,学生能够说出成员变量和局部变量的区别。过程与方法通过创建和使用对象,学生能够理解和掌握面向对象的三大特征。情感、态度、价值观通过探究学习本课程,学生能够了解面向对象的思想,理解面向对象编程语言和面向过程编程语言的区别和优缺点,以更好地学习Java语言。教学重点面向对象思想。类与对象的关系。创建对象的方法。对象的内存。封装。this关键字。构造方法。标准学生类代码的编写和测试。super关键字。多态的体现。教学难点让学生掌握类与对象的关系。理解封装的概念和使用。构造方法的使用。super关键字的使用。多态的体现。教学方法边讲边练+对比教学法:教师可以边讲边练,介绍IDE的历史,以及主流的一些IDE和Eclipse的安装与使用。然后以对比教学法,介绍面向对象和面向过程的区别,及面向对象的思想、类与对象的关系以及如何创建对象等。最后再边讲边练,介绍面向对象的三大特征:封装、继承和多态。教学准备学生准备Windows操作系统。JDK8版本以上的安装包。eclipse压缩包。教师准备Windows操作系统。JDK8版本以上的安装包。eclipse压缩包。教学过程导入新课(1)回顾上节课内容并答疑解惑回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。(2)进入主题,展开详细讲解本节课我们将介绍IDE的基础知识和Eclipse的安装与使用;然后介绍面向对象的相关概念、面向对象和面向过程的区别、面向对象的思想、类与对象的关系以及如何创建对象等知识;接着我们介绍了面向对象的三大特征,包括封装、继承和多态。(3)明确学习目标能够独立安装Eclipse。能够使用Eclipse删除和导入项目。理解面向对象和面向过程的区别。能够说出成员变量和局部变量的区别。能够理解面向对象的三大特征。讲授课程(1)IDEIDE是一个集成开发环境(IntegratedDevelopmentEnvironment),是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。IDE集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。1)EclipseEclipse是一个专门针对Java的集成开发工具(IDE),是IBM公司的产品。Eclipse具有如下特点:免费;纯Java语言编写;免安装;扩展性强。2)Eclipse的快捷键内容辅助键:Alt+/组合键main方法:输入main,然后按Alt+/组合键,再按Enter键。输出语句:输入syso,然后按Alt+/组合键并按Enter键。其它快捷键单行注释:选中相关内容,按Ctrl+/组合键。再按一次Ctrl+/组合键,即可取消单行注释。多行注释:选择相关内容,按Ctrl+Shift+/组合键。取消多行注释,则选中内容后按Ctrl+Shift+\组合键。格式化:选中内容,按Ctrl+Shift+F组合键。3)项目的删除和导入在程序开发过程中会产生很多代码,如果要查看其代码,可以将该项目导入,不需要时也可以将其删除。(2)面向对象的使用1)面向过程和面向对象面向过程开发,其实就是面向具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。面向过程的代表语言是C语言。面向对象开发,就是把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。它们的区别可总结为下面三点:都可以实现代码重用和模块化编程,但是面对对象的模块化更深,数据更封闭,也更安全!因为面向对象的封装性更强!面对对象的思维方式更加贴近于现实生活,更容易解决大型的复杂的业务逻辑。从前期开发角度上来看,面对对象远比面向过程要复杂,但是从维护和扩展功能的角度上来看,面对对象远比面向过程要简单!2)面向对象的思想面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象具有如下特点:是一种更符合我们思考习惯的思想;可以将复杂的事情简单化;将我们从执行者变成指挥者,角色会发生转换。3)类与对象的关系学习编程语言就是要模拟现实世界的事物,实现信息化,所以需要了解现实事物的属性和行为。其中属性指的是事物的描述信息,行为指的是事物能够做什么。Java语言最基本的单位是类,类是一组相关的属性和行为的集合,通过类可以与现实事物产生联系。对象是该类事物的具体体现。在Java中类的属性叫做成员变量,行为就是成员方法。所以定义类在Java中就是定义成员的变量和方法。4)创建对象类只是描述一类事物的行为和状态,所以类创建完成后,还需要通过创建对象来使用类。创建对象的格式:类名对象名=new类名();使用对象访问类中的成员:对象名.成员变量;对象名.成员方法();5)对象的内存对象存放于堆中,方法的执行在栈中,类的加载信息在方法区中。堆中的成员变量有默认值。在JVM中有3个区域与实际开发相关,分别为栈、堆和方法区。栈区域存放的是局部变量;堆区域存放new的内容;方法区存放.class文件。(3)封装封装可以被认为是一个保护屏障,防止该类代码和数据被外部类定义的代码随机访问。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。1)封装的概述和原则面向对象的三大特征为封装、继承和多态。封装是面向对象编程语言对客观世界的模拟,即一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装的原则:将不需要对外提供的内容隐藏起来;隐藏属性,提供公共方法对其访问;成员变量用private修饰,提供对应的getXxx()/setXxx()方法;被private修饰的成员只在本类中才能访问。2)this关键字在Java中为了解决变量的命名冲突和不确定性等问题,引入关键字this代表其所在方法的当前对象的引用:1)构造方法中指该构造器所创建的新对象;2)方法中指调用该方法的对象;3)在类本身的方法或构造器中引用该类的实例变量(全局变量)和方法。所以,this关键字可以代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象。this关键字的使用:局部变量隐藏成员变量(局部变量和成员变量重名);this语句必须在有效代码的第一行。3)构造方法构造方法是类的一种特殊方法,用来初始化类的一个新对象,在创建对象(new运算符)之后自动调用。构造方法的作用是给对象的数据进行初始化。构造方法的格式:修饰符构造方法名(参数列表){}注意事项:如果没有提供构造方法,系统会给出默认构造方法;如果提供了构造方法,系统将不再提供;构造方法也是可以重载的。4)构造代码块和局部代码块构造代码块构造代码块就是在类中方法外的{},对象一创建就运行,而且优先于构造方法运行。构造代码块中定义的是不同对象共性的初始化内容。局部代码块局部代码块是在方法中的{},可以限制变量的作用范围和生命周期,从而提高栈内存的利用率。5)权限修饰符权限修饰符指在Java中用于限定使用范围的关键字,包含public、protected、default和private四种关键字。权限修饰符本类中子类中同包类中其它类中public可以可以可以可以protected可以可以可以不可以default可以同包子类可以可以不可以private可以不可以不可以不可以(4)继承1)继承的概述和使用格式类的继承是指在现有类的基础上构建新的类,构建出来的新类称作子类,现有类称作父类,子类会自动拥有父类所有可继承的属性和方法。继承格式如下:class子类extends父类{}另外,继承还可以提高代码的复用性,且在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在对应的方法就会执行子类中的方法,若子类中不存在则会执行父类中相应的方法。2)继承的特点Java支持单继承;Java支持多层继承;父类定义了继承树中共性内容,子类定义了该类个性内容。3)super关键字Java中的super关键字是一个引用变量,是指向父类的引用。如果构造方法没有显式地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。另外,如果父类没有默认的无参构造方法,编译器会报错,super()语句必须是构造方法的第一个子句。创建一个子类对象时,会先调用子类的构造方法,然后再调用父类的构造方法,如果父类足够多的话,会一直调用到最终的父类构造方法。4)重写(Override)在父类和子类中存在方法签名相同的非静态方法,称之为方法的覆盖或重写。重写的原则:方法签名一致;如果父类中的方法返回值类型是基本数据类型或者void,那么子类在重写方法的时候返回值类型要保持一致;子类重写方法的权限修饰符的范围要大于等于父类对应方法权限修饰符的范围;如果父类方法的返回值类型是引用数据类型,那么子类重写的方法的返回值类型要么与父类方法返回值类型一致,要么子类方法的返回值类型是父类方法返回值类型的子类。(5)多态1)多态的概述多态是现实事物经常会体现出的多种形态,如学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。Java作为面向对象的语言,同样可以描述一个事物的多种形态。2)多态的体现多态分为编译时多态和运行时多态。编译时多态就是方法的重载,运行时多态是向上造型和方法的重写。向上造型是用父类来声明对象、用子类来创建对象,编译期间只会检查声明类和创建类之间是否有继承关系,有则编译通过,运行期间才确定具体的子类。巩固练习(1)定义一个手机类并创建对象。(2)标准学生类代码编写和测试。课堂小结通过本部分内容的学习,相信学生已经能够解答前面对于使用引用数据类型的疑惑,能够理解面向对象和面向过程的区别,并理解面向对象的三大特征:封装、继承、多态。初次接触面向对象思想的同学理解会有点难度,需要更多的练习和思考来加深印象。布置作业(1)课下作业1)定义一个类表示矩形,提供求周长和面积的方法。2)定义一个类Complex,用来表示复数。这个复数类具有两个属性:doublereal,表示实部;doubleim,表示虚部。并为Complex类增加add、sub、mul方法,分别表示复数的加法、减法和乘法运算。其中,add方法的声明如下:publicComplexadd(Complexc)//表示当前Complex对象与参数c对象相加。publicComplexadd(doublereal)//表示当前Complex对象与实数real相加。(2)预习作业abstract、static、interface关键字。八、板书设计九、教具eclipse十、教学反思课程名称:Java核心基础章节名称:面向对象(二)2019年12月目录TOC\o"1-2"\h\u一、基本说明 2二、教学目标 2三、教学重点 2四、教学难点 3五、教学方法 3六、教学准备 3七、教学过程 3八、板书设计 11九、教具 11十、教学反思 11基本说明授课班级:授课人数:教学时间:课时:6课时课型:理论+实践教学目标知识与技能通过自主学习本课程,学生能够区分类方法和对象方法。通过自主学习本课程,学生能够区分静态变量和成员变量。通过自主学习本课程,学生能够掌握final关键字的用法。过程与方法通过定义接口并实现,学生能够熟练接口的使用方法。通过定义内部类并实现,学生能够掌握内部类的使用方法。情感、态度、价值观通过探究学习本课程,学生能够进一步了解接口的作用,经过多加练习后,能够更加明显地感受到面向接口开发的实际意义。教学重点static关键字的使用。抽象类&抽象方法的特性。接口的定义。类实现接口。接口中成员的特点。接口的特点。教学难点让学生掌握static关键字的使用。让学生理解类实现接口。教学方法边讲边练+直观演示法:教师可以边讲边练,首先介绍static和final关键字,其次介绍abstract关键字(即抽象方法和抽象类),最后再介绍接口和内部类等的相关知识。同时,教师可以用实际的代码,直观演示所讲内容的定义、特点和使用等。教学准备学生准备Windows操作系统。JDK8版本以上的安装包。eclipse压缩包。教师准备Windows操作系统。JDK8版本以上的安装包。eclipse压缩包。教学过程导入新课(1)回顾上节课内容并答疑解惑回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。(2)进入主题,展开详细讲解本节课将从5个方面介绍面向对象的相关知识,首先介绍static和final关键字,其次介绍abstract关键字(即抽象方法和抽象类),最后再介绍接口和内部类。(3)明确学习目标能够区分类方法和对象方法。能够区分静态变量和成员变量。掌握final关键字的用法。理解抽象方法的应用场景。熟练使用接口。掌握内部类的使用。讲授课程(1)static关键字在Java语言中,static表示“静态”的意思,可以用来修饰成员变量和成员方法,当然也可以是静态代码块。1)static关键字概述static是静态修饰符,一般用来修饰类中的成员,成员包括成员变量和成员方法。被static修饰的成员属于类,不属于单个这个类的某个对象,且它会影响每一个对象。被static修饰的成员又叫类成员,不叫对象成员。另外,static修饰的成员被多个对象共享。2)static关键字的使用Static关键字具有如下特性:static可以修饰变量、方法、代码块、内部类。static修饰的变量叫做静态变量。static修饰的方法叫做静态方法。static修饰的代码块叫做静态代码块。(2)final关键字final是Java中的关键字,用于修饰数据、方法和类。final修饰的数据称之为常量,定义之后是不可以修改的,对于基本数据类型而言,指其实际值不可修改;对于引用数据类型而言,指其地址值不可修改。(3)abstract关键字abstract关键字可以用于类、方法、事件和索引指示器,表示其为抽象成员,抽象方法是没有方法体的方法。1)抽象概述分析事物时,发现了共性内容,就出现向上抽取。当出现方法功能声明相同、方法功能主体不同的特殊情况时,也可以向上抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。2)抽象类的产生抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。在Java中,含有抽象方法的类称为抽象类,同样不能生成对象。当有不具体的功能需要在类中标识出来时,可以通过Java中的关键字abstract(抽象)修饰。当定义了抽象方法的类也必须被abstract关键字修饰时,被abstract关键字修饰的类是抽象类。3)抽象类&抽象方法的定义抽象方法定义的格式为:publicabstract返回值类型方法名(参数);抽象类定义的格式为:abstractclass类名{}4)抽象类和抽象方法的特性抽象类可以定义构造方法,存在的意义在于对自身进行初始化,供其子类使用。抽象类不能创建对象,底层JVM会利用C语言创建一个虚拟对象给子类使用。抽象类中可以定义普通方法。抽象类中不能直接实例化,需要使用向上造型。抽象类一定不是最终类。抽象方法可以重载,必须被继承和重写,不能用private/final/static关键字修饰。(4)接口1)接口概述接口是功能的集合,同样可看作是一种数据类型,是比抽象类更为抽象的“类”。接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类来完成。这样将功能的定义与实现分离,优化了程序设计。一切事物皆有功能,即一切事物皆有接口。2)接口的定义使用接口与定义类的class不同,接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论