课程号:0541101适用专业:软件工程制定人:邓泓教研室:软件开发江西农业大学软件学院2010年1月Java组件设计实验指导书1前言一、上机实验目的上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解Java组件设计的基本结构和程序设计方法。通过亲手编程掌握Java组件设计的方法。二、实验基本内容为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了10个实验。学生可以在课内机时先完成指导书中给出的程序,理解所学的知识,在此基础上再编写其他应用程序。指导书中的10个实验如下:1.Java程序运行环境的下载、安装与配置。2.Java基本语法的编程练习。3.类与对象编程练习。4.包的设计练习。5.继承性和多态性练习。6.数组、字符串、向量的练习。7.异常处理。8.图形用户界面。9.输入输出与日期类10.图形与多媒体三、实验任务与时间安排《Java组件设计》是一门实践性很强的课程,除了在课内安排的实验外,鼓励同学在课外用相关技术进行编程练习。《Java组件设计》上机实验时间为20学时,与教学内容同时进行上机实验。20个上机学时分为10个实验。2实验要求一、可读性一个好的程序要具备可读性,可方便自己也可方便别人。所以,要培养一个良好的编程习惯,可注意以下几方面:1.代码的缩进;2.有效使用空格;3.简明的注释;4.意义明确的命名;5.着重表示的常量。二、亲手编写源程序在编写Java程序过程中,还可以利用一些可视化的开发工具,它们可以综合使用Java的编译器和调试器等,例如Symantec公司的VisualCafé、Kawa、Sun公司的JavaWorshop和JavaStudio、Inprise公司的JBuilder、微软的VisualJ++等,使用编程开发工具可以加快编程的速度。但在初始学习时还是最好亲手编写源程序,以便理解类和编程思想。三、立即运行程序编写的源程序要立即上机编译运行来检验程序中存在的问题。通过运行的结果验证程序的功能是否实现。有一些系统类的方法、变量也需要上机实验去了解它们的含义。3目录实验一塑型的练习................................................4实验二异常处理..................................................15实验三反射技术的练习............................................22实验四数据结构练习..............................................26实验五泛型的练习................................................29实验六配置组件..................................................35实验七Socket通信练习............................................39实验八日志组件..................................................48实验九JDBC连接数据库............................................65实验十JSON转换器...............................................74实验一塑型的练习4【开发语言及实现平台或实验环境】Windows2000或XP,JDK1.6与Jcreator4.0【实验目的】1.掌握塑型的概念2.掌握塑型的使用3.掌握塑型后的方法查找【实验要求】1.编写一个塑型的程序2.编写塑型后的方法查找的程序【实验内容】一、塑型的概念1、塑型又称为类型转换。塑型的方式:1)隐式(自动)的类型转换2)显式(强制)的类型转换2、塑型的对象包括1)基本数据类型:将值从一种形式转换成另一种形式2)引用变量:将对象暂时当成更一般的对象来对待,并不改变其类型引用变量只能被塑型为(1)任何一个父类类型(2)对象所属的类实现的一个接口(3)被塑型为父类或接口后,再被塑型回其本身所在的类3、隐式转换1)被塑型成更一般的类Employeeemp;emp=newManager();将Manager类型的对象直接赋给Employee类的引用变量,系统会自动将Manage对象塑型为Employee类2)被塑型为对象所属类实现的接口类型Carjetta=newCar();Insurableitem=jetta;4、显示转换Employeeemp;Managerman;emp=newManager();man=(Manager)emp;//将emp强制塑型为本来的类型二、塑型的应用publicclassA{publicvoida1(){System.out.println(Superclass);}}publicclassBextendsA{publicvoida1(){System.out.println(Childrenclass);//覆盖父类方法5}publicvoidb1(){}//B类定义了自己的新方法}publicclassC{publicstaticvoidmain(String[]args){Aa=newB();//向上转型a.a1();}}如果运行C,输出的是Superclass还是Childrenclass?不是你原来预期的Superclass,而是Childrenclass。这是因为a实际上指向的是一个子类对象。当然,你不用担心,Java虚拟机会自动准确地识别出究竟该调用哪个具体的方法。不过,由于向上转型,a对象会遗失和父类不同的方法,例如b1()。三、方法的查找如果在塑型前和塑型后的类中都提供了相同的方法,如果将此方法发送给塑型后的对象,那么系统将会调用哪一个类中的方法?分两种情况分析。1)实例方法的查找2)类方法的查找1、实例方法的查找从对象创建时的类开始,沿类层次向上查找classEmployee{publicvoidcomputePay(){System.out.println(调用Employee类中的computePay()方法);}}classManagerextendsEmployee{publicvoidcomputePay(){System.out.println(调用Manager类中的computePay()方法);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Managerman=newManager();Employeeemp1=newEmployee();Employeeemp2=(Employee)man;emp1.computePay();//调用Employee类中的computePay()方法man.computePay();//调用Manager类中的computePay()方法emp2.computePay();//调用Manager类中的computePay()方法}}6运行结果:调用Employee类中的computePay()方法调用Manager类中的computePay()方法调用Manager类中的computePay()方法2、类方法的查找总是在引用变量声明时所属的类中进行查找classEmployee{publicstaticvoidcomputePay(){System.out.println(调用Employee类中的computePay()方法);}}classManagerextendsEmployee{publicstaticvoidcomputePay(){System.out.println(调用Manager类中的computePay()方法);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Managerman=newManager();Employeeemp1=newEmployee();Employeeemp2=(Employee)man;emp1.computePay();//调用Employee类中的computePay()方法man.computePay();//调用Manager类中的computePay()方法emp2.computePay();//调用Employee类中的computePay()方法}}运行结果:调用Employee类中的computePay()方法调用Manager类中的computePay()方法调用Employee类中的computePay()方法实验二异常处理7【开发语言及实现平台或实验环境】Windows2000或XP,JDK1.6与Jcreator4.0【实验目的】1.了解Java中异常处理(exception)的作用。2.掌握异常处理的设计方法。【实验要求】1.理解系统异常处理的机制和创建自定义异常的方法。【实验步骤】一.了解异常处理机制1.错误与异常在程序执行期间,会有许多意外的事件发生。例如,程序申请内存时没有申请到、对象还未创建就被使用、死循环等,称为运行错误。根据错误的性质将运行错误分为错误与异常两种类型。(1)错误程序进入了死循环或内存溢出,这类现象称为错误或致命性错误。错误只能在编程阶段解决,运行时程序本身无法解决,只能依靠其它程序干预,否则会一直处于一种不正常的状态。(2)异常运算时除数为0,或操作数超出数据范围,打开一个文件时发现文件不存在,网络连接中断等等,这类运行错误现象称为异常。对于异常情况,可在源程序中加入异常处理代码,当程序出现异常时,由异常处理代码调整程序运行流程,使程序仍可正常运行直到正常结束。由于异常是可以检测和处理的,所以产生了相应的异常处理机制。而错误处理一般由系统承担。对于一个应用软件,异常处理机制是不可缺少的。程序员必须在程序中考虑每一个可能发生的异常情况并进行处理,以保证程序在任何情况下都能正常运行。事实证明,一个仔细设计了异常处理的程序,可以长时间的可靠运行,而不容易发生致命的错误,如程序被迫关闭、甚至系统终止等等。所以学会进行异常情况处理对于想编写功能完善且具有实用价值的程序员来说是必不可少的。2.异常发生的原因(1)Java虚拟机检测到了非正常的执行状态,这些状态可能是由以下几种情况引起的:·表达式的计算违反了Java语言的语义,例如整数被0除。·在载入或链接Java程序时出错。·超出了某些资源限制,例如使用了太多的内存。(2)Java程序代码中的throw语句被执行。(3)异步异常发生。异步异常的原因可能有:·Thread的stop方法被调用。·Java虚拟机内部错误发生。3.异常处理机制发生异常后,怎么处理异常呢?Java提供了异常处理机制来处理异常。分为两个步骤:(1)抛出异常Java是这样规定的:当语义限制被违反时,将会抛出(throw)异常,即产生一个异常事件,生成一个异常对象,并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常。一个异常对象可以由Java虚拟机来产生,也可以由运行的方法生成。异常对象中包含8了异常事件类型、程序运行状态等必要信息。(2)捕获异常异常抛出后,运行时系统从生成异常对象的代码开始,沿方法的调用栈进行查找,直到找到包含相应处理的方法代码,并把异常对象交给该方法为止,这个过程称为捕获(catch)异常。简单说异常处理机制就是:当语义限制被违反时,将会抛出异常对象,并将引起程序流程从异常发生点转移到程序员指定的处理异常方法代码处进行异常处理。二.了解异常对象的类型在异常发生后,系统会产生一个异常事件,生成一个异常对象,有哪些异常对象呢?这些异常对象来自哪些类呢?Java中的异常类具有层次结构组织。其中,Throwable类是Error错误类和Exception异常类的父类,它是O