您的当前位置:首页正文

实验六 内部类与异常类

2023-04-25 来源:步旅网


实验六 内部类和异常类

1. 实验目的

1、掌握内部类的常用方法

2、掌握匿名类的常用方法

3、掌握接异常类的常用方法

2. 实验内容

1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。

1)实验1 红牛农场

2)实验2 检查危险品

3)实验3 内部类的使用方法

4)实验4 匿名类的使用方法

5)实验5 异常类使用方法

2、完成习题:

1)编写一个异常类MyException,在编写一个类Student,该类有一个产生异常的方法public void speak(int m)throws MyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写一个主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。

3. 实验步骤

1、完成实验内容1中的程序填空、编译通过,并运行得到正确结果。

2、设计完成实验内容2中要求的程序,并通过编译、运行,最后得到正确结果。

4. 评分标准

1. A——内容功能完善,编程风格好,人机接口界面好;

2. B——内容功能完善,编程风格良好,人机接口界面良好;

3. C——完成必做内容;

4. D——能完成必做内容;

5. E——未按时完成必做内容,或者抄袭(雷同者全部为E).

参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。(压缩包的文件名为:学号后三位和名字开头字母,如109zhh.RAR|ZIP)

实验1 红牛农场

模板代码

RedCowForm.java

public class RedCowForm {

String formName;

//【代码1】//用内部类RedCow声明对象cow

RedCowForm(){

}

RedCowForm(String s){

//【代码2】//创建cow

formName=s;

}

public void showCowMess(){

cow.speak();

}

class RedCow{

String cowName=\"红牛\";

int height,weight,price;

RedCow(int h,int w,int p){

height=h;

weight=w;

price=p;

}

void speak(){

System.out.println(cowName+\",身高:\"+height+\"cm,体重:\"+weight+\"kg\");

System.out.println(\"生活在\"+formName);

}

}

}

MainClass.java

public class MainClass {

public static void main(String[] args) {

RedCowForm form=new RedCowForm(\"红牛农场\");

form.showCowMess();

}

}

实验2 检查危险品

模板代码

Goods.java

public class Goods {

boolean isDanger;

String name;

public boolean isDanger() {

return isDanger;

}

public void setDanger(boolean boo) {

isDanger = boo;

}

public String getName() {

return name;

}

public void setName(String s) {

name = s;

}

}

DangerException.java

public class DangerException extends Exception{

String message;

public DangerException(){

message=\"危险品!\";

}

public void toShow(){

System.out.print(message+\"\");

}

}

Machine.java

public class Machine {

Goods[] goods;

public void checkBag(Goods goods) throws DangerException{

if(goods.isDanger){

//【代码1】//用throw抛出一个DangerException的匿名类

}

}

}

Check.java

public class Check {

public static void main(String[] args) {

Machine machine=new Machine();

String name[]={\"苹果\炸药\西服\硫酸\手表\硫磺\

Goods [] goods= new Goods[name.length];//检查6件物品

for(int i=0;igoods[i]=new Goods();

if(i%2==0){

goods[i].setIsDanger(false);

goods[i].setName(name[i]);

}

else{

goods[i].setIsDanger(true);

goods[i].setName(name[i]);

}

}

for(int i=0;itry{

machine.checkBag(goods[i]);

System.out.println(goods[i].getName()+\"检查通过\");

}

catch(DangerException e){

//【代码2】//e调用toShow()方法

System.out.println(goods[i].getName()+\"被禁止!\");

}

}

}

}

实验3 内部类的使用

模板代码

Outer.java

public class Outer

{

private static int size;

/** 内部类Inner的声明 */

public class Inner

{

private int size;

/** 方法doStuff() */

public void doStuff(int size)

{

【代码1】 //存取局部变量size加3

【代码2】 //存取其内部类的成员变量size加2

【代码3】 //存取其外部类的成员变量size加1

System.out.println(size+\" \"+this.size+\" \"+Outer.this.size);

}

}//内部类Inner结束

/** 类Outer中定义的实例方法testInner()方法 */

public void testInner()

{

Inner i=new Inner();

【代码4】//调用Inner类中的doStuff方法

}

/** main()方法 */

public static void main(String args[])

{

Outer o=new Outer();

【代码5】//调用Outer类中的testInner方法

}

}//类Outer结束

实验4 匿名类的使用方法

模板代码

Anonymity.java

interface Square

{ double getSquare(int n);

}

interface Sqrt

{ public double getSqrt(int x);

}

class A

{ void p(Square square)

{

System.out.println(【代码1】);//输出getSquare方法计算后的结果

}

void k(Sqrt sqrt)

{

System.out.println(【代码2】);//输出getSqrt方法计算后的结果

}

}

public class Anonymity

{ public static void main(String args[])

{

A a=new A();

a.p(【代码3】);//实现Square接口,重写getSquare方法,返回n的平方

Sqrt sqrt=new Sqrt()

{【代码4】};//重写getSqrt方法,返回x的开平方根,用静态Math.sqrt方法来运算

System.out.println(\"计算开平方:\"+sqrt.getSqrt(5));

}

}

实验5 异常类使用方法

模板代码

eClass.java

class MyException extends Exception

{

String message;

MyException(String str)

{

【代码1】//把参数的引用传给message成员变量

}

public String getMessage()

{

【代码2】//返回message成员变量

}

}

abstract class A

{

abstract int f(int x,int y) throws MyException;

}

class B extends A

{

int f(int x,int y) throws MyException

{

if(【代码3】)//判断x、y都不大于100

【代码4】//抛出一个新建的MyException对象,MyException对象中构造方法传入的参数内容为:乘数超过100

return x*y;

}

}

public class eClass

{

public static void main (String args[])

{

A a;

【代码5】//设计a对象的B类上转型对象

try

{

System.out.println(a.f(12,10));

【代码6】//使用f()方法时传入一个大于100的乘数

}

catch(MyException e)

{

【代码7】输出错误信息

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容