教案Java语言程序设计教案56学时第7章.docx

上传人:b****3 文档编号:27367474 上传时间:2023-06-29 格式:DOCX 页数:15 大小:23.44KB
下载 相关 举报
教案Java语言程序设计教案56学时第7章.docx_第1页
第1页 / 共15页
教案Java语言程序设计教案56学时第7章.docx_第2页
第2页 / 共15页
教案Java语言程序设计教案56学时第7章.docx_第3页
第3页 / 共15页
教案Java语言程序设计教案56学时第7章.docx_第4页
第4页 / 共15页
教案Java语言程序设计教案56学时第7章.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

教案Java语言程序设计教案56学时第7章.docx

《教案Java语言程序设计教案56学时第7章.docx》由会员分享,可在线阅读,更多相关《教案Java语言程序设计教案56学时第7章.docx(15页珍藏版)》请在冰豆网上搜索。

教案Java语言程序设计教案56学时第7章.docx

教案Java语言程序设计教案56学时第7章

授课内容

学时分配

教学方法与手段

进度计划

(周次)

课堂讲授(学时)

上机实践(学时)

Java语言入门

标识符、关键字和数据类型

运算符、表达式和语句

6

4

2

1~2

类与对象

14

10

4

2~5

子类与继承

6

4

2

5-7

接口与实现

4

2

2

7-8

内部类与异常类

2

2

0

8

常用实用类

6

4

2

9-10

组件及事件处理

6

4

2

10-11

输入、输出流

2

2

0

12

JDBC与MySQL数据库

4

2

2

12-13

Java多线程机制

2

2

0

13

Java网络的基本知识

2

2

0

14

总结

2

2

0

14

总学时

 

各章教学实施计划

章节题目第7章内部类与异常类

7.1节-7.6节

学时

2

教学目的、要求(分了解、理解、掌握三个层次):

1、掌握内部类、匿名类。

2、了解异常类、断言。

教学内容(包括基本内容、重点、难点):

基本内容:

◆内部类

◆匿名类

◆异常类

◆断言

教学重点:

重点是理解和子类有关的匿名类、和接口有关的匿名类。

教学难点:

难点是匿名类对象作参数。

 

讨论、思考题、作业:

习题7

调试例子7

预习第8章8.1-8.3节

参考书目(含参考书、文献等)具体内容:

参考书对应章节

课堂教学实施计划

第12课

教学过程设计:

复习分钟;授新课95分钟

讨论5分钟;其它分钟

授课类型(请打√):

理论课√讨论课□实验课□习题课□其它□

教学方式(请打√):

讲授√讨论□示教□指导□其它□

教学手段(请打√):

多媒体模型□实物□挂图□音像□其它√

主要内容

基本内容:

v内部类

v匿名类

v异常类

v断言

教学重点:

重点是理解和子类有关的匿名类、和接口有关的匿名类。

教学难点:

难点是匿名类对象作参数。

第7章内部类与异常类

§7.1内部类

Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类。

例如:

某种类型的农场饲养了一种特殊种类的牛,但不希望其他农场饲养这种特殊种类的牛,那么这种类型的农场就可以将创建这种特殊种牛的类作为自己的内部类。

下面的例子1(Example7_1.java)中有一个RedCowForm(红牛农场)类,该类中有一个名字为RedCow(红牛)的内部类。

程序运行效果如图7.1。

例子1

RedCowForm.java

publicclassRedCowForm{

staticStringformName;

RedCowcow;//内部类声明对象

RedCowForm(){

}

RedCowForm(Strings){

cow=newRedCow(150,112,5000);

formName=s;

}

publicvoidshowCowMess(){

cow.speak();

}

classRedCow{//内部类的声明

StringcowName="红牛";

intheight,weight,price;

RedCow(inth,intw,intp){

height=h;

weight=w;

price=p;

}

voidspeak(){

System.out.println("偶是"+cowName+",身高:

"+height+"cm体重:

"+

weight+"kg,生活在"+formName);

}

}//内部类结束

}//外嵌类结束

Example7_1.java

publicclassExample7_1{

publicstaticvoidmain(Stringargs[]){

RedCowFormform=newRedCowForm("红牛农场");

form.showCowMess();

form.cow.speak();

}

}

§7.2匿名类

Java允许我们直接使用一个类的子类的类体创建一个子类对象。

7.2.1和子类有关的匿名类

创建子类对象时,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称作匿名类。

假设Bank是类,那么下列代码就是用Bank的一个子类(匿名类)创建对象:

newBank(){

匿名类的类体

};

例子2

OutputAlphabet.java

abstractclassOutputAlphabet{

publicabstractvoidoutput();

}

OutputEnglish.java

publicclassOutputEnglishextendsOutputAlphabet{//输出英文字母的子类

publicvoidoutput(){

for(charc='a';c<='z';c++){

System.out.printf("%3c",c);

}

}

}

ShowBoard.java

publicclassShowBoard{

voidshowMess(OutputAlphabetshow){//参数show是OutputAlphabet类型的对象

show.output();

}

}

Example7_2.java

publicclassExample7_2{

publicstaticvoidmain(Stringargs[]){

ShowBoardboard=newShowBoard();

board.showMess(newOutputEnglish());//向参数传递OutputAlphabet的子类//OutputEnglish的对象

board.showMess(newOutputAlphabet()//向参数传递OutputAlphabet的匿名子//类的对象

{publicvoidoutput()

{for(charc='α';c<='ω';c++)//输出希腊字母

System.out.printf("%3c",c);

}

}

);//请注意分号在这里

}

}

7.2.2和接口有关的匿名类

假设Computable是一个接口,那么,Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了Computable接口的类去掉类声明后的类体,称作匿名类。

下列代码就是用实现了Computable接口的类(匿名类)创建对象:

newComputable(){

实现接口的匿名类的类体

};

例子3

Example7_3.java

interfaceSpeakHello{

voidspeak();

}

classHelloMachine{

publicvoidturnOn(SpeakHellohello){

hello.speak();

}

}

publicclassExample7_3{

publicstaticvoidmain(Stringargs[]){

HelloMachinemachine=newHelloMachine();

machine.turnOn(newSpeakHello(){//和接口SpeakHello有关的匿名类

publicvoidspeak(){

System.out.println("hello,youarewelcome!

");

}

}

);

machine.turnOn(newSpeakHello(){//和接口SpeakHello有关的匿名类

publicvoidspeak(){

System.out.println("你好,欢迎光临!

");

}

}

);

}

}

§7.3异常类

所谓异常就是程序运行时可能出现一些错误,比如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误作出处理。

程序运行出现异常时,Java运行环境就用异常类Exception的相应子类创建一个异常对象,并等待处理。

异常对象可以调用如下方法得到或输出有关异常的信息:

publicStringgetMessage();

publicvoidprintStackTrace();

publicStringtoString();

§7.3.1try~catch语句

Java使用try~catch语句来处理异常,将可能出现的异常操作放在try~catch语句的try部分,将发生异常后的处理放在catch部分。

try~catch语句的格式如下:

try{

包含可能发生异常的语句

}

catch(ExceptionSubClass1e){

}

catch(ExceptionSubClass2e){

}

带finally子语句的try~catch语句,语法格式如下:

try{}

catch(ExceptionSubClasse){}

finally{}

其执行机制是在执行try~catch语句后,执行finally子语句,也就是说,无论在try部分是否发生过异常,finally子语句都会被执行。

例子4

Example7_4.java

publicclassExample7_4{

publicstaticvoidmain(Stringargs[]){

intn=0,m=0,t=1000;

try{m=Integer.parseInt("8888");

n=Integer.parseInt("ab89");//发生异常,转向catch

t=7777;//t没有机会被赋值

}

catch(NumberFormatExceptione){

System.out.println("发生异常:

"+e.getMessage());

}

System.out.println("n="+n+",m="+m+",t="+t);

try{System.out.println("故意抛出I/O异常!

");

thrownewjava.io.IOException("我是故意的");//故意抛出异常

//System.out.println("这个输出语句肯定没有机会执行,必须注释,否则编译出错");

}

catch(java.io.IOExceptione){

System.out.println("发生异常:

"+e.getMessage());

}

}

}

§7.3.2异常的声明

一个方法不处理它产生的异常,而是沿着调用层次向上传递,由调用它的方法来处理这些异常,叫声明异常.

声明异常的方法:

在产生异常的方法名后面加上要抛出(throws)的异常的列表:

如:

voidcompute(intx)throwsArithmeticException

{//这里有异常发生,但是并没有处理…}

例子5

BankException.java

publicclassBankExceptionextendsException{

Stringmessage;

publicBankException(intm,intn){

message="入账资金"+m+"是负数或支出"+n+"是正数,不符合系统要求.";

}

publicStringwarnMess(){

returnmessage;

}

}

Bank.java

publicclassBank{

privateintmoney;

publicvoidincome(intin,intout)throwsBankException{

if(in<=0||out>=0||in+out<=0){

thrownewBankException(in,out);//方法抛出异常,导致方法结束

}

intnetIncome=in+out;

System.out.printf("本次计算出的纯收入是:

%d元\n",netIncome);

money=money+netIncome;

}

publicintgetMoney(){

returnmoney;

}

}

Example7_5.java

publicclassExample7_5{

publicstaticvoidmain(Stringargs[]){

Bankbank=newBank();

try{bank.income(200,-100);

bank.income(300,-100);

bank.income(400,-100);

System.out.printf("银行目前有%d元\n",bank.getMoney());

bank.income(200,100);

bank.income(99999,-100);

}

catch(BankExceptione){

System.out.println("计算收益的过程出现如下问题:

");

System.out.println(e.warnMess());

}

System.out.printf("银行目前有%d元\n",bank.getMoney());

}

}

§7.4断言

断言语句用于调试代码阶段。

在调试代码阶段让断言语句发挥作用,这样就可以发现一些致命的错误,当程序正式运行时就可以关闭断言语句,但仍把断言语句保留在源代码中,如果以后应用程又需要调试,可以重新启用断言语句。

使用关键字assert声明一条断言语句,断言语句有以下两种格式:

assertbooleanExpression;

assertbooleanExpression:

messageException;

例子6

Example7_6.java

importjava.util.Scanner;

publicclassExample7_6{

publicstaticvoidmain(Stringargs[]){

int[]score={-120,98,89,120,99};

intsum=0;

for(intnumber:

score){

assertnumber>=0:

"负数不能是成绩";

sum=sum+number;

}

System.out.println("总成绩:

"+sum);

}

}

7.5应用举例

分析例题7,然后让学生自己调试,提出自己的理解。

总结

Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类。

和某类有关的匿名类就是该类的一个子类,该子类没有明显的用类声明来定义,所以称做匿名类。

和某接口有关的匿名类就是实现该接口的一个类,该子类没有明显的用类声明来定义,所以称做匿名类。

Java使用try~catch语句来处理异常,将可能出现的异常操作放在try~catch语句的try部分,当try部分中的某个方法调用发生异常后,try部分将立刻结束执行,而转向执行相应的catch部分。

作业

习题7,调试例子7

预习第8章8.1-8.3节

本章结束

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1