实验六-内部类与异常类
- 格式:doc
- 大小:134.60 KB
- 文档页数:13
一、实验目的1. 理解内部类的概念及其在Java编程中的应用。
2. 掌握内部类的定义、使用方法和特点。
3. 通过实例分析,加深对内部类的理解。
二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容1. 内部类的定义及特点2. 成员内部类3. 静态内部类4. 局部内部类5. 匿名内部类四、实验步骤1. 创建一个名为“OuterClass”的类,作为外部类。
2. 在“OuterClass”中定义一个成员内部类“InnerClass”。
3. 在“OuterClass”中定义一个静态内部类“StaticInnerClass”。
4. 在“OuterClass”中定义一个局部内部类“LocalInnerClass”。
5. 创建一个匿名内部类的实例,并演示其使用。
五、实验代码```java// 1. 创建外部类OuterClasspublic class OuterClass {// 2. 成员内部类InnerClasspublic class InnerClass {public void display() {System.out.println("这是成员内部类InnerClass的方法");}}// 3. 静态内部类StaticInnerClasspublic static class StaticInnerClass {public void display() {System.out.println("这是静态内部类StaticInnerClass的方法");}}// 4. 局部内部类LocalInnerClasspublic void outerMethod() {class LocalInnerClass {public void display() {System.out.println("这是局部内部类LocalInnerClass的方法");}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();}// 5. 匿名内部类public void anonymousInnerClass() {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("这是匿名内部类的方法");}};new Thread(runnable).start();}public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass(); InnerClass.display();StaticInnerClass staticInner = new StaticInnerClass(); staticInner.display();outer.outerMethod();outer.anonymousInnerClass();}}```六、实验结果与分析1. 成员内部类:通过定义在类中的内部类,可以访问外部类的成员变量和方法。
实验报告课程名称: Java程序设计成绩评定:实验项目名称:接口、泛型、枚举、内部类与异常指导教师:学生姓名:学号:专业班级:实验项目类型:基础实验地点:实验时间:一、实验目的与要求:1、理解接口的定义与实现;2、知道泛型、枚举型与内部类的基本应用;3、掌握常用异常的抛出与捕获及处理.二、实验环境:(硬件环境、软件环境)1.硬件环境:奔ⅣPC。
2.软件环境:Windows XP 操作系统,JDK6.0。
三、实验内容:(原理、操作步骤、程序代码等)任务:1、按照要求完成下述接口及实现类的程序1)定义名称为PCI()的接口,包括启动的方法start和关闭的方法stop;2)定义名称为NetworkCard 的类表示网卡,实现PCI接口,并且其在实现start方法时输出“sending data……”,在实现stop方法时输出“network stop.”3)定义名称为SoundCard 的类表示声卡,实现PCI接口;并且其在实现start方法时输出“dudu……”,在实现stop方法时输出“sound stop.”4)定义名称为MainBoard 的类表示主板,包含方法public void usePCICard(PCIp),在方法体内通过p来启动和关闭组件;5)定义一个包含main方法的Test类,在main方法内创建一个MainBoard 对象用mb来引用,创建一个NetworkCard对象用nc来引用,创建一个SoundCard对象用sc来引用,分别通过mb来使用usePCICard(PCI p)启动声卡和网卡。
2、泛型类程序的调试调试教材P165的程序8-2,写出程序运行结果,理解泛型类的工作机理及应用。
3、调试运行内部类程序:在类内部再定义另外一个类,这个另外定义的类就叫内部类。
调试教材P171-172程序8-3,写出程序运行结果,理解内部类的定义方法与应用。
4、异常抛出与捕获编程与调试先调试教材P182、183中的程序9-2和9-3,写出调试结果。
实验一 Java语言概述【实验目的】1.掌握开发Java应用程序的三个步骤:编写源文件、编译源文件和运行应用程序。
2.熟悉Java应用程序的基本结构,并能联合编译应用程序所需要的类。
文件保存要求:在D:盘新建文件夹“学号”,在“D:\ 学号”下新建文件夹“timu1”。
题目1的文件保存在“timu1”中,以下依次类推。
【题目1】1、实验要求:编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.编译器怎样提示丢失大括号的错误。
b.编译器怎样提示语句丢失分号的错误。
c.编译器怎样提示将System写成system这一错误。
d.编译器怎样提示将String写成string这一错误。
【题目2】1、实验要求:编写3个源文件:、、,每个源文件只有一个类。
含有应用程序的主类(含有main方法),并使用了Teacher和Student类。
将3个源文件保存到同一目录,D:\timu2,然后编译。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.将编译通过后,不断地修改源文件中的【代码2】。
比如,在命令行窗口输出“我是语文老师”或“我是数学老师”。
要求每次修改源文件后,单独编译,然后直接运行应用程序(不要再编译)。
b.如果需要编译某个目录下的全部Java源文件,如D:\1001目录,可以使用如下命令:D:\1001>javac *.java请练习上述命令。
【题目3】1、实验要求:课本第15页习题2、实验后的练习习题8.(4)实验四类与对象【实验目的】1.掌握使用类来封装对象的属性和行为。
2.掌握对象的组合以及参数传递。
3.掌握类变量与实例变量,以及类方法与实例方法的区别。
文件保存要求:在D:盘新建文件夹“shiyan04”,在“D:\ 20120shiyan04”下新建文件夹“timu1”。
实验六内部类和异常类1.实验目的1、掌握内部类的常用方法2、掌握匿名类的常用方法3、掌握接异常类的常用方法2.实验内容1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。
1)实验1 红牛农场package four;public class RedCowForm {String formName;RedCow cow;//【代码1】//用内部类RedCow声明对象cowRedCowForm(){}RedCowForm(String s){cow=new RedCow(150,112,5000);//【代码2】//创建cowformName=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);}}}package four;public class MainClass {public static void main(String[] args) {RedCowForm form=new RedCowForm("红牛农场");form.showCowMess();}}2)实验2 检查危险品package four;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;}}package four;public class DangerException extends Exception{ String message;public DangerException(){message="危险品!";}public void toShow(){System.out.print(message+"");}}package four;public class Machine {Goods[] goods;public void checkBag(Goods goods) throws DangerException{ if(goods.isDanger){throw new DangerException();//【代码1】//用throw抛出一个DangerException的匿名类}}}package four;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].setDanger(false);goods[i].setName(name[i]);}else{goods[i].setDanger(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){e.toShow();//【代码2】//e调用toShow()方法System.out.println(goods[i].getName()+"被禁止!");}}}}3)实验3 内部类的使用方法package four;public class Outer{private static int size;/** 内部类Inner的声明 */public class Inner{private int size;/** 方法doStuff() */public void doStuff(int size){size=size+3;//【代码1】 //存取局部变量size加3this.size=size+2;//【代码2】 //存取其内部类的成员变量size加2Outer.this.size=size+1;//【代码3】存取其外部类的成员变量size加1System.out.println(size+" "+this.size+" "+Outer.this.size);}}//内部类Inner结束/** 类Outer中定义的实例方法testInner()方法 */public void testInner(){Inner i=new Inner();i.doStuff(size);//调用Inner类中的doStuff方法}/** main()方法 */public static void main(String args[]){Outer o=new Outer();o.testInner();//调用Outer类中的testInner方法}}//类Outer结束4)实验4 匿名类的使用方法package four;interface Square{ double getSquare(int n);}interface Sqrt{ public double getSqrt(int x);}class A{ void p(Square square){System.out.println(square);//输出getSquare方法计算后的结果}void k(Sqrt sqrt){System.out.println(sqrt);//输出getSqrt方法计算后的结果}}public class Anonymity{ public static void main(String args[]){A a=new A();a.p(null);//实现Square接口,重写getSquare方法,返回n的平方Sqrt sqrt=new Sqrt(){public double getSqrt(int x) {return Math.sqrt(x);}};//重写getSqrt方法,返回x的开平方根,用静态Math.sqrt方法来运算 System.out.println("计算开平方:"+sqrt.getSqrt(5));}}5)实验5 异常类使用方法package four;class MyException extends Exception{String message;MyException(String str){message=str;//把参数的引用传给message成员变量}public String getMessage(){return message;//返回message成员变量}}abstract class C{abstract int f(int x,int y) throws MyException;}class B extends C{int f(int x,int y) throws MyException{if(x<100&&y<100)//判断x、y都不大于100{throw new MyException("乘数超过100");//抛出一个新建的MyException对象,MyException对象中构造方法传入的参数内容为:乘数超过100}return x*y;}}public class eClass{public static void main (String args[]){C a;a = new B();//设计a对象的B类上转型对象try{System.out.println(a.f(12,10));a.f(150,250);//使用f()方法时传入一个大于100的乘数}catch(MyException e){System.out.println("x、y都不大于100");//输出错误信息 }}}2、设计编写程序完成以下任务。
1)假如要从命令行获得两个整数,自定义两个异常类来描述可能发生的异常:ParameterNumberException(参数个数异常),ParameterFormateException (参数格式异常),设计一个类,在check(String args[])方法中通告这两个异常,在main方法中判断相应的情况下触发异常,然后捕获异常,对它们进行处理。
(知识点:异常处理机制)判断长度和类型不准,相应条件分支抛出对应的自定义异常即可2)编写一个异常类MyException,在编写一个类Student,该类有一个产生异常的方法public void speak(int m)throws MyException,要求参数m的值大于1000时,方法抛出一个MyException对象。
最后编写一个主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。
3.实验步骤略4.评分标准1.A——内容功能完善,编程风格好,人机接口界面好;2.B——内容功能完善,编程风格良好,人机接口界面良好;3.C——完成必做内容;4.D——能完成必做内容;5.E——未按时完成必做内容,或者抄袭(雷同者全部为E).参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。