江西农大java组件设计实验指导书_第1页
江西农大java组件设计实验指导书_第2页
江西农大java组件设计实验指导书_第3页
江西农大java组件设计实验指导书_第4页
江西农大java组件设计实验指导书_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java组件设计实验指导书课 程 号:0541101适用专业:软件工程制 定 人: 邓泓教 研 室: 软件开发江西农业大学软件学院2010 年1 月前言一、 上机实验目的上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解Java组件设计的基本结构和程序设计方法。通过亲手编程掌握Java 组件设计的方法。二、 实验基本内容为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了10 个实验。学生可以在课内机时先完成指导书中给出的程序,理解所学的知识,在此基础上再编写其他应用程序。指导书中的10 个实验如下:1Java 程序运行环境的下载、安装与配置。2Java

2、基本语法的编程练习。3类与对象编程练习。4包的设计练习。5继承性和多态性练习。6数组、字符串、向量的练习。7异常处理。8图形用户界面。9输入输出与日期类10图形与多媒体三、实验任务与时间安排Java组件设计是一门实践性很强的课程,除了在课内安排的实验外,鼓励同学在课外用相关技术进行编程练习。Java 组件设计上机实验时间为20学时,与教学内容同时进行上机实验。20个上机学时分为10个实验。实验要求一、可读性一个好的程序要具备可读性,可方便自己也可方便别人。所以,要培养一个良好的编程习惯,可注意以下几方面:1 代码的缩进;2 有效使用空格;3 简明的注释;4 意义明确的命名;5 着重表示的常量。

3、二、亲手编写源程序在编写Java 程序过程中,还可以利用一些可视化的开发工具,它们可以综合使用Java 的编译器和调试器等,例如Symantec 公司的Visual Café、Kawa、Sun 公司的Java Worshop 和Java Studio、Inprise 公司的JBuilder、微软的Visual J+等,使用编程开发工具可以加快编程的速度。但在初始学习时还是最好亲手编写源程序,以便理解类和编程思想。三、立即运行程序编写的源程序要立即上机编译运行来检验程序中存在的问题。通过运行的结果验证程序的功能是否实现。有一些系统类的方法、变量也需要上机实验去了解它们的含义。目 录实验

4、一 塑型的练习4实验二 异常处理15实验三 反射技术的练习22实验四 数据结构练习26实验五 泛型的练习29实验六 配置组件35实验七 Socket通信练习 39实验八 日志组件48实验九 JDBC连接数据库65实验十 JSON转换器74实验一 塑型的练习【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Jcreator4.0 【实验目的】1掌握塑型的概念2掌握塑型的使用3掌握塑型后的方法查找【实验要求】1编写一个塑型的程序2编写塑型后的方法查找的程序【实验内容】一、塑型的概念1、塑型又称为类型转换。塑型的方式:1)隐式(自动)的类型转换2)显式(强制)的类型转换2

5、、塑型的对象包括1)基本数据类型:将值从一种形式转换成另一种形式2)引用变量:将对象暂时当成更一般的对象来对待,并不改变其类型引用变量只能被塑型为(1) 任何一个父类类型(2) 对象所属的类实现的一个接口(3) 被塑型为父类或接口后,再被塑型回其本身所在的类3、隐式转换1)被塑型成更一般的类Employee emp; emp = new Manager(); 将Manager类型的对象直接赋给Employee类的引用变量,系统会 自动将Manage对象塑型为Employee类2)被塑型为对象所属类实现的接口类型Car jetta = new Car(); Insurable item = je

6、tta; 4、显示转换Employee emp; Manager man;emp = new Manager();man = (Manager)emp; /将emp强制塑型为本来的类型二、塑型的应用public class A public void a1()        System.out.println("Superclass");public class B extends A public void a1()        System.out

7、.println("Childrenclass"); /覆盖父类方法       public void b1() /B类定义了自己的新方法public class C public static void main(String args)        A a = new B(); /向上转型       a.a1();如果运行C,输出的是Superclass 还是Childrenclass?

8、不是你原来预期的Superclass,而是Childrenclass。这是因为a实际上指向的是一个子类对象。当然,你不用担心,Java虚拟机会自动准确地识别出究竟该调用哪个具体的方法。不过,由于向上转型,a对象会遗失和父类不同的方法,例如b1()。三、方法的查找如果在塑型前和塑型后的类中都提供了相同的方法,如果将此方法发送给塑型后的对象,那么系统将会调用哪一个类中的方法?分两种情况分析。1)实例方法的查找2)类方法的查找1、实例方法的查找从对象创建时的类开始,沿类层次向上查找 class Employee public void computePay() System.out.println(

9、"调用Employee类中的computePay()方法"); class Manager extends Employee public void computePay() System.out.println("调用Manager类中的computePay()方法"); public class Test public static void main(String args) Manager man = new Manager(); Employee emp1 = new Employee(); Employee emp2 = (Employee)

10、man; putePay(); / 调用Employee类中的computePay()方法 putePay(); / 调用Manager类中的computePay()方法 putePay(); / 调用Manager类中的computePay()方法 运行结果:调用Employee类中的computePay()方法 调用Manager类中的computePay()方法 调用Manager类中的computePay()方法2、类方法的查找总是在引用变量声明时所属的类中进行查找 class Employee public static void computePay() System.out.pr

11、intln("调用Employee类中的computePay()方法"); class Manager extends Employee public static void computePay() System.out.println("调用Manager类中的computePay()方法"); public class Test public static void main(String args) Manager man = new Manager(); Employee emp1 = new Employee(); Employee emp2

12、 = (Employee)man; putePay(); / 调用Employee类中的computePay()方法 putePay(); / 调用Manager类中的computePay()方法 putePay(); / 调用Employee类中的computePay()方法 运行结果:调用Employee类中的computePay()方法 调用Manager类中的computePay()方法 调用Employee类中的computePay()方法实验二 异常处理【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Jcreator4.0 【实验目的】1 了解Java

13、 中异常处理(exception)的作用。2 掌握异常处理的设计方法。【实验要求】1. 理解系统异常处理的机制和创建自定义异常的方法。【实验步骤】一了解异常处理机制1 错误与异常在程序执行期间,会有许多意外的事件发生。例如,程序申请内存时没有申请到、对象还未创建就被使用、死循环等,称为运行错误。根据错误的性质将运行错误分为错误与异常两种类型。(1)错误程序进入了死循环或内存溢出,这类现象称为错误或致命性错误。错误只能在编程阶段解决,运行时程序本身无法解决,只能依靠其它程序干预,否则会一直处于一种不正常的状态。(2)异常运算时除数为0,或操作数超出数据范围,打开一个文件时发现文件不存在,网络连接

14、中断等等,这类运行错误现象称为异常。对于异常情况,可在源程序中加入异常处理代码,当程序出现异常时,由异常处理代码调整程序运行流程,使程序仍可正常运行直到正常结束。由于异常是可以检测和处理的,所以产生了相应的异常处理机制。而错误处理一般由系统承担。对于一个应用软件,异常处理机制是不可缺少的。程序员必须在程序中考虑每一个可能发生的异常情况并进行处理,以保证程序在任何情况下都能正常运行。事实证明,一个仔细设计了异常处理的程序,可以长时间的可靠运行,而不容易发生致命的错误,如程序被迫关闭、甚至系统终止等等。所以学会进行异常情况处理对于想编写功能完善且具有实用价值的程序员来说是必不可少的。2 异常发生的

15、原因(1)Java 虚拟机检测到了非正常的执行状态,这些状态可能是由以下几种情况引起的:·表达式的计算违反了Java 语言的语义,例如整数被0 除。·在载入或链接Java 程序时出错。·超出了某些资源限制,例如使用了太多的内存。(2)Java 程序代码中的throw 语句被执行。(3)异步异常发生。异步异常的原因可能有:·Thread 的stop 方法被调用。·Java 虚拟机内部错误发生。3异常处理机制发生异常后,怎么处理异常呢?Java 提供了异常处理机制来处理异常。分为两个步骤:(1)抛出异常Java 是这样规定的:当语义限制被违反时,将

16、会抛出(throw)异常,即产生一个异常事件,生成一个异常对象,并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常。一个异常对象可以由Java 虚拟机来产生,也可以由运行的方法生成。异常对象中包含了异常事件类型、程序运行状态等必要信息。(2)捕获异常异常抛出后,运行时系统从生成异常对象的代码开始,沿方法的调用栈进行查找,直到找到包含相应处理的方法代码,并把异常对象交给该方法为止,这个过程称为捕获(catch)异常。简单说异常处理机制就是:当语义限制被违反时,将会抛出异常对象,并将引起程序流程从异常发生点转移到程序员指定的处理异常方法代码处进行异常处理。二了解异常对象的类型在异常发生后,

17、系统会产生一个异常事件,生成一个异常对象,有哪些异常对象呢?这些异常对象来自哪些类呢?Java 中的异常类具有层次结构组织。其中,Throwable 类是Error 错误类和Exception 异常类的父类,它是Object 的直接子类。RuntimeException 运行时异常类是Exception 异常类的子类。如图2.1所示。图2.11.Exception 异常类的子类(1)RuntimeException 运行时异常类,主要包括以下异常子类:·ArithmeticException 算术异常类:表示遇到了异常的算术问题,例如被0 整除。·ArrayStoreExc

18、eption 数组下标越界异常类:试图把与数组类型不相符的值存人数组。·ClassCastException 类型强制转换异常类:试图把一个对象的引用强制转换为不合适的类型。·IndexOutOfBoundsException 下标越界异常类:下标越界。·NullPointerException 空指针异常类:试图使用一个空的对象引用。·SecurityException 违背安全原则异常类:检测到了违反安全的行为。(2)NoSuchMethodException 方法未找到异常(3)java.awt.AWTException 图形界面异常类(4)jav

19、a.io.IOException 输入输出异常类·IOException:申请I/O 操作没有正常完成。·EOFException:在输入操作正常结束前遇到了文件结束符。·FileNotFoundException:在文件系统中,没有找到由文件名字符串指定的文件。(5)Exception 异常类的其它子类·EmptyStackException:试图访问一个空堆栈中的元素。·NoSuchFieldException:试图访问一个不存在的域。·NoSuchMethodException:试图访问不存在的方法。·ClassNot

20、FoundException:具有指定名字的类或接口没有被发现。·CloneNotSupportedException:克隆一个没有实现Cloneable 接口的类。·IllegalAccessException:试图用给出了完整的路径信息的字符串加载一个类,但是当前正在执行的方法无法访问指定类,因为该类不是public 类型或在另一个包中。·InstantiationException:试图使用Class 的newInstance 方法创建一个对象实例,但指定的对象没有被实例化,因为它是一个接口、抽象类或者一个数组。·InterruptedExcept

21、ion:当前的线程正在等待,而另一个线程使用了Thread 的interrupt 方法中断了当前线程。2Error 错误类的子类(1)VirtualMachineError 虚拟机错误l OutOfMemoryError 内存溢出错误l StackOverflowError 栈溢出错误(2) LinkageError 链接错误l NoClassDefNotFoundError 类定义未找到错误(3) java.awt.AWTError 图形界面错误三使用trycatch 语句处理异常1异常类型匹配的处理方式(1)程序功能: 首先说明" 这是一个异常处理的例子", 然后在程序

22、中主动产生一个ArithmeticException 类型被0 除的异常, 并用catch 语句捕获这个异常。最后通过ArithmeticException 类的对象e 的方法getMessage 给出异常的具体类型并显示出来。(2)编写使用 trycatch 语句处理异常的程序文件LX2_1.java,源代码如下。public class LX2_1public static void main(String arg3) System.out.println("这是一个异常处理的例子n");try int i=10;i /=0;catch (ArithmeticExcep

23、tion e) System.out.println("异常是:"+e.getMessage();finally System.out.println("finally 语句被执行");(3)编译并运行程序,结果如图2.2 所示。图2.2注意:如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception 是ArithmeticException 的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。2异常类型不匹配的程序(1

24、)编写一个catch 语句中声明的异常类型不匹配的程序LX2_2.java,源代码如下。public class LX2_2public static void main(String args) System.out.println(“这是一个异常处理的例子n”);try int i=10;i /=0;catch (IndexOutOfBoundsException e) System.out.println("异常是:"+e.getMessage();finally System.out.println("finally 语句被执行");(2)编译并

25、运行程序LX2_2,结果如图4.8 所示。因为LX2_2 程序试图捕获一个异常类为IndexOutOfBoundsException 的异常,但发生的异常却是ArithmeticException 类,所以,程序可以通过编译但在运行时,系统会给出异常报告:报告所发生的但没有被捕获的异常。不过在此之前,其它语句和finally 语句将会被执行。结果如图2.3 所示。图2.33包含多个catch 子句的异常处理程序(1)程序功能:在try 子句中设计两个可能出现的异常,当a 为0 时会发生异常。另外一个是肯定的异常,因为数组c 的长度为1,定义c42是为法的。通过两个catch 子句分别来捕获异常

26、。(2)编写包含多个catch 子句的LX2_3.java 程序,源代码如下。public class LX2_3public static void main(String args) try int a=args.length;System.out.println("na = "+a);int b=42/a;int c=1;c42=99;catch (ArithmeticException e) System.out.println("发生了被 0 除:"+e);catch (ArrayIndexOutOfBoundsException e) Sys

27、tem.out.println("数组下标越界:"+e);(3)实验下面两种情况:1) 在程序运行时不输入参数,则args.length 的值为0,这将引起一个被0 除异常。其结果如图2.4 所示。图2.42) 在运行程序时,输入22,将不会引起被0除异常,但会引起一另一个异常即数组下标越界ArrayIndexOutOfBoundsException。因为整型数组只有一个元素c0,程序中却要使用c42,这将发生数组下标越界。运行结果如图2.5 所示。图2.5四使用throw 语句抛出异常1 throw 语句的作用在上面的实验中,可以发现,异常对象是Java 运行时由系统抛出

28、的。抛出异常也可以通过使用throw 语句实现。throw 是Java 语言的关键字,用来告知编译器此处要发生一个异常。throw 后面要跟一个新创建的异常类对象,用于指出异常的名称和类型。throw 语句格式为:<throw> <new> <异常对象名()>程序会在throw 语句处立即终止,转向trycatch 寻找异常处理方法,不再执行throw 后面的语句。2 throw 语句的使用(1)编写带有throw 语句的程序TC5.java,源代码如下。public class LX2_4 static void throwProcess() try th

29、row new NullPointerException("空指针异常");catch (NullPointerException e) System.out.println("n 在 throwProcess 方法中捕获一个"+e.getMessage();throw e;public static void main(String args) try throwProcess();catch (NullPointerException e) System.out.println("再次捕获:"+e);(2)编译并运行程序,结果如图

30、2.6 所示。图2.6(3)程序执行流程程序首先调用throwProcess 方法,明确地抛出了一个NullPointerException 异常并将其命名为“空指针异常”。然后程序流程将转向throwProcess 方法中的catch 子句,输出一条信息。throwProcess方法的catch 子句又抛出了一个同样的异常e。然后结束throwProcess 方法的调用,执行main 方法中的catch 子句,再次捕获这个异常。五使用throws 子句1throws 子句的作用throws 子句一般用来表明在使用该方法时可能抛出异常但不捕获的异常。异常由系统来处理。throws 子句也可以指

31、出抛出异常是RuntimeException 或自定义异常类,即异常的类型,以便准备调用其它方法捕获它,这种情况一般需要两个方法来分别处理抛出异常和处理异常。2只是在方法中抛出异常的程序对于程序中无法处理的异常,可以使用throws 子句在方法中抛出异常交由系统处理。(1)程序功能:在程序中打开文件a3.txt,因为该文件可能不存在或路径不对,所以存在IOException 类型异常的可能,因此这里使用throws 来抛出异常。(2)编写只是抛出异常的程序文件LX2_5.java,源代码如下。import java.io.*;public class LX2_5public static vo

32、id main (String args) throws IOExceptionFileInputStream fis = new FileInputStream("a3.txt");(3)编译并运行程序,如果该文件在当前目录中不存在,将由系统自动给出异常报告,如图2.7所示。 图2.73带有捕获处理的throws 子句(1)程序功能:在这个程序中的mathod 方法中使用throws 子句抛出异常,在main 方法中捕获处理异常。(2)TC6.java,源代码如下。import java.io.*;public class LX2_6static void mathod(

33、) throws IllegalAccessException System.out.println("n 在 mathod 中抛出一个异常");throw new IllegalAccessException();public static void main(String args) try mathod();catch (IllegalAccessException e) System.out.println("在 main 中捕获异常:"+e);(3)编译并运行程序,结果如图2.8 所示。图2.8六使用finally 子句1 finally 子句

34、的作用当一个异常被抛出时,程序的执行流程就不再是连续的了,会跳过某些语句,甚至会由于没有与之匹配的catch 子句而过早地返回,结束程序的运行。为了确保一段代码不管发生什么异常都能被执行,可以使用finally 子句。每个try 语句至少都要有一个与之相配的catch 或finally 子句。从一个方法中返回到调用它的另外一个方法,可以通过return 语句或通过一个没有被捕获的异常,但finally 子句总是在返回前被执行。2 创建使用finally 子句的程序文件LX2_7.java。(1)程序功能:在类LX2_7 的mathodA 方法中使用try 子句捕获异常,使用finally 子句

35、处理异常。在类LX2_6 的main 方法中使用try 子句捕获mathodA 异常,(2)编写LX2_7.java 程序,源代码如下。class LX2_7static void mathodA() try System.out.println("nmathodA 抛出一个异常");throw new RuntimeException();finally System.out.println("执行 mathodA 的 finally");static void mathodB() trySystem.out.println("mathodB

36、 正常返回");return;finally System.out.println("执行 mathodB 的 finally");public static void main(String args) try mathodA(); catch (Exception e) mathodB(); (3)编译并运行该程序,结果如图2.9 所示。图2.9【思考题】1. 什么是异常?异常处理机制有什么作用?异常处理有哪些方式。实验三 反射技术的练习【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Jcreator4.0 【实验目的】1掌握反射

37、的概念2掌握反射所使用的类3掌握反射的功能4掌握反射的作用5了解反射的缺点【实验要求】1编写得到反射类的属性和方法的程序2编写验证反射类功能的程序【实验内容】一、 反射概念反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD+ 、OpenC+ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种

38、机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。Java 的这一能力在实际应用中用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。Reflection 是 Java 被视为动态(或准动态)语言的关键,允许程序于执行期取得任何已知名称之 class 的內部信息,包括 package、type parame

39、ters、superclass、implemented interfaces、inner classes, outer class, fields、constructors、methods、modifiers,并可于执行期生成instances、变更 fields 內容或唤起 methods。二、Java类反射中所必须的类: Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,下面我将对这些类做一个简单的说明。 Field类:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)属性或实例属性,

40、简单的理解可以把它看成一个封装反射类的属性的类。 Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。 Method类:提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。 这个类不难理解,它是用来封装反射类方法的一个类。 Class类:类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对

41、象。 Object类:每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。三、Java的反射类的功能:例1:通过Java的反射机制得到类信息。import java.awt.event.ActionListener;   import java.awt.event.ActionEvent;   class A extends Object implements ActionListener   private int a = 3;   public Integer b = new Inte

42、ger(4);   public A()   public A(int id,String name)   public int abc(int id,String name)return 0;   public void actionPerformed(ActionEvent e)      它继承了Object类,有一个接口是ActionListener,两个属性int和Integer,两个构造方法和两个方法。 下面我们把A这个类作为一个反射类,来得到A类中的属性和属性值

43、。import java.lang.reflect.*;   class B   public static void main(String args)   A r = new A();   Class temp = r.getClass();   try   System.out.println("反射类中所有公有的属性");   Field fb =temp.getFields();   for(int j=0

44、;j<fb.length;j+)   Class cl = fbj.getType();   System.out.println("fb:"+cl);      System.out.println("反射类中所有的属性");   Field fa = temp.getDeclaredFields();   for(int j=0;j<fa.length;j+)   Class cl = faj.get

45、Type();   System.out.println("fa:"+cl);      System.out.println("反射类中私有属性的值");   Field f = temp.getDeclaredField("a");   f.setAccessible(true);   Integer i = (Integer)f.get(r);   System.out.println(i)

46、;   catch(Exception e)   e.printStackTrace();             运行结果:这里用到了两个方法,getFields()、getDeclaredFields(),它们分别是用来获取反射类中所有公有属性和反射类中所有的属性的方法。另外还有getField(String)和getDeclaredField(String)方法都是用来过去反射类中指定的属性的方法,要注意的是getField方法只能取到反射类中公有的属性,而g

47、etDeclaredField方法都能取到。这里还用到了Field 类的setAccessible方法,它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false。另外 Field类还有set(Object AttributeName,Object value)方法,可以改变指定属性的值。例2:获取反射类中的构造方法import java.lang.reflect.*;   public class SampleConstructor    public static void main(String args) &

48、#160;  A r = new A();   printConstructors(r);      public static void printConstructors(A r)    Class c = r.getClass();   /获取指定类的类名   String className = c.getName();   try    /获取指定类的构造方法   Constructor theC

49、onstructors = c.getConstructors();   for(int i=0; i<theConstructors.length; i+)    /获取指定构造方法的参数的集合   Class parameterTypes = theConstructorsi.getParameterTypes();   System.out.print(className + "(");   for(int j=0; j<parameterTypes.len

50、gth; j+)   System.out.print(parameterTypesj.getName() + " ");   System.out.println(")");      catch(Exception e)    e.printStackTrace();            运行结果:A(int java.lang.String)A() 这个例子只是用get

51、Constructors()方法获取了反射类的构造方法的集合,并用Constructor类的getParameterTypes()获取该构造方法的参数。例3:获取一下反射类的父类(超类)和接口import java.io.*;   import java.lang.reflect.*;   public class SampleInterface    public static void main(String args) throws Exception    A raf = new A(); 

52、60; printInterfaceNames(raf);      public static void printInterfaceNames(Object o)    Class c = o.getClass();   /获取反射类的接口   Class theInterfaces = c.getInterfaces();   for(int i=0; i<theInterfaces.length; i+)   System.out.print

53、ln(theInterfacesi.getName();   /获取反射类的父类(超类)   Class theSuperclass = c.getSuperclass();   System.out.println(theSuperclass.getName();         运行结果:Java.awt.event.ActionListenerJava.lang.Object这个例子用Class类的getInterfaces()方法获取反射类的所有接口,由于接口可以有多

54、个,所以它返回一个 Class数组。用getSuperclass()方法来获取反射类的父类(超类),由于一个类只能继承自一个类,所以它返回一个Class对象。例4:获取一下反射类的方法import java.lang.reflect.*;   public class SampleMethod    public static void main(String args)    A p = new A();   printMethods(p);      public sta

55、tic void printMethods(Object o)    Class c = o.getClass();   String className = c.getName();   Method m = c.getMethods();   for(int i=0; i<m.length; i+)    /输出方法的返回类型   System.out.print(mi.getReturnType().getName();   /输出方法名

56、60;  System.out.print(" "+mi.getName()+"(");   /获取方法的参数   Class parameterTypes = mi.getParameterTypes();   for(int j=0; j<parameterTypes.length; j+)   System.out.print(parameterTypesj.getName();   if(parameterTypes.length&

57、gt;j+1)   System.out.print(",");         System.out.println(")");            运行结果:这个例子获得了反射类的所有方法,包括继承自它父类的方法。然后获取方法的返回类型、方法名和方法参数。四、Java的反射类的作用:通过上一节,可以获取反射类的属性、构造方法、父类、接口和方法,但获取这些信息有什么用处?下面我写一个比较完整的

58、小例子,来说明Java的反射类的功能!import java.lang.reflect.Constructor;   import java.lang.reflect.Method;   public class LoadMethod    public Object Load(String cName,String MethodName,String type,String param)   Object retobj = null;   try    /加载指定的Java类   Class cls = Class.forName(cName);   /获取指定对象的实例   Constructor ct = cls.getConstructor(null);   Object obj = ct.newIn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论