内蒙古农业大学职业技术职业学院
教案
2012-2013学年第一学期
课程名称 java程序设计 课程类别 专业必修课 任课班级 11计教 任课教师 杨中杰 教师所属系部 信管系
2012年9月
学科 课题 周数 Java程序设计 1.1一个C++应用程序 1.2编辑源程序文件1.3编译、连接和运行 1 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1. 掌握面向对象的程序设计的思想、方法及其特征 2. 学会使用Java语言进行程序设计 3. 学会运用面向对象方法分析和解决实际问题的能力
教学重点 1. 掌握Java程序开发环境; 教学难点 1. 掌握Java程序开发环境; 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 一、教学导入 (5分钟) 本课程的研究对象、目标和任务及课程建设情况,使学生对本课程的模块式教学法有基本的了解。 二、讲授新课 初学Java注意的问题: 对一个简单的例子也要有耐心去琢磨、调试、改动。 在学习的过程中一定要动手做、写代码,而不是抱一本书看看就行。 很多东西和体会必须自己动手才能真正属于自己。 不但要掌握这门语言语法本身,更重要的是学会编程的思想,这是所有程序设计语言的基础。 什么是程序? 任何事情都有一定的步骤,计算机是通过执行人给它下达的一条条命令来工作的。 1、初始Java 本章重点: 了解几种程序设计语言的特点; 掌握Java语言的特点,以及与其他语言的区别; 掌握Java的开发和运行环境的配置与安装。 主要内容: Java的诞生 机器语言、汇编语言、高级语言; JDK的安装与设置; 开发和运行Java程序的步骤。 程序设计语言 程序设计语言经历: 技术的发展,处理的数据也已从简单的数字和字符串发展为记录在各种介质上、并且有多种格式的多媒体数据,如数字、正文、图形、声音和影像等 。面向对象的程序设计方法正是在这种背景下诞生的。 C++、 Java语言成为最广泛使用的面向对象编程语言的代表。 Java的起源和设计理念 Java语言是由Sun公司于1995年5月23日正式推出的面向对象的程序设计语言。 Java编译器和Java虚拟机 什么是编译?程序为什么要编译? 一个Java源程序文件必须经过转换才能被计算机识别和执行,该转换过程 教学过程详见课件 被称为编译。 Java编译器和Java虚拟机 什么是Java虚拟机? Java虚拟机是一个想象中的机器,用来运行Java程序。 Java解释器即为Java虚拟机。经过Java解释器的解释,才能得到具体的及其可以执行的代码,即机器码文件。 所谓的机器码就是指真正令CPU 运行的程序代码。也称为本地码 Java与C/C++的比较 跨平台: C/C++语言编译为机器码;Java语言编译为字节码,通过JVM解释为机器码 废除指针: C/C++语言有指针类型;Java语言没有指针类型 继承: C++允许多继承;Java语言仅允许单继承 速度: C/C++运行速度快;Java运行速度相对有点慢 Java和C最本质的区别就是:Java是面向对象的语言,而C是面向过程的语言(虽然C可模拟OOP, 但它从本质来说还是面向过程的). 其次, Java是运行在JVM上的,Java不会直接生成机器码,而是生成JVM可以识别的代码,然后通过JVM解释成机器代码, 所以Java的可移植性很高,这点正是网络开发的特点,所以Java最擅长的领域是网络. C多用于开发驱动程序,系统内核,嵌入式程序等对速度要求比较高的程序. Java的开发和运行环境 开发和运行环境是指编写和运行Java程序的软件工具。 初学者首选的开发环境:JDK 其他集成开发工具:Jbuilder,VisualCafe、JCreator等。 1.1 J2SE平台 J2SE平台的英文全称是Java 2 Platform Standard Edition。中文全称是Java平台的标准版本。 根据书中的步骤下载J2SE。 根据书中的步骤安装J2SE。 根据书中的步骤设置J2SE。 1.2 Java集成开发工具的介绍 JDK开发工具集 采用JDK开发JAVA程序能够很快理解程序中各部分代码之间的关系,有利于理解JAVA的程序设计思想。JDK随着JAVA的升级而升级。缺点从事大规模企业级JAVA应用开发非常困难,不能进行复杂的JAVA软件开发,也不利于团队协同开发。 1.2 Java集成开发工具的介绍 Sun公司的NetBeans Sun公司推出的NetBeans是开放源代码的JAVA集成开放环境,适用于各种客户机和Web应用,支持Solaris、Linux和Windows平台,适合于创建于部署2层Java Web应用和n层J2EE应用的企业开放人员使用 Borland公司的JBuilder Borland公司的JBuilder是一款商用的Java集成开放环境,拥有专业化的图形调试界面。由于JBuilder是用纯Java语言编写的,其代码不含任何专属代码和标记,因此用JBuilder可创建纯Java2应用,适合企业的J2EE开发 JCreator JCreator是一种初学者很容易上手的Java开发工具,其缺点是只能进行简单的程序开发,不能进行企业J2EE的开发应用 Eclipse(IBM公司) Eclipse是一种可扩展的开放源代码的Java集成开发环境。Eclipse允许在同一集成开发环境中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目的工作流程,使开发者可以专注在实际的嵌入式目标上。Eclipse的最大特点是它能接受由Java开发者自己编写的开放源代码插件。 IntelliJ IntelliJ是一款综合的Java编程环境,它把Java开发人员从一些耗时的常规工作中解放出来,显著提高了开发效率。它具有运行更快速、可以与其他工具完美集成等特点,还具有很高的性价比。 BlueJ工具 BlueJ是英国Kent大学和澳大利亚的Deakin大学开发的一个编程环境,特别针对刚开始编程的程序人员。它提供了教学工具,对学习面向对象的概念有极大的帮助。BlueJ在介绍编程课程方面已经成为最流行的用于编程教学的环境,在世界很多大学与学院的课程中使用。 1.3 从Hello程序认识Java 例子:源程序名为“HelloWorld.Java”的程序,在屏幕上输出“HelloWorld,Java欢迎你!” 1、创建Java应用程序源文件 (1)打开记事本,输入以下程序 Public class HelloWorld{ Public static void main(String arg[]) {System.out.println(“HelloWorld,Java欢迎你!”);}} (2)将文件命名为HelloWorld.Java,保存到安装目录下。 注意文件名和类名保持一致,Java区分大小写,且扩展名为.Java 2、编译 (1)在目录下输入编译程序命令Javac HelloWorld.Java (2)输入显示文件目录命令dir这时,会发现多了一个HelloWorld.class文件 3、运行 输入运行命令 java HelloWorld Hello类使用public关键字声明该类为公共类,类的开始符号是“{”,结束符号是“}”。 main方法是程序首先运行的方法,开始符号是“{”,结束符号是“}”。 System.out.println方法的作用是在Dos窗口显示“ Hello, 欢迎学习Java!”信息,方法参数的开始字符是“(”,结束符号是“)”。 上机运行Hello程序。 1.4 初学者需要注意的问题 Java语言区分大小写。 使用“.”符号引用属性与方法。 使用“.”符号分隔路径。 使用“{”与“}”符号标识程序块。 使用“(”与“)”符号标识方法参数。 三、讲解例题 (10分钟) 课后作业
学科 课题 周数 1 Java程序设计 实训1 应用jdk开发环境编写java程序 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1、安装Java SE 6.0 2、熟悉JDK开发环境 3、掌握开发JAVA程序的步骤
教学重点 1.掌握Java SE 6.0的启动和退出方法。 教学难点 1.掌握Java SE 6.0项目的编译、连接和执行。 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 1、安装JAVA SE 6.0 2、设置Java SE6.0,即配置path变量和classpath变量 3、使用Java SE6.0命令 1)javac命令 2)java命令 JDK的下载和安装 JDK是指Java Development Kit的简称, 由Sun公司开发的Java开发环境。 JDK工具包含了编译和运行Java程序所需的Java编译器和Java虚拟机。 其余的开发工具均架构在JDK环境之上 。 JDK的版本有3种: Java STANDARD EDITION(标准版)--Java SE Java ENTERPRISE EDITION(企业版)--Java EE Java Micro Edition(小型家电版) --Java ME JDK的安装 如何安装JDK? (安装jdk-6-windows-i586.exe ) JDK的设置主要包括环境变量path和classpath的设置 环境变量就是在操作系统中定义的变量,可以被这个操作系统运行的所有程序来访问 如何设置path和classpath path:指定操作系统到什么地方去查找Java工具。为此可将当前所用机器的Java工具所在的路径(一般在J2SDK文件夹下的BIN子文件夹)赋给path环境变量。 例如:path=c:\\j2sdk1.6.0\\bin classpath:指定Java工具到什么地方去查找类文件(.class文件)。 例如:classpath=.;C:\\j2sdk1.6.0\\lib\ools.jar Java安装目录的解读 开发和运行Java程序的步骤 选择编辑工具: 将java源程序收入并以文件形式保存在计算机外存,源程序文件的扩展名为.java。 编译和运行Java程序: 编译源程序:javac *.java 运行类文件:java *.class 开发和运行Java程序的步骤 教学过程详见课件 编辑源代码(.java文件) 编译源程序(javac *.java) 解释运行字节码文件(java *.class) 三、讲解例题 (10分钟) 课后作业 实验报告1。 学科 课题 周数 2 Java对象程序设计 2.1学习Java符号 2.2学习常量、变量的概念与使用 2.3 常用的数据类型以及数据类型的转换; 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1 学习Java符号(标识符、关键字、运算符、分隔符) 2 学习常量、变量的概念与使用; 3 常用的数据类型以及数据类型的转换; 4 运算符、表达式概念与使用; 教学重点 1. 掌握常量、变量的概念与使用; 教学难点 1. 常用的数据类型以及数据类型的转换 实验仪器及教具 多媒体教学系统 教 学 过 程 一、教学导入 (5分钟) 复习有关在java语言的开发环境,引入新课。 二、讲授新课 2-1:Java符号 符号是构成程序的基本单位。 Java符号可以分为: 标识符 关键字 运算符 分隔符 2-1-1:标识符、关键字 标识符是指程序中所用的符号名称,即需要有一个名字以标识任何一个成分,比如变量、常量。 Java 的标识符由字母、数字、_和$组成,其中字母可以是大写或小写的英文字母,数字为 0 到 9,长度不限,但实际命名不宜过长。 ★注意★ 标识符的第一个字符必须为字母、下划线“_”或美元符号“$” 标识符区分大小写 2-1-1:关键字 关键字又称为保留字,是保留给Java编译器识别用的。 标识符不能与关键字具有相同的名称。 2-1-2:运算符和分隔符 加减乘除“+、-×、/”,在Java中将这些符号称为运算符。 算术运算符:+、-×、/、%(求余)、++(自增)、- -(自减) 关系运算符:= =、!=、>、>=、<、<= 逻辑运算符:&&(短路与)、||(短路或)、&(与)、|(或) 三元运算符:<逻辑表达式>?<结果表达式1>:<结果表达式2> 位运算符以及移位运算符:&、|、^ 赋值运算符:= 分隔符是指将程序的代码组织成编译器所能理解的形式。 2-1-3:注释 注释是程序中的说明性文字,是程序的非编译执行部分。 它的作用是为程序添加说明,增加程序的可读性。 备 注 教学过程详见课件 作为编程人员,应该养成使用注释的习惯,这便于自己以及他人在查看程序时对代码的修改与理解。 注释 注释有3种形式 : “//”符号:单行注释,表示从“//”符号开始到此行末尾的位置都视为注释。 “/* 注释部分*/”符号:多行注释,表示从“/*”开始,到“*/”结束都视为注释部分。 “/** 注释部分 */”符号:文件注释,也是多行注释。此形式乃是第二种的特别类型,可用javadoc.exe命令来制作帮助文件。 例如:使用javadoc命令来创建帮助文件 2-2:基本数据类型 2-2-1:数据类型 在程序设计中,我们要使用和处理数据,而数据又区分为不同的数据类型 在Java中,数据类型分为两大类:简单类型和复合类型(引用类型) 数据所占存储空间的大小以字节为单位 ,根据具体情况选择采用何种数据类型 2-2-2:常量 在程序运行过程中其值始终固定不变的量在Java语言中称为常量。 按照数据类型的不同,常量有: 整型常量 浮点型常量 布尔型常量 字符型常量 字符串型常量 常量--整型常量 ★注意★ 默认的类型为双精度型即double型; 如果要指定是float型或double型,可以采用在整数后面加上F(f)或者D(d)的方式。如:23.34F,-78.34D。 字符型常量: 由英文字母、数字、特殊字符等用两个单引号将字符括起来。如:'A'、'abcd' ; Java字符集中还包括一些控制字符,但是这些字符是不能显示的,可以通过转义字符来表示。 控制字符: 字符串型常量: 字符串常量是由两个双引号所括起来的有零个或多个字符组成的字符串。 布尔型常量: 布尔型常量的值只有两种:它表示逻辑的两种状态。 true(真) false(假) 2-2-3:变量 变量就是指在程序运行中其值可以被改变的量。在程序设计过程中,要使用变量,首先对变量进行声明:类型名 变量名 然后才可以对变量进行赋值和使用。 例如: int x,y; //声明整型变量x,y x=100,y=10; //给变量赋值 或者:int x=100,y=10; 浮点类型就是单精度float型和双精度double型 变量的声明如下: float fVar; //指定变量fVar为float型。 double dVar; //指定变量dVar为double型。 声明赋值如下: float x=10.23f; //f不能省略 double y=10.23456d; //d可以省略 提示:f和d大小写都可以。 字符串类型变量: 字符串类型变量就是在变量名前加上关键字String。 字符型变量的定义如: String c=\"How are you?\"; 此语句表示指定变量c为String型,且赋初值为How are you ? 布尔类型变量: 布尔型数据只有两个值true和false,如: boolean b=true; //定义b为布尔型变量,且初值为true。 2-3:语句、运算符和表达式 2-3-1:语句 程序是由一条一条语句构成的,语句是构成程序的基本单元。 一条语句必须是以分号“;“作为结束符。 例如:int a=15; //这是一条赋值语句,就是将值15赋给变量a,并且以分号结束。 2-3-2:表达式 表达式是包含运算符和操作数的算式。 一个常量或一个变量名字是最简单的表达式。 表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。 2-3-3:算术运算符 运算符主要有: 算术运算符 关系运算符 逻辑运算符 位运算符 条件运算符 2-3-3:算术运算符 算术运算符是数学上最常见的一类运算符,包括+、-、×、÷等。 运算时要按照运算符的优先级进行。见表2-3 算术运算符包括一元运算符和二元运算符。 一元运算符:运算符只需要一个操作数 二元运算符:运算符的两侧都有操作数 2-3-3:算术运算符 2-3-3:算术运算符 ★注意★ 前递增是指被前置的变量先递增后,再指定给另一个变量。 后递增则是指先将变量进行赋值运算,然后再递增。 前递减与后递减亦是同样规则。 2-3-4:关系运算符 指两个操作数通过某种关系运算符联系在一起 2-3-4:关系运算符 2-3-5:逻辑运算符 条件运算符 有一种运算符为三元运算符,即“?:”,它的一般格式为: expression?statement1:statement2 例如: result= sum==0?1:num/sum; 该语句的含义是:如果sum==0,则result=1,否则result=num/sum。 2-3-6:赋值运算符 “=”为赋值运算符,表示将右面的数值赋给左边的变量。 另外,对于二元赋值运算符可以采用另外一种形式; 例如,i=i*6; 可以改写成:i*=6; 2-4:数据类型的转换 Java中我们对变量定义时需要指名其数据类型,同时也允许对变量的类型进行转换。 转换时要注意以下两点: 简单数据类型不能与复合数据类型之间进行转换。 简单数据类型中的布尔型不能与数字型互相转换。 数据类型的转换可以分为: 自动类型转换 和 强制类型转换 强制类型转换转换的一般形式为: (数据类型)表达式; 补充(字符型:char型): 每个char型变量占16位,两个字节,用来表示一个字符(如课本P23表2-1所示) 在Java中字符的编码不是通常的ASCII码,而是采用Unicode编码。 Unicode编码字符是用16位无符号整数表示,即有216个可能值。即表示0--65535个字符。 一般情况下,char型字符常量被表示为用一对单引号包含的单个字符。 三、堂上提问及例题讲解 (10分钟) 课后作业 P43 1,2
学科 课题 周数 Java面向对象程序设计基础 实训2基本数据类型、表达式和基本结构 2 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1、掌握java的各种数据类型 2、熟悉运算符和表达式 3、学会编写简单的程序
教学重点 1. 掌握java的数据类型,熟悉定义变量、赋值的方法。 教学难点 1. 不同类型的数据之间赋值的规律。 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 1.分析ABCDEF行,上机编译并运行以下程序 public class Test{ public static void main(String args[]){ int no=(11+20)*3/5; //A行 System.out.println(“no=”+no); }} no++; //B行 System.out.println(“no=”+no); boolean bool=false; //C行 bool=true&&!bool; //D行 System.out.println(“bool=”+bool); byte bValue=0x10; //E行 System.out.println(“bValue=”+bValue); bool=(no>bValue); //F行 System.out.println(“bool=”+bool); }} 2、编写如下程序 计算并输出一个给定底和高的直角三角形的斜边长 (提示:length=Math.sqrt(base*base+height*height)) 实验要求: 1、分析程序中的A行~F行各运算符的作用,并和程序输出结果比较 2、首先将base,height和length变量都定义为double类型,编译并运行程序,其次,将length类型更改为float类型后(其他保持不变),再编译该程序,看看出现的结果有什么不同,并分析原因 三、讲解例题 (10分钟) 教学过程详见课件 课后作业 实验报告2。
学科 课题 周数 Java程序设计 3.1条件执行语句 3.2循环控制语句 3 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1. 掌握选择结构语句 if、if--else、if嵌套、switch语句 2 掌握循环结构语句 While、 do—while for循环、循环嵌套 教学重点 1. 掌握选择结构语句 教学难点 1. 掌握循环结构语句 实验仪器及教具 多媒体教学系统 教 学 过 程 一、教学导入 (5分钟) 复习有关java基本数据类型、表达式和基本结构,引入新课。 二、讲授新课 备 注 3-1:选择结构程序设计 在程序中,程序的操作体现为语句;语句的书写顺序通常是程序的执行顺序。语句可以是单一的一条语句:也可以是用大括号{ }括起来的一个复合语句(一般称之为块--blocks)。 3-1-1:简单if语句 最常用的条件判断语句是通过if语句,产生一个或多个分支。根据条件进行判断,如果表达式为真,执行语句块1;否则继续向下执行。 if语句的格式为: if(条件) { 语句块1; } 使用if语句时一定要注意: 在写程序的时候,一定要注意大括号“{ }”的位置。 建议不论if语句要控制的是语句序列还是单个语句,均使用大括号,这样有利于代码的可读性,避免错误,易于维护。 【补充例题】 见源代码:Condition1.java 【程序解析】 语句Integer.parseInt(args[0]);是将“args[0]”有字符串转换成整型。 即:从键盘(命令行)输入数据进行计算 >java Condition1 55 11 3-1-2:if--else语句 if—else语句的格式为: if(条件) { } else { 语句块2; 语句块1; 教学过程详见课件 } 3-1-2:if--else语句 【例题3-2】 见源代码:Example3_2.java 3-1-3:if语句的嵌套 在解决复杂的问题时,并不是一个简单的条件就能解决; 有时候需要多个条件来决定程序的执行情况,这时候我们需要使用if语句的嵌套的形式。 if—else if—else语句的格式为: if (布尔表达式 A){ 语句A区块 } else if(布尔表达式 B){ 语句B区块 } … else if(布尔表达式n) { else { } 【例题3-3】 见源代码:Example3_3.java Java规定,else总是与离它最近的if配对。如果需要,可以通过“{ }”来实现。 3-1-4:switch语句 switch语句的格式为: switch(switch 表达式){ case value1: 语句块1; break; 语句m; 语句n;} case value2: 语句块2; break; …… case valueN: 语句块N; break; default: 语句块; } 使用switch语句必须注意如下问题: ①switch 表达式的返回值类型必须是这几种类型之一:int,byte,char,short。 ②case子句中的值value1……valueN必须是常量,而且所有case子句中的值应是不同的。 ③default子句是任选的。当表达式的值与任意一个case子句中的值不匹配,就执行default语句。如果没有default语句,则程序不作任何操作,直接跳出switch语句。 ④break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。 【例题3-4】 见源代码:Example3_4.java 思考:month=6,程序的运行结果是多少? 【例题3-5】 见源代码:Example3_5.java 【程序解析】 注意: 程序中如果没有break语句,程序怎么执行? 一定要理解break语句的作用 3-2:循环结构控制 循环语句的作用是在一定条件下,反复执行一段程序代码,直到满足终止条件为止。 Java语句提供的循环语句有: while语句 do……while语句 for语句。 3-2-1:for语句 for循环语句是使用比较频繁的语句,它提供了在某个值域间重复操作的方法。 语法 : for(控制变量初始值;继续条件;控制变量调整值 ) { //循环主体 } 3-2-2:while语句 while格式如下: while(继续的条件 ) { // 循环主体 ; } 如果继续的条件为真,则执行循环体的语句。如果继续的条件为假,则执行循环体后面的语句。 【例题3-9】 见源代码:Example3_9.java 【程序解析】 j的初始值为0,j++>1的运算是j先判断是否大于1,然后j再加1,所以,本例中,因为j不大于1,所以条件不满足,就不能执行循环体中的语句。 (更改课本P47中的错误!!) 3-2-3:do…while语句 do…while循环与while循环的不同在于:while是先检查条件是否成立后执行语句,而do…while是先执行语句后再检查继续的条件。 语法: do{ //循环主体 }while(继续条件 ); 嵌套循环 有时会因一些较复杂的求值运算,需要有嵌套式循环,如自身嵌套或各种循环可以相互嵌套。 【例题3-7】 见源代码:Example3_7.java 【例题3-11】 见源代码:Example3_11.java 对于嵌套循环,要注意以下两点: 先执行内循环,内循环结束之后才能执行外循环 3-2-4:跳转语句 goto语句由于在程序设计中破坏原有程序的结构,于是取消了goto语句。 Java语言中,跳转语句包括: break语句; continute语句; 3-2-4:break语句 break 语句的使用就是跳出指定的块,并从紧跟该块的第一条语句出执行。 break语句有两种情况: 带标号的情况; 不带标号的情况; 带标号的情况: 例如: a: {……. // 标记代码块a b: {……… // 标记代码块b c: {……… // 标记代码块c break b; // 跳到第9行开始执行 ……… // 此处语句不会被执行 } // c …………… // 此处语句不会被执行 } // b ……. } //a 其中:a、b、c为标号。 不带标号的情况: break语句终止break所在的循环,转去执行其后的第一条语句。 【例题3-12】 见源代码:Example3_12.java 3-2-4:continue语句 continue语句用来结束本次循环,跳过循环体中下面的尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。 break语句与continue语句的区别是: continue语句只结束本次循环,而不是终止整个循环的执行。 而break语句则是结束整个循环语句的执行。 【例题3-14】 见源代码:Example3_14.java 【程序解析】 执行程序的时候,首先执行内循环即for循环,在内循环中,通过continue语句结束本次循环,接着跳到外循环中执行判断条件。 将第9行中的continue改为break,结果会如何 三、堂上提问及例题讲解 (10分钟) // 第9行,语句从此处开始执行 课后作业 P55 4
学科 课题 周数 Java程序设计 实训3 流程控制语句 3 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1、掌握条件语句的使用 2、熟悉循环语句的使用 3、学会编写简单的程序,同时,注意跳转语句的作用 教学重点 1. 条件语句的使用。 教学难点 1. 循环语句的使用 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 1、将下面的switch语句,利用if嵌套来完成相同的功能 Switch(grade){ case 7: case 6:a=1; b=22; break; case 5:a=33; b=44; break; default:a=55; break;} 2、编写如下程序 试利用switch语句,将学生按照成绩进行分级:0—59:E级、60--69:D级、70--79:C级、80--89:B级、90--100:A级 3、编写如下程序 利用while循环、for循环计算1+3+5+…..99的和 三、讲解例题 (10分钟) 教学过程详见课件 课后作业 实验报告3。 学科 Java程序设计 课题 3.4对象与指针 3.5类与结构 3.6继承、多重继承 周数 4 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 3.3方法的定义和使用 3.4Math类的数学操作方法 教学重点 1. 掌握方法的定义和使用 教学难点 1. 掌握方法的定义和使用。 实验仪器及教具 多媒体教学系统 教 学 过 程 一、教学导入 (5分钟) 复习有关条件语句和循环语句的使用的方法,引入新课。 二、讲授新课 3-3:方法的定义和使用 针对方法的定义和使用,需要掌握如下三部分: 什么是方法? 方法:与过去常说的子程序、函数等概念相当。 在程序中,方法是不可缺少的,例如,我们接触的第一个程序中的main方法。 方法可以完成特定的功能; 方法一旦定义,我们就可以在不同的程序段中多次调用,这样可以增强程序的可读性,提供编程效率。 ★★注意★★: Main()方法是区别于其他的一般的方法。 即Main()方法不需要声明就可以直接使用。 备 注 Main()方法是整个程序的入口,所以其他方法需要在Main()方 法中被调用才可以执行。 教学过程详见3-3-1:方法声明以及参数 Java程序中,方法只能在类中声明; 格式如下: [修饰符] 返回类型 方法名([参数表]) { } 对上述格式的说明: 【例题3-15】 见源代码:Example3_15.java 【程序解析】 x,y分别为形式参数 sun()方法的返回类型是int型 3-3-2:方法调用 调用方法,即执行该方法,其调用的形式有两种: 方法表达式 方法体; 课件 方法语句 方法表达式 对于有返回类型的方法,我们可以将此方法作为一个表达式或者是一个具体的数值来使用,我们可以在main()方法中直接调用。 调用的方式为: 方法名 ([实际参数表]) 方法语句 对于空返回类型的方法,我们可以将此方法作为一条语句直接在程序中使用; 形式如下: 方法名([实际参数表]); 即以独立语句的方式调用该方法。 【例题3_16】 见源代码: Example3_16.java 【程序解析】 实际参数可以是常量,表达式,变量; 实际参数的个数、顺序、类型要和形式参数一致; 调用完毕,要回到调用该方法的语句的下一句处继续执行; 3-3-3:参数传递 参数传递主要是指实际参数向形式参数传递数值的过程,如在【例题3_17 】中,实际参数的值“ 5”传递给形式参数x; 如果这时候改变形式参数的值,实际参数是不会改变的。因为形式参数和实际参数在内存中被分配到不同的存储单元。 【例题3_17】 见源代码:Example3_17.java 【程序解析】 通过程序的运行结果,我们可以看出: 实际参数即a,b的值不受形式参数x,y的值的影响,即使形式参数的值改变了,但是实际参数的值不会改变; 3-3-4 return语句: 在方法定义中,当返回类型不为空返回类型即void时,在方法体中至少有一条return语句。 return语句用于将方法所运算的值返回,并终止方法的执行,然后回到调用方法的程序中的位置。 return 语句的语法形式为: return 表达式; 3-3-4 return语句: 举例: int getNumber(int x) { //方法体开始 int y; y=x; return y; //将y的值作为getNumber方法的返回值 } //方法体结束 3-4 Math类的数学操作方法: Java中,常用的数学工具包----java.lang.Math类提供了常用的方法用于帮助执行基本数学函数的运算,如三角函数、求随机数等。 【例题3.18】 见源代码:Example3_18.java 【程序解析】 【例题3.19】 见源代码:Example3_19.java 【程序解析】 三、堂上提问及例题讲解 (10分钟) 课后作业 P55 4
学科 课题 周数 Java程序设计 实训3 方法的定义和使用 4 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1.掌握方法的定义格式。 2.熟悉形参和实参的传递关系。 3. 学会编写简单的程序,掌握方法的调用过程
教学重点 1. 掌握方法的定义格式。 教学难点 1. 熟悉形参和实参的传递关系。 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 1、将下面的程序进行补充,使程序编译运行通过后的结果如下: public class Caulcu12 { //main()方法 public static void main(String args[]){ square(78.0f,”莉莉”); //调用square方法 } //输出姓名和成绩的方法 static void square(//添加代码){ //请在此处补充程序代码 } } 程序输出的结果为: 我的姓名是:莉莉 我的成绩为:78.0 2、编写如下程序 教学过程详见如果一个3位数的个位数、十位数和百位数的立方和等于该自课件 身,则称该数为水仙花数,编写方法判断一个3位数是否是水仙花数 提示:1)上述功能用一个自定义的方法来实现,同时在mian方法中调用该方法 2)假设一个3位整数m,则 int i=m/100; //取得百位 int j=m/10%10; //取得十位 int k=m%10; //取得个位 3、编写数组的排序程序 编程对10个整数进行排序(从大到小) 三、讲解例题 (10分钟) 课后作业 实验报告4。 学科 课题 周数 5 java程序设计 4.1数组 4.2字符串 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1. 掌握一维数组、二维数组的声明、初始化 2 掌握数组的基本操作:引用、输出 3 掌握字符串、字符数组 4 掌握字符串的常用操作 教学重点 1. 掌握数组的基本操作 教学难点 1. 掌握字符串的常用操作。 实验仪器及教具 多媒体教学系统 教 学 过 程 一、教学导入 (5分钟) 复习有关流程控制语句,引入新课。 二、讲授新课 什么情况下使用数组? 例如,我们需要对三个同学的成绩进行处理,那么我们只需要三个变量,分别为c1,c2,c3。 但是,如果对50个同学的成绩进行同样的操作,就需要50个变量,这是很不方便的,而且编程效率也很低。 这时候,我们就可以考虑使用数组来解决这样的问题。 什么是数组? 数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每一个元素都具有相同的数据类型。 数组是用一个统一的数组名和下标来唯一的确定数组中的元素。 使用数组需要注意的问题: 一个数组中的所有元素具有相同的数据类型。 数组名应该符合Java语言标识符的命名规则。 存放的。 数组中的任何一个数据可以通过数组名和数组下标来确定。数组的下标从0开始。例如:count[5]表示数组中的第6个元素。 数组的长度就是数组中可以存储的元素的个数。例如语句int count[ ]=new int[50];表示数组的长度为50。 4-1 一维数组 数组用一个变量名表示一组数据,每一个数据称为数据元素,各元素通过下标来区分。 如果用一个下标就能确定数组中的不同元素,这种元素称为一维数组。否则为多维数组。 4-1-1 一维数组的声明 同其他变量一样,在使用数组之前,必须先声明它。 数组声明的格式如下: 类型 arrayName[ ]; 格式说明: 备 注 数组中的元素是有序排列的。即它们在内存中是按照一定的顺序教学过程详见课件 类型:可以是Java中任意的数据类型,包括简单类型和复合类型。 arrayName:为一个合法的标识符; [ ]:指明该变量是一个数组类型的变量。 另外一种表示:类型 [ ] arrayName; 数组声明时注意的问题: Java在数组声明的时候,并不为数组元素分配内存,因此[ ]中不用指出元素的个数,即数组长度; 数组声明之后,还不能访问任何元素,否则程序编译的时候就会出现错误。因为数组在声明之后,必须经过数组初始化,才能引用数组的元素。 4-1-2:一维数组初始化 数组经过初始化后,其元素的个数、所占用的存储空间就决定下来。 数组的初始化的方式有两种: 通过new操作符初始化数组 通过给元素赋初值进行 通过new操作符初始化数组 用new关键字初始化数组,只是指定数组元素的个数,为数组元素分配存储空间,并不给数组元素赋初值。 初始化格式如下: 数组名=new 类型标识符[元素个数]; 通过给元素赋初值进行初始化 声明数组的同时,给数组元素赋初值。所赋初值的个数决定数组元素的数目。 格式如下: 类型标识符 数组名[]={初值表}; 其中,初值表用逗号隔开初始值。 例如: int score[]={65,43,21,23,67,89,56}; 另外,如果想知道数组的个数,即数组的长度,其格式如下: 数组名.length 复合类型数组的定义 第一步:声明 例如:String arrayName[ ]; //String是一个复合数据类型 第二步:分配内存空间,即定义数组大小 arrayName=new String[arraySize];//使用new关键字 第二步:为每个数组元素开辟内存空间 arrayName[0]=new type(paramList) arrayName[arraySize-1]=new type(paramList); 一维数组元素的引用 当定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每个元素了。 数组元素的引用方式为: arrayName[index]; 其中,index为数组下标,它可以为整型常数或表达式,下标从0开始。一直到数组的长度减1。 如:a[3],b[i],c[6*j]等。 4-1-2 多维数组 在处理像行列式、矩阵、二维表格这样的数据时,需要两个下标,即行标和列标,这时,我们需要二维数组。 二维数组的声明和初始化与一维数组类似。 5-2-1:二维数组的声明 格式如下: 类型标识符 数组名[][]; 例如: int a[][]; 4-2-2:二维数组的初始化 通过new操作符初始化: 数组名=new 类型标识符[行数][列数]; 例如: int a[][]; //数组声明 a=new int[3][4]; //数组初始化 通过赋初值初始化: 例如: int grade[][]={{10,20,30}, {40,50,60}, {23,45,67}, {33,44,55}, {55,66,77}}; 4.1.3 关于args[ ] Java应用程序中,每一个程序里面都出现了“public static void main(String args[])”。 其实main方法是一个特定的方法,是Java程序执行的入口点,是加载Java程序后,有Java运行时系统自动调用的 所以,我们要注意不能写错一点。因为,写错一点可能就变成了普通的方法,编译可以通过,但执行时会报错。 关于args[ ] “String args[]”表示main方法的入口参数,是一个字符串数组。此字符串数组中的元素就是在执行程序时输入的命令行参数,有几个参数,数组的长度就是几。 输入命令行参数的格式如下: C:\\>java 类名 参数1 参数2 参数3 提示:各个参数之间用空格作为分隔符。 4-2:字符串 字符串是字符组成的序列,是编程中常用的复合数据类型。 例如:String s=\"how are you!\"; 像整型等简单数据类型的数据一样,字符串也有常量和变量之分。 4.2.1 字符串常量 是用位于一对双引号之间的字符序列。如: String s=\"how are you!\"; 4.2.2:字符串变量以及初始化 字符串变量必须经过声明和初始化的过程,才可以使用。 1、字符串变量的声明和初始化 格式如下: String 字符串变量名; 字符串变量名=new String( ); 或者: 将上述两条语句合为一条; String 字符串变量名=new String( ); 字符串变量 例如:声明并且初始化字符串s的方式为: String s; s=new String( ); 或者: String s=new String( ); String ss=“HELLO”; 字符串赋值 声明并且初始化了字符串变量之后,就可以赋值了。 例如: s1=\"how are you! \"; s2=s1; s3=\"a lot of\"+s2; 字符串输出 通过使用println()和print()语句输出字符串。 s1=\"how are you! \"; System.out.println(s1); 例如: 4-2-3:字符数组与字符串 字符数组是指数组中的每个元素是字符类型的数据。而字符串是字符组成的序列,所以我们可以通过字符数组来生成字符串。 例如:表示字符串:“China“,可以使用字符数组: char country[ ]={'C','h','i','n','a'}; 举例:使用字符数组生成字符串 现在我们使用不同方法生成字符串“abc”。 方法一: 使用String( char chars[ ] ); 其中,chars为变量名,chars[ ]为字符数组。 例如: char chars1[ ]={'a','b','c'}; // 生成字符数组char1 String s1=new String(chars1); //生成字符串s1, 其值为\"abc\" 方法二: 使用String( char chars[ ],int startIndex,int numChars ); 其中,chars为变量名,chars[ ]为字符数组。startIndex表示字符数组的下标,numChars表示提取的字符的长度。 例如: char chars2[ ]={'a','b','c','d','e'}; // 生成字符数组char2 String s2=new String(chars2,0,3); 4-2-4:字符串的操作 (1)length( ):取得字符串的长度 例如: s1=\"how are you! \"; int i=s1.length( ) ; (2)charAt(int index):表示返回字符串index位置上的字符 其中index的范围为0--length-1。下标从0开始。 如:String s=\"abc\"; System.out.println(s.charAt(2)); //显示字符串中索引为2的字符:c (3)indexOf( ):表示在指定的字符串中检索特定字符或字串 如: String s=\"abcdefgh\"; System.out.println(s.indexOf(\"d\")); //显示字符串中字符d第一次出现的位置。 System.out.println(s.indexOf(\"cd\")); //显示字符串中子串cd第一次出现的位置。 (4)subString(int index1,int index2):表示从字符串中提取一个以上的字符 如:String s=\"I am a student\"; String sub=s.subString(2,4); //显示字符串中从2到4 之间的字串,并且将其提取的字串赋值给sub。sub=\"am\" System.out.println(sub); 注意以下几点: 计算字符串的长度时,空格也要计算在内。 字符串的下标从0开始。所以上例中字符'y'的下标为8。 4.2.5字符串比较: (1)equals( )方法的使用:注意大小写的不同 例如:s1=\"student\"; boolean b=s1.equals(\"Student\";); 例如: String s1=\"abc\if(s1.equals(s2)) System.out.println(\"不正确,因为空格也是一个字符!\"); System.out.println(\"空格不能忽略!\"); else (2)equals( )方法和”==”操作符的区别 4.2.6 字符串转换 与其他数据类型的转换 【例题4.10】 见源代码:Example4_10.java 【程序解析】 熟练掌握各种数据类型与String型之间的转换方法,并且注意每一种转换方法的大小写法。 三、堂上提问及例题讲解 (10分钟) 课后作业 P61 4 学科 课题 java程序设计 实训5 数组和字符串的使用 周数 5 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1、掌握字符串的定义和使用方法 2、学会编写简单程序,如数组排序、字符串数组等 教学重点 1. 掌握字符串的定义和使用方法 教学难点 1. 掌握字符串的定义和使用方法 实验仪器及教具 多媒体教学系统 教 学 过 程 1、对下面的程序,分析其原因:下列哪些语句能够正确生成5个空字符串 1)String a[]=new String[5]; for (i=0;i<5;a[i++]=“ ”) ; 2)String a[]={“ ”, “ ”,“ ”,“ ”, “ ”}; 3)String a[5]; 4)String []a=new String[5]; for (i=0;i<5;a[i++]=null) ; 2、编程使用字符数组和字符串分别输出字符串“ABCDE”. 实验要求: 1、在编程中使用最多的应该是数组,所以通过本次实验,掌握备 注 简单数据类型的数组和复合数据类型的数组的声明、初始化以及引 用 教学过程详见2、关于字符串,通过本次实验,掌握字符串和字符数组的区别。 课件 三、堂上提问及例题讲解 (10分钟) 课后作业 实验报告5
学科 课题 周数 java程序设计 5.1对象面向对象的概念 5.2类与对象的概念 5.3类的实现 5.4对象的创建与引用 6 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1 掌握类的概念、定义; 2 掌握对象的概念、定义;
教学重点 1. 类的概念、定义 教学难点 1. 对象的概念、定义。 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 一、教学导入 (5分钟) 复习有关数组和字符串的内容,引入新课。 二、讲授新课 5-1:面向对象的概念 什么是面向对象? 面向对象是一种新兴的程序设计方法,或者它是一种新的程序设计范型,其基本思想就是使用对象、类、继承、封装、消息等基本概念来进行程序设计。 例如:在前面所看到的每一个例题都使用了关键字“class”,它就是面向对象程序设计方法中所使用的“类”。 我们如何运用面向对象的编程思想? 作为程序设计人员,我们需要从现实生活中抽象出类和对象,然后将类和对象应用到我们的编程中来解决实际问题。 例如:我们要开发一个商品销售系统,首先,我们从这个系统中,可以抽象出一个类,那就是商品类 那么进一步分析…… 商品类 属性(状态): 编号、名称、单价、 货架数量 方法(行为):售出、补充、价格更新 商品类的Java语言描述 将刚才的描述改为程序设计语言来描述,会是什么样? 5-2:类和对象的概念 总结一下:什么是类? 将具有共同特征和行为的对象归为一个“类”,如现实生活中的“汽车”类、“动物”类、“人”类等。 也就是说,例如,从现实生活中抽象出“商品”这样的一个类,而且在“商品”类中有多个对象,每个对象都具有共同的特征和共同的行为。 在面向对象程序设计中,将类的特征和行为分别命名为属性和方法。 具有共同特征和行为的对象 对象的概念 把生活所在的真实世界看作是由许多大小不同的对象所组成的。对象可以是有生命的个体,比如一个人或一只鸟。对象也可以 教学过程详见课件 是无生命的个体,比如一辆汽车或一台计算机。 对象也可以是一件抽象的概念,如天气的变化或鼠标所产生的事件。 对象的概念 对象有两个特征:状态和行为。例如:一个人有他的身高或体重作为状态,并有他的行为——如吃饭、睡觉、工作、学习。 在程序设计中,对象的概念由真实世界对象而来。对象将状态保存在变量里,而行为则借助方法来实现 。 类与对象的关系 类是对对象的抽象,但是类不能完全体现出每一个对象的状态,因为有的对象具有“特性”,我们可以通过继承(见第6章)来对类增加新的属性和方法。 5-3:类的实现 在Java语言中,用户可以自己定义一个类。类作为复合数据类型,其实现包括两部分内容: 类声明和类体 格式如下: class 用户自己定义的类名 { //类声明 } 上述格式说明: import包:引入包中的类。 类修饰符:主要有四个修饰符,public、abstract、final、private。 class为关键字,xxxclass为类名,命名遵循Java标识符的命名规则。 extends为继承关键字,implements 为接口关键字。 类体是类声明中用大括号所括起来的部分,它包括变量和方法,是类的主体部分。 【例题5.1】定义一个学生类 见源代码:Students5_1.java 【程序解析】 在公共类Students5_1中,类的主体部分包括私有变量number、name、nClass,以及三个成员方法。整个类用大括号“{ }”括起来。 // 成员变量 // 成员方法 5.3.1 类的修饰符 修饰类的修饰符有4个,分别为: public(公共类) Abstract(抽象类) Final(最终类) private (私有类) 类修饰符:public public提供给其他类完全的存取权限。 一个程序里只能有一个类被修饰为public,否则编译会出错。 存储源文件时,必须是用public修饰的类名(xxxClass)来命名 若程序中没有任何public类,则文件名可任取。而如果文件名是程序中的一个类名, 则 该类被视为public。 类修饰符:final final表示此类为“最终”类,别的类不能继承此类,其方法也不能被覆盖。 例如System类即为final类. 两个修饰符public+final的意思是:此final类可被import来引用,但不能被继承。 注意:final与abstract(抽象)不能复合来用,因为二者是相冲突的。 类修饰符:private以及abstract在第6章和第7章中详细讲解 5.3.2:类的成员变量 1、成员变量 什么是成员变量? 成员变量是在类的内部、方法定义的外部所定义的变量,其作用域是整个类,也就是说,同一个类中的所有方法都可以对其访问。 什么是局部变量? 在方法内部定义的变量为局部变量,它的作用域仅仅只能在方法体内。 例如: class Cuboid{ //成员变量 float a; float c; //长方体的长 //长方体的高 float b; //长方体的宽 public void getVolum( ){ //局部变量 } } 2、成员变量的修饰符 public、protected、private static:用此修饰的变量为类变量(见5.5) final:最终变量,一般用来定义一个常量。 一旦最终变量被赋值,则它在整个程序执行过程中不能改变。 如:final double PI=3.1415926; 如果改变了其值,则在编译程序的时候就会出现错误。 变量的作用域 在程序中,要使用某一个变量,必须对其先声明。 变量的声明语句可以在程序中的任何位置,只要在变量的使用之前声明就可以。 但是,变量的声明语句的位置决定了变量的作用域。 如下图所示。 5-4:对象的创建与引用 有了类,就可以利用类来创建对象了。由类创建对象的过程成为类的实例化。每一个对象是类的一个实例。 由类所创建的这多个对象都具有类所定义的那些属性和行为。然而,由同一个类所创建的不同对象的同一个属性的值可能不同。 通常一个对象的生命周期包括: 创建 使用 清除 在对象的创建过程中,又包括三步: 对象的声明 对象的实例化 对象的初始化 对象的声明 格式如下: 类名 对象变量名; 例如:我们从Students类来声明对象: float v; //长方体的体积 v=a*b*c; Students s1; 注:声明并不为对象分配内存空间,而只是分配一个引用空间。 对象的实例化与初始化 对象实例化是通过关键字new操作完成的。 实例化一个对象后,就把存储空间分配给这个对象,其中包括为对象的成员变量分配存储空间。 一个类的不同对象分别占据不同的内存空间,因此,改变其中的一个对象的状态不会影响其它对象的状态。 格式如下: 对象变量名=new 类名(参数1,参数2,……); 例如:创建类Students的对象s1 Students s1; //对象s1的声明 s1=new Students(); //对象的实例化 或者: Students s1=new Students(); Students s2=new Students(234,\"黎明\",\"2004法学专业\"); 5-4-2:对象的引用 创建了对象之后,我们就可以使用对象了。对象的使用主要包括: 引用对象的成员变量 调用对象的成员方法。 通过运算符“.”可以实现对变量的访问和方法的调用。 格式如下: 对象名.成员变量名; 对象名.成员方法名([参数表]); 例如:在例5.1中,创建了Students5_1类的对象s1,然后引用成员变量,给这些变量赋值或取出这些变量的值。 s1.number=456; //创建对象s1,给number赋值为456 或者: int x=new Students5_1().number; //将number的值赋值给变量x 5.4.3 对象的清除 当不存在对一个对象的引用时,该对象成为一个无用对象。Java运行时系统通过垃圾收集周期性的释放无用对象所使用的内存,完成对象的清除。 当然,我们也可以在程序中使用 System.gc( ); 对无用对象进行清除。 【举例】通过此程序,学会如何创建对象,如何引用对象 一起来编写程序!!(AA.java) 【程序解析】 (1)想一想,此程序不使用对象,在main方法中是否可以直接调用其他方法? (2)想一想,将此程序设计成两个类,怎么改? 三、讲解例题 (10分钟) 课后作业 P75 4
学科 课题 周数 java程序设计 实训6 类和对象的使用 6 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1 掌握类和对象的定义
教学重点 1. 掌握类和对象的定义 教学难点 1. 掌握类和对象的定义 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 1、判断下面的程序是否有错误,分析其原因: public class Fred{ int x; private void Fred(int val){ x=val;} public Fred(int val){ x=val;}} 2、编制程序,给定圆的半径和高度,计算圆柱体的体积,利用引用对象方法的形式表示。 (提示:圆柱体的体积公式为vol=Math.PI*r*r*h) 3、设计并且测试一个表示图书馆的Book类,它包含图书的书名、作者、月销售量等属性,另有两个构造方法(一个带参数,一个不带参数)和两个成员方法setBook()(用于设置书名、作者、月销售量等属性)及printBook()(用于输出书名、作者、月销售量等数据) (提示:书名、作者为(String)的变量;月销售量(int) 实验要求: 1、Book类的带参数的构造方法带有3个参数,分别为书名、作者、月销售量 2、Book类中,通过main方法调用setBook()和 printBook() 三、讲解例题 (10分钟) 教学过程详见课件 课后作业 实验报告6 学科 java程序设计 课题 5.5 Static修饰的方法和变量的使用 5.6引用问题 周数 7 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1. 掌握类的成员变量; 2 掌握类的成员方法的引用和修饰; 教学重点 1. 掌握类的成员变量; 教学难点 1. 掌握类的成员变量; 实验仪器及教具 多媒体教学系统 教 学 过 程 一、教学导入 (5分钟) 复习有关类和对象的有关内容,引入新课。 二、讲授新课 5-4-4:构造方法 什么是构造方法? 构造方法不用于一般的方法,构造方法名必须与其类名相同;没有返回值(不用void修饰)只能在创建对象时使用对对象内容做一些初值设置(初始化) 初始化 构造方法的格式: [修饰符] 类名([参数表]){ //构造方法主体(初始化操作) } 例如: class Point{ int x,y; Point( ) { //不带参数的构造方法 x=0; y=0; } 构造方法是一个方法,那么它何时被调用呢? 构造方法只是在创建对象时被调用。 【例题5.4】构造方法举例见源代码: Example5_4.java 【程序解析】 (1)不带参数的构造方法可以省略,当创建对象时,如:第24行,系统会自动调用不带参数的构造方法。 (2)注意:如果同时有第24行和第25行,则不带参数的构造方法就不能省略,否则编译就会出现如下错误: 【例题5.5】构造方法举例见源代码: } x=a; b=y; } Point(int a, int b){//带参数的构造方法 备 注 教学过程详见课件 Fred.java(课本例题) 【程序解析】 构造方法与一般成员方法的不同 5.5 static修饰的方法和变量的使用 成员方法包括: 实例方法:没有用static修饰的方法 类方法: 用static修饰的方法,类方法也被称之为静态方法。 成员变量包括 实例变量:没有用static修饰的变量。 类变量: 用static修饰的变量,类变量也被称之为静态变量。 编写程序的时候,需要注意: 实例方法可以使用类中所有的变量与方法,也就是类中所有的成员,不管它们是否被static修饰。 使用类方法有一点要特别注意的,那就是在类方法中只能使用类变量与类方法,也就是只能使用static修饰的变量与方法,而不能使用其余的实例变量。 如果要在类方法中使用了实例变量或者实例方法,就需要使用〔对象〕.〔数据〕的方式。这一点是写Java程序常犯的错误。 5.6 引用问题 5.6.1 调用不赋值的基本数据类型的成员变量 【例题5.8】见源代码: Example5_8.java 【程序解析】 (1)没有通过程序给成员变量赋初始值,这是因为系统自动为其分配了初始值。所以程序最后的运行结果为系统初始值。 (2)虽然系统会自动分配初始值,但建议尽量编写代码初始化所有的变量,这样做可以提高代码的可读性。 5.6.2:调用不赋值的引用型的成员变量 【例题5.9】见源代码: Example5_9.java 【程序解析】 (1)对于对象引用型成员变量(如:Sring型变量即为引用型变量),系统也会自动为其分配初始值。其初始值为null,表示此引用没有执行任何对象。 (2)注意:字符串(String)类型的空引用(null),与空字符串不同,空引用表示没有指向任何对象,空字符串是内容为空的字符串对象。 5.6.3:调用不存在的方法或者变量 【例题5.10】见源代码: Example5_10.java 【程序解析】 如果试图通过引用调用其所在类中没有定义的方法,编译时将会报错。 5.6.4:调用数组的空引用 【例题5.11】见源代码: Example5_11.java 【程序解析】 在Java中数组也是对象,访问数组也必须通过指向数组对象的引用。数组中的元素是按照下标访问的,所有,如果空的数组引用访问数组元素就会抛出引用为空的异常。 。 总结: 什么是类?如何定义一个类? 类中包含哪几部分?分别是什么? 什么是对象?如何创建对象? 什么是构造方法?有何特点? 如何对对象进行初始化? 何谓成员变量?局部变量?有何不同? 类变量和类方法与实例变量、实例方法的不同。 上机编程常见问题: 类的定义出错误! 对象如何使用? 构造方法何时被调用? 成员变量包括:类变量、实例变量 成员方法包括:类方法、实例方法 一个源代码包含了多个类,编译之后,你的文件夹中包含几个类文件? 三、堂上提问及例题讲解 (10分钟) 课后作业 P75 5 学科 课题 周数 7 java程序设计 实训6 类和对象的使用 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1 掌握类和对象的定义 教学重点 1 掌握类和对象的定义 教学难点 1 掌握类和对象的定义。 实验仪器及教具 多媒体教学系统 教 学 过 程 1、判断下面的程序是否有错误,分析其原因: public class Fred{ int x; private void Fred(int val){ x=val;} public Fred(int val){ x=val;}} 2、编制程序,给定圆的半径和高度,计算圆柱体的体积,利用引用对象方法的形式表示。 (提示:圆柱体的体积公式为vol=Math.PI*r*r*h) 3、设计并且测试一个表示图书馆的Book类,它包含图书的书名、作者、月销售量等属性,另有两个构造方法(一个带参数,一备 注 个不带参数)和两个成员方法setBook()(用于设置书名、作者、月销 售量等属性)及printBook()(用于输出书名、作者、月销售量等数据) 教学过程详见(提示:书名、作者为(String)的变量;月销售量(int) 实验要求: 1、Book类的带参数的构造方法带有3个参数,分别为书名、作者、月销售量 2、Book类中,通过main方法调用setBook()和 printBook() 三、讲解例题 (10分钟) 课件 课后作业 实验报告6
学科 课题 周数 8 java程序设计 6.1封装性 6.2继承性 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1. 掌握类的封装:访问权限修饰符public、protected、private、friendly; 2 掌握类的继承:继承的概念 教学重点 1. 掌握类的封装 教学难点 1. 掌握类的封装 实验仪器及教具 多媒体教学系统 教 学 过 程 一、教学导入 (5分钟) 复习有关类和对象的有关内容,引入新课。 二、讲授新课 由于Java语言在设计时所采用的编程思想就是立足于面向对象的。所以我们将进一步讲解面向对象的高级编程,这一部分也是面向对象编程的深入部分。 Java的面向对象的特性主要包括: 类的封装性 类的多态性 类的继承性 6-1:类的封装 封装的含义 封装是一个面向对象的术语,其含义很简单,就是把东西包装起来。 换言之,成员变量和方法的定义都包装于类定义之中,类定义可以看成是将成员变量和方法封装起来。 6-1:类的封装 如何封装? 我们知道,对象包括属性和方法,所以Java为对象提供四种访问权限:public 、protected、private、friendly。 这些修饰符的作用是对类的成员变量和成员方法施以一定的访问权限的限定,实现类中成员在一定范围内的信息隐藏,从而达到封装的目的。 封装的使用及其优点 尽管技术上允许把成员变量标识为public,但是在实际中最好把所有的成员变量都保持为private,如果需要修改、设置或读取该成员变量,开发人员应该使用公共的方法来调用,而不是直接使用。 例如,看下面的程序:buchong1.java和buchong2.java。体会封装的特点。 private: 在同一个类中的不同对象可以访问private的成员变量和调用private的成员方法。 如果有两个类:class A和class B,而且class A不想让class B 备 注 教学过程详见课件 访问其类中的方法或者变量,那么就使用private修饰符来修饰class A中的方法或者变量,这样,就可以将class A中的方法或者变量保护起来。 【例题6-1】见源代码:Example6_1.java 【程序解析】 在类X1中,变量x以及方法add()、subtract()被修饰符private修饰,因此公共类Example6_1就不能访问上述类X1中的私用变量和方法。从而实现类X1的成员变量和成员方法的封装。 2:protected 在同一个类中、同一个包中、不同包中的子类的不同对象可以访问protected的成员变量和调用protected的成员方法。 子类如果继承了父类,那么子类就可以访问父类中被protected修饰的成员,不管它是否在同一个包中。 但是,如果父类中的成员被private修饰,那么子类也没有权限访问。 【例题6-2】见源代码:Example6_2.java 【程序解析】 注意程序中的变量z。 friendly: 类中不加任何范围权限限定的成员属于缺省的访问状态,这时候通常称此成员变量或方法为friendly。 在同一个类中、同一个包中的对象可以访问被friendly修饰的成员变量和调用friendly的成员方法。 【例题6-3】见源代码:Example6_3.java 【程序解析】 文件编译后,系统会自动将它们放入同一个包中(即同一个目录中) 运行程序的时候需要在命令符下: java p1.Example6_3 【例题6-4】见源代码:Example6_4.java 【程序解析】 在不同的包中,可以访问被public修饰的变量和方法。 但是如果在不同的包中,类与类之间存在继承关系,那么被public和protected修饰的变量和方法都可以访问。 public: 被public修饰的成员可以被任何类访问。在此不再举例说明。 总之,类的封装性就是通过四个修饰符public、protected、private和friendly修饰成员变量和成员方法,从而达到类中成员在一定范围内的信息隐藏,从而达到封装的目的。 封装性总结: 四个修饰符:修饰成员的访问控制 public:公有类型 private:私有类型 friendly:默认类型 protected:保护类型 封装性总结: Java中封装需要遵循的规则: 用访问限制修饰符保护成员变量,通常是private 建立公有的方法,强制调用代码通过这些方法访问成员变量 6-2:类的继承 面向对象是以类来定义一个对象的。当我们要使用一个对象(变量或方法)时,首先要想到它是属于哪一种类的。 不仅对象是以类来定义,更进一步地,类也可以来定义其他类。 继承的概念 父类:汽车类,它具有一些通用的状态和行为,比如,状态(属性)有车轮数,载重量,载重人数,排气量等,行为(方法)有开大灯,开冷气,换档等。 子类:轿车、出租车、巴士,同样具有上述的属性和方法。 子类有时候具有自己的特有的属性,比如计程车,它有计价器,只需要在计程车类中添加程序代码 ; 此时,计程车类即可以运行新增加的方法,同样也可以运行父类中的方法,从而实现代码的复用的目的,提高程序的效率。 区分单一继承和多重继承 一个对象可以隶属于多种不同的类。 这就是多重继承。 区分单一继承和多重继承 Java语言只支持单一继承,如果要定义多重继承,可以使用后面将要讲到的接口(见第7章) 三、堂上提问及例题讲解 (10分钟) 课后作业 P68 1 学科 课题 周数 C++面向对象程序设计基础 实训7 类的封装、多态和继承 8、9、10 教学目标及要求 学时数 6 授课班级 09计算机网络1-4 1.掌握类的封装:public ,protected ,private 2、掌握类的多态:方法的重载、构造方法的重载、方法覆盖 3、掌握类的继承:继承的概念、继承的实现 4、学会编写简单程序,如4种修饰符如何使用、方法重载、方法覆盖、继承
教学重点 1. 掌握类的封装 教学难点 1. 掌握类的继承 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 1、判断下面的程序是否有错误,分析其原因: class StudentScore{ private static int passpoint=350; private String studentId; private String name; private int score; public StudentScore(String student,String name,int score){ this.student=student; this.name=name; this.score=score;} public int getScore(){ return score;} public String getName(){ return name;}} class TestClient{ public static void main(String args[]){ StudentScore student1=new StudentScore(“20010101”,”zhang3”,560); if(student1.score-StudentScore.passpoint>=0) System.out.println(“greeing”+student1.name+”for pass this Test”); else System.out.println(“sorry”+student1.name+”not pass this Test”);}} 2、编制程序,设计一个汽车类Vehicle ,包含的属性有车轮个数(wheel)和车重(weight)小车类Car是Vehicle类的子类,其中包含的属性有 载人数(loader)卡车类(Truck)是Car的子类,其中包含的属性有 载重量(payload)每一个类都有相关的数据输出 实验要求: 1、编程题的第二题,共涉及4个类,子类调用父类的方法时,要使用super()方法 2、汽车类Vehicle的构造方法带有2个参数,分别为wheels和weight。小车类(Car)的构造方法带有3个参数,分别为wheels、weight和loader。卡车类(Truck)的构造方法带有4个参数,分别为wheels、weight、loader和payload。 三、讲解例题 (10分钟) 教学过程详见课件 课后作业 实验报告7。 学科 课题 周数 java程序设计 6.2继承性 6.3多态性 9、10 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1 继承的实现; 2 方法覆盖; 3 掌握类的多态:方法重载、构造方法重载
教学重点 1. 继承的实现; 教学难点 1. 掌握类的多态 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 一、教学导入 (5分钟) 复习有关类的封装和继承的内容,引入新课。 二、讲授新课 继承的实现 格式如下: [修饰符] class 子类名 [extends 父类名]{ } 使用继承时,要注意的问题: 当类B成功继承类A后,就涉及到成员变量的继承问题。主要包括如下两个方面: 成员变量的继承规则 成员变量的隐藏 成员变量的继承规则 成员变量能否被继承,完全取决于其对应的访问控制。 公有成员 私有成员 默认成员 保护成员 举例说明!Test.java 使用继承时,要注意的问题: 所以,子类对父类成员变量的继承时 子类可以继承父类中访问权限设定为public、protected、friendly的成员变量和方法。 即只继承非私有的成员变量。如表6-1所示。 【例题6-5】见源代码:Example6_5.java 成员变量的隐藏 当子类中出现与父类同名的成员变量时: 当子类中和父类中的成员变量的名称相同的时候,子类会覆盖隐藏父类的成员变量。也就是说,子类在引用这个变量时,默认为是引用它自己定义的成员变量,而将从父类那里继承而来的成员变量”隐藏”。 举例说明:Test2.java 【例题6-6】见源代码Example6_6.java 【程序解析】 运行结果: 教学过程详见课件 ……… //类体 父类的变量:m=20 n=400 子类的变量:m=0 n=0 子类并没有将父类中的变量的值继承过来。这是因为父类和子类中的成员变量的值被保存在不同的存储区域,所以可以保留有不同的结果。 方法的继承与重写 子类与父类中成员变量可以被继承或者隐藏。 方法也是一种成员,因此继承规则与成员变量的继承规则完全一样,其是否能被继承同样完全取决与访问控制。 方法的继承与重写 当子类中与父类方法同名(方法覆盖|方法重写) 当子类中和父类中的方法的名称相同的时候,子类会覆盖隐藏父类的方法。 也就是说,子类在引用调用方法时,默认为是引用它自己定义的方法,而将从父类那里继承而来的方法“ 隐藏”。 方法的继承与重写 【例题6-7】见源代码Example6_7.java 【程序解析】 在程序中,父类和子类中都有set( )方法,在子类中,通过关键字super来调用父类的方法。sc为子类的对象,所以sc.set( );这条语句是调用子类的set( )方法。 4:super和this的区别: 在引用方法和变量的时候需要指明引用的是父类的方法和变量还是子类的方法和变量。 怎样指明?使用super和this关键字!! this与super分别指着有继承关系的子类和父类(超类)。 this出现在程序代码中,指的是所在的该类当前对象。 super指的是所继承的超类对象。 this与super 均不用先声明即可直接使用。 super的使用有三种情况: 用来访问父类被隐藏的成员变量,如: super.变量名; 用来调用父类中被重写的方法,如: super.方法名(参数); 用来调用父类的构造函数,如: super(参数); 课本的P114:this与super 【例题7-2】见源代码Example7_2.java 【程序解析】 运行结果: in superClass:x=3 in subClass :x=5 in superClass.doSomething() in subClass.doSomething() super.x= 3 sub.x=5 6-3:多态机制 多态性是由封装性和继承性引出的面向对象的程序设计的另一特性。 多态的特点是采用同名方式,根据调用方法时传送的参数的多少、参数类型的不同,调用不同的方法。 在Java语言中多态性体现在两个方面:方法重载和方法重写(方法覆盖) 1:方法的重载 所谓的方法重载,是指调用一个类中多个方法享有相同的方法名,但在执行时期可以根据其参数数量与类型来判断要调用此方法的哪一种操作。这些同名方法可按需要自行定义。 使用方法重载时需要注意以下几个方面: 区别在于:参数类型不同,或个数不同; 参数类型的区分度要够,例如不能是同一简单类型,如int , long 返回类型不能用来区分重载的方法。 【例题6-8】见源代码:Example6_8.java 【程序解析】 返回类型不能用来区分不同的方法。 2:构造方法的重载 构造方法是一种特殊的方法,构造方法也可以实现重载。 在使用关键字new创建对象的时候,系统会根据构造方法的参数类型、参数个数的不同调用相应的构造方法。 【例题6-9】见源代码:Example6_9.java 3:方法的覆盖(方法重写) 继承是指子类可以继承父类的方法,但是由于子类有时具有自己特有的特征,造成由父类继承而来的方法在子类中不能使用; 这样Java允许子类对父类的同名方法进行重写,也就是子类与父类中已经定义的方法具有相同的名称,但是方法的内容不同,这种多态性称为方法重写(方法覆盖),即子类的方法“隐藏”父类的同名方法。 另外,我们需要注意的是:重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型。 如例题6-6和例题6-7。 总结: 面向对象的特性: 封装性:四种修饰符的访问权限 pulic private protected friendly 多态性: 方法重载:方法名相同,参数类型,个数不同,区分度要够 方法覆盖(方法重写):子类继承父类相同的方法 继承:单一继承、继承的实现(extends)) 子类对父类成员变量的访问 子类继承父类的成员变量:四个修饰符 子类隐藏父类的成员变量 子类对父类成员方法的访问 子类继承父类的成员方法:四个修饰符 子类继承父类的成员方法 this与super的区别。 三、讲解例题 (10分钟) 课后作业 P104 4。
学科 课题 周数 10、11 教学目标及要求 java程序设计 7.1抽象类 7.2接口 学时数 4 授课班级 09计算机网络1-4 1. 掌握抽象类(定义和实现); 2 掌握接口(概念、定义、实现): 教学重点 1. 掌握抽象类 教学难点 1. 掌握接口 实验仪器及教具 多媒体教学系统
教 学 过 程 一、教学导入 (5分钟) 复习有关类封装、多态和继承知识,引入新课。 二、讲授新课 抽象类--专供子类来继承 一个类可以通过继承派生出新的子类,子类不仅保留了原有父类中的功能特性,而且还可以拥有自己的新的功能特性。 Java语言中,有一种类,专门供子类来继承的,这种类就是抽象类。 7-1:抽象类和方法 抽象类: 抽象类是专门设计让子类来继承的,抽象类中通常包括一个或多个抽象方法(这些方法只有方法说明,没有方法体)。 抽象方法必须被子类重写。 定义抽象类是因为属于同一类的多个子类,在实现某些方法时,会采取不同的实现方式。 备 注 一般考虑:定义三个类,分别添加变量、 方法等,这样的做 教学过程详见法会使程序代码增大,出错率提高。 图书之间不存在继承关系 既然这三类图书都属于图书类,都有这些方法,那么就使用抽课件 象类。 见源代码:Booksell.java 7-1-1:抽象类的实现 Java语言中,用关键字abstract修饰一个类时,这个类就是抽象类。用关键字abstract修饰一个方法时,这个方法就是抽象方法。 定义一个抽象类的格式如下: abstract class 类名 { 成员变量; 方法(); } 抽象类中的抽象方法 抽象方法的声明 //定义一般成员方法 abstract 方法(); //定义抽象方法 抽象方法使用abstract修饰。 抽象方法只有声明,没有方法体。用分号表示声明的结束。 抽象方法的继承和实现 当一个非抽象类继承其抽象类时,必须实现其父类所有的抽象方法。 抽象类中的非抽象方法 抽象类中可以有非抽象方法。 其非抽象方法往往是抽象类所有子类都具有的,且不会因为子类的不同而具体实现不同的方法。 7-1-2:抽象类的实现 通过上述2个例子,我们可以看出: 抽象类就好像是给出设计方案而没有去具体实施,真正去实现其定义的抽象方法的是它们的子类来完成的。 由于抽象类没有给出具体实现方案,所以为子类提供了灵活多样的实现方法。 7-2:接口 7-2-1:接口的概念 然而在日常生活中,我们经常遇到多重继承的问题, 如下图所示: 7-2-1:接口的概念 多重继承关系要求子类继承了多个父类的成员变量和方法,这样就导致子类具有多种多样的方法和实现形式,而且导致子类的中的方法和变量的膨胀。 所以Java不允许多重继承,为了解决这样的问题,Java引入了接口的概念。 接口主要是为了解决多重继承的问题。 7-2-2:接口的定义 接口的定义包括两部分:接口声明和接口体,定义格式如下: [访问权限] interface 接口名 [extends 父接口名1,父接口名2,…] { // 接口体 } 使用接口时,需要注意以下几个问题: extends后面可以同时继承多个接口,但是只允许继承一个类。 接口主要是描述类可以具有什么样的功能,但并不给出每个功能的具体实现。 如,可以编写一个接口Flyer,代表飞行器的角色,在该接口中可以定义起飞方法。这样,具有飞行器功能的所有类口可以实现该接口,并具体实现接口中的方法。 接口中的成员变量 与类不同,在接口中只能定义常量属性。 常量属性的修饰符默认为public static final 常量的定义格式如下: 修饰符 数据类型 常量名=常量值; 常量名通常用大写,定义的常量可以被实现该接口的多个类共享。 举例说明! 接口中的方法 定义一个接口,就有点像定义一个抽象类一样,所声明的方法不必加abstract,亦被视为abstract。 即接口中定义的方法必须是抽象的。 在接口中只进行方法的声明,而不提供方法的实现,所以方法定义没有方法体,且结尾处用分号“;”结束。方法定义的格式如下: 返回类型 方法名([参数表]); 三、堂上提问及例题讲解 (10分钟) 课后作业 P118 4
学科 课题 周数 12、13 教学目标及要求 1. 掌握包: java程序设计 7.2接口 7.3包 学时数 2 授课班级 09计算机网络1-4 2、包的概念 3 包的使用 教学重点 1. 包的概念 教学难点 1. 包的使用 实验仪器及教具 多媒体教学系统 教 学 过 程 一、教学导入 (5分钟) 复习有关抽象类和接口的知识,引入新课。 二、讲授新课 7-2-2:接口的实现 接口的实现是指在一个类的声明中使用关键字“implements”。 class 类名 implements 接口1,接口2,… 【例题7-3】见源代码Example7_3.java 【程序解析】 在接口的定义中,变量名称采用大写的格式,方法只是定义,没有具体的实现的内容,而且要以分号“;”结束此语句。 7-2-3:接口的实现 通过刚才的例题,我们可以看到,将接口也可以更改成抽象类来编写程序,那么接口和抽象类有何区别?(试着修改例题:Example7_3.java) 接口中的方法都是抽象方法; 接口中的方法没有方法体;而且以分号结束; 接口不是类,没有构造方法; 接口中的变量都是public static final常量 接口与抽象类的区别 7-3:包以及包的概念 由于Java编译器编译Java源文件时,生成与文件名同名的字节码文件(类文件),因此同名的类有可能发生冲突。 为了解决这样的问题,Java提供包来管理类。Java将其API中相关的类及接口组织成一个包(package)。 掌握两个关键字: package:定义一个包;程序的第一行 import:引入一个包; 程序的第一行 当需要包中的类时,只要用import关键字引入一个包,便可将此包中所有的接口及类都引用进来。看看JDK帮助文件中的包。 7-3-1:包的定义:package语句 把一段代码归入某个包的方法是用package语句。 package语句的一般形式为: 备 注 教学过程详见课件 package 包名称; 例如: package mypackage; public class classname{ } package语句是Java源文件的第一条语句,它指明了该文件中所有定义的类所在的包。 创建了一个包后,Java编译器会将文件存储在与包名相同的文件夹中。 例如: //创建包p1,文件存储在p1文件夹中 package p1 ; //创建包p3,文件存储在p1/p2/p3文件夹中 package p1.p2.p3 总之,创建包就是在当前文件夹下创建一个子文件夹,以便存放这个包中包含的所有类的.class文件。 如果包名中含有符号“.”,例如 “package MyPackage.MyPackage1” 表示在当前目录下子文件夹MyPackage, MyPackage1目录为MyPackage目录子文件夹,.class文件存放在此文件夹下。 Java的开发环境J2SDK中提供的包主要有: java.applet java.awt java.awt.datatransfe java.awt.event java.awt.image java.beans java.io java.lang java.lang.reflect java.net 7-3-2:import语句 为了能够使用Java中已经提供的类,或者能够在其他类中使用自己定义的包中的类,我们需要使用import语句引入所需要的类。 import语句格式如下: import pack1[.pack2][.pack3…].(classname|*); 其中: pack1[.pack2][.pack3…]表明包的层次,与package语句相同。 classname指明所要引入的类的名称。 星号“*”指明:如果要从一个包中引入多个类,则可以使用“*”代替。 例如: //引入awt包中的所有类 import java.awt.*; //引入util包中的类Date import java.util.Date; //引入自定义包p1中的所有类 import java.p1.*; 注意: 在Java语言中,当执行“System.out.println()”等操作时,系统自动引入java.lang包,该包有最常用的类文件。 然而,当用户自己定义的包要让应用程序调用时,就要使用import关键字来引入。 7-3-3:包的编译与运行 将多个相互独立的类放入同一个包中 【例题7-4】创建指定的包bag,将两个类文件X1和X2放入到这个包中。 见源代码 X1.java、 X2.java、Example7_4.java 【程序解析】 7-3-3:包的编译与运行 将多个相互独立的类放入不同的包中 【例题7-5】两个类文件X1放入包elsebag1,X2放入包elsebag2。Example7_4放入包elsebag3 见源代码 X1.java、 X2.java、Example7_4.java 【程序解析】 总结: 抽象类(abstract、extends) 概念 实现 接口(interface、implements) 概念 实现 包--包的概念、定义、使用(package、import) 三、堂上提问及例题讲解 (10分钟) 课后作业 P118 4
学科 课题 周数 13、14 教学目标及要求 C++面向对象程序设计基础 实训8 接口和包 学时数 4 授课班级 09计算机网络1-4 1、熟悉接口的定义和方法 2、了解java语言实现多重继承的途径 3、熟悉定义包(package语句)和引入包(import语句) 教学重点 1. 熟悉接口的定义和方法 教学难点 1. 熟悉接口的定义和方法 实验仪器及教具 多媒体教学系统 教 学 过 程 1、判断下面的程序是否有错误,分析其原因: public interface Example { private double privateOne=0.0; protected int privateTwo=0; public int privateThree=10; public void methodOne(){ System.out.println(“aaa”);} public static void methodTwo(); public static final int methodThree(); public abstract void methodFour();} 2、包是为了便于使用、管理和维护其中的类而指定的命名空间。查看下面的程序,指出它的语法错误。 import java.io.*; package mypackage; class ClassOne{ public void display(){ System.out.println(“aaaa”);} } class ClassTwo{ public void display(){ System.out.println(“bbbbb”);}} 3、程序包提供在包级别上的封装和访问控制。判断下面的程序是否正确,如果有错,那么是哪些成员变量或方法的定义或访问有错? //X1.java package samePackage1; class X1 { private int x; protected void setX(int i){ x=i;}} //X2.java package samePackage2; import samePackage1.*; 备 注 教学过程详见课件 public class X2 { protected int i,j; X2(int i,int j){ this.i=i; this.j=j;} X1 h=new X1(); public void show(){ h.setX(12); i=h.getX(); j=h.x; System.out.println(“输出的结果是”+i+”=“+j);}} //pratice.java import samePackage1.X1; import samePackage2.X2; class pratice{ public static void main(String args[]){ X2 g=new X2(5,10); g.show(); } } 实验要求: 1、对于实验中的第一题,仔细分析接口的作用以及定义的特点,找出程序中的错误 2、对于实验中的第二题,仔细分析包的应用,包的定义,所在的位置,找出程序中的错误。 3、对于实验中的第三题,不同的程序放在不同的包中,那么程序中的变量和方法在调用的时候,会根据访问权限的不同达到程序中对变量和方法的封装。仔细分析程序中的代码,找出错误,从而更好地理解java的封装性 三、堂上提问及例题讲解 (10分钟) 课后作业 实验报告8 学科 课题 周数 java程序设计 8.1异常的概念 8.2异常举例 13、14 学时数 2 授课班级 09计算机网络1-4 教学目标及要求 1掌握什么是异常; 2 掌握异常的处理机制 教学重点 1. 掌握什么是异常 教学难点 1. 掌握异常的处理机制 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 一、教学导入 (5分钟) 复习有关接口和包,引入新课。 二、讲授新课 异常处理--Java世界的医生 有过一些经验的开发人员都能体会到,在开发项目的过程中,核心业务代码只占20%--30%左右的时间,而用于开发容错代码的时间高达70%--80%,这大大降低了开发效率。 Java中提供了异常处理机制,可以很好的在一定程度上解决这个问题。 8-1:什么是例外(异常) 例外处理也就是所谓的异常处理,而例外是指程序运行过程中出现的非正常现象。 比如:用户输入错误、除数为零、数组越界等。 由于异常情况总是难免的,所以开发程序时要充分考虑各种异 常,使程序的容错性更好。 8-1:什么是例外(异常) 码所造成的不可预期的结果发生。 通过异常处理机制,减少了编程人员的工作量,增强了异常处理的灵活性,并提高了程序的可读性、可维护性。 8-2:举例说明:异常的产生 【例题8-1】见源代码:Example8_1.java 【程序解析】 显示的错误:java.io.IOException;指明了例外的类型,而且我们也看到,对于这样的例外,在程序中必须对它进行处理,否则编译根本通不过。 举例说明:异常的产生 三、讲解例题 (10分钟) 教学过程详见Java语言的特色之一是提供了异常处理机制,可以预防错误代课件 课后作业 P129 4
学科 课题 周数 15、16 教学目标及要求 java程序设计 实训9 异常处理 学时数 2 授课班级 09计算机网络1-4 1、熟悉异常处理的方法 2、熟悉常见异常的捕获方法 教学重点 1. 熟悉异常处理的方法 教学难点 1. 熟悉异常处理的方法 实验仪器及教具 多媒体教学系统 教 学 过 程 1设计一个程序,其功能是从命令行输入整数字符串,再将整数字符串转换为整型,输入的数据可能具有如下格式: 12345 123 45 123XYZ456 对上述的异常进行捕获和处理。 针对上述编程题,根据下面给出的框架,在有“添加代码”处,添加相应的代码,完成整个程序,将程序编译运行通过之后,显示正确的运行结果。 **********将下述的源代码补充完整************** //添加代码:引入相应的包 public class UseException{ public static void main(String args[]){ System.out.println(“请输入一个整数字符串:”); //添加代码:使用try…catch…finally语句将下面几行代码捕获例外 //本程序中出现的异常有两种:IOException异常和NumberFormatException异常 //此处可能会产生I/O异常 BufferedReader in= new BufferedReader(new InputStreamReader(System.in)); //此处可能会产生数据格式异常 int a=Integer.parseInt(in.readLine()); System.out.println(“您输入的整数是:”+a); }//main() }//class UseException **********源代码结束************** 教学过程详见课件 备 注 实验要求: 1、在程序中捕获例外时,先捕获IOException异常,再捕获NumberFormatException异常 2、如果捕获的异常的顺序不同,则执行的结果就会不同,将上述的程序,自己尝试作适当的调整,并分析程序的结果。 三、堂上提问及例题讲解 (10分钟) 课后作业 实验报告10
学科 课题 周数 java程序设计 8.3 异常的运行机理 8.4异常的处理 15、16 教学目标及要求 学时数 4 授课班级 09计算机网络1-4 1掌握异常的处理方法: 2 try…catch…finally 3抛出异常:throws、throw 4 自定义异常类
教学重点 1. 掌握异常的处理方法。 教学难点 1. 掌握异常的处理方法 实验仪器及教具 多媒体教学系统 教 学 过 程 备 注 一、教学导入 (5分钟) 复习有关异常的概念,引入新课。 二、讲授新课 8-3:Java异常运行机理 在Java中,当异常发生时,就交给异常对象来处理。 在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类,每一类反映了一类运行错误。 类Error: 一般代表由硬件运行失败导致的严重错误。 这种类型的例外通常包括动态链接失败,虚拟机错误等; 通常Java程序不应该捕获这类例外,也不会抛弃这种例外。也就是说,遇到这种类型的例外不作出任何处理。 类Exception: 分为两类: RuntimeException:运行时例外 运行时例外是指由运行时系统所检测到的程序设计问题或者API的使用不当问题,比如:除0溢出、数组越界、空引用等。 它可能在程序的任何地方出现,要全部捕获它并且进行处理可能会带来过大的开销,因为Java编译器并不要求程序对它进行处理。所以遇到这样的例外的时候,编译的时候根本看不出错误。 非运行时例外: 其他子类如IOException等; Java编译器要求程序必须捕获或者声明抛弃这种例外。编译的时候,这种类型的例外就会显示出来。 8-4:异常的处理方法 主要处理方法有两种: try…catch…finally语句:捕获异常 抛出异常(throw、throws语句) 8-4-1:try…catch…finally 格式如下: try{ ...... //可能出现的异常的程序代码 ...... //处理例外事件1 }catch( ExceptionName1 e ){ }catch( ExceptionName2 e ){ 教学过程详见课件 } } ...... ...... ...... //处理例外事件2 }finally{ 9-2-1:try…catch…finally 格式说明: 1、try 捕获例外的第一步是用try{…}选定捕获例外的范围,由try所限定的代码块中的语句在执行过程中可能会生成例外对象并抛弃。 9-2-1:try…catch…finally 2、catch 每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的例外事件。 catch语句只需要一个形式参数指明它所能够捕获的例外类型,这个类必须是Throwable的子类。 9-2-1:try…catch…finally 3、finally 通过finally语句为例外处理提供一个统一的出口。 使得在控制流程到程序的其它部分以前,能够对程序的状态作统一的管理。 不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。 8-4-1:try…catch…finally 【例题8-3】:见源代码:Example8_3.java 【程序解析】 由此程序可以看出,finally语句为例外处理提供一个统一的出口。 当运行程序的时候,如果没有在命令行中输入参数,则运行结果就是第一种情况。 当运行程序的时候,如果在命令行中输入了参数:hello,则程序的运行就是第二种情况。 catch语句一旦匹配,就不会执行下一个catch语句。 8-4-1:try…catch…finally 运行结果如下: >java Example8_3 数组越界 程序结束! >java Example3 hello 输入一个字符串 hello java.lang.ArithmeticException: / by zero 程序结束! 【例题8-4】:见源代码:Example8_4.java 【运行结果】: 运行结果有三种情况: >java Example8_4 //没有给出参数 java.lang.ArrayIndexOutOfBoundsException: 0 文件没有关闭! >java Example8_4 HELLO //文件text.txt不存在 first argument is HELLO java.io.FileNotFoundException: text.txt (系统找不到指定的文件。) 文件没有关闭 >java Example4 HELLO //执行完try之后,执行finally语句 first argument is HELLO content of text is: Nowadays,because of the wide use of machines such as bicycles,buses and cars,peo ple need not walk or take hard labor work any longer.In other words,they can not get engough exercises as they used to.As a result,many people get weak and fat. 关闭文件... 8-2-2:抛出异常 1、throws子句 如果在一个方法中生成了一个例外,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃例外,使得例外对象直到找到有合适的方法捕获它为止。 声明抛弃例外是在一个方法声明中的throws子句中指明的。 格式如下: 方法声明()throws 例外类型1,例外类型2,…… { } throws子句中同时可以指明多个例外,说明该方法将不对这些例外进行处理,而是声明抛弃它们。 例如: public { } 2、throw语句 抛弃例外首先要生成例外对象,生成例外对象也可以在程序中生成,可以通过throw语句实现。例如: IOException e=new IOException(); throw e ; 8-4-3:自定义异常 在程序设计过程中,会出现各种各样的问题,有些可以通过Java系统已经提供的异常来处理,例如像上述讲过的内容。 但是有些异常不能通过Java系统自己解决,在这种情况下,我们可以自己定义异常。 格式如下: class 自定义异常名 extends Exception { //异常类体 } 需要注意的是:自定义的异常类必须继承Exception,即必须是Exception类的子类。 【例题8-5】:见源代码:Example8_5.java 【运行结果】: …… static void main(String args[]) throws IOException,IndexOutOfBoundsException ...... >java Example5 Go in that way. D:\\>java Example5 Go in 0 this way. 【程序解析】 此程序自定义了一个异常类:Example8_5,当运行时输入字符'0',程序会直接跳转到程序的第16行,运行结果就是第2种情况,否则就是第一种情况。 补充: try…catch…finally语句块的使用时需要注意的问题: 无catch时,finally必须紧跟try catch与finally不能同时省略。 try…catch…finally语句之间不能插入其他代码。 举例说明:Test1.java 补充: 多个catch语句的先后顺序 若多个catch语句块中的异常类型相互有派生关系,那么子类型的异常写在上面,父类型写在下面 若为同级别的异常类型,先后顺序无所谓。 总结: 何为异常类、异常处理? 异常处理机制 异常处理方法(三种) try…catch….finally throws 例外类型1,例外类型2,….. throw e 三、讲解例题 (10分钟) 课后作业 P129 4
因篇幅问题不能全部显示,请点此查看更多更全内容