资源描述
实验六 内部类和异常类
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;i<name.length;i++){
goods[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;i<goods.length;i++){
try{
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】输出错误信息
}
}
}
展开阅读全文