《Java程序设计》实验指导书.doc_第1页
《Java程序设计》实验指导书.doc_第2页
《Java程序设计》实验指导书.doc_第3页
《Java程序设计》实验指导书.doc_第4页
《Java程序设计》实验指导书.doc_第5页
免费预览已结束,剩余170页可下载查看

下载本文档

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

文档简介

Java程序设计实验指导书付清波 张 军 编 广东商学院信息学院二00七 年 六 月 目 录实验项目一 Java面向对象特性试验3实验项目二 Java 异常处理及输入输出流技术试验44实验项目三 Java AWT及Swing应用开发试验79实验项目四 Java Applet及多线程开发实验98实验项目五 网络应用程序开发试验124实验项目六 Java数据库技术开发实验151附件1 Java程序设计课程实验教学大纲169实验项目一 Java面向对象特性试验1.1 预备知识1.1.1 Borland JBuilder 2005 开发运行环境介绍JBuilder 是由 Borland 公司开发的一款功能强大的可视化 Java 集成开发环境 , 可以快速开发包括复杂企业级应用系统在内的各种 Java 程序 , 包括独立运行程序、 Applet程序、Servlet、JSP、EJB、Web Service等。使用这款开发环境能够快速生成程序框架、设计图形界面、调试程序等。本书以Borlang JBuilder 2005为主要开发环境,下面将介绍JBuilder2005 的集成开发环境及其主要功能。(1) 安装说明。用户可以从 Borland 网站 /downloads/download-jbuilder.html直接下载相应的 JBuilder2005 安装程序 , 下载以后按照安装向导的提示进行安装即可。图1-3为 JBuilder2005 的启动界面(2) 集成开发环境介绍。启动 JBuilder2005, 进入 JBuilder2005 的工作界面 , 如图 1-4 所示。 JBuilder 的主工作界面由菜单栏、工具栏、内容窗口、工程窗口、结构窗口、消息显示窗口、状态栏等组成。l 菜单栏 : 菜单栏包含设计、开发、测试、配置和管理 Java 应用程序等多个菜单命令 , 主要由 “ 文件 ”、“编辑 ”、“查询 ”、“ 视图 ”、“运行 ” 等 12 个菜单组成。l 工具栏 : 工具栏位于 JBui1der 工作界面中菜单栏的下方 , 它以按钮形式提供了与菜单栏中菜单项相同的常用功能按钮 , 如 “文件 ”、“编辑 ”、“查询 ”、“编译 ”、“运行 / 调试 ”、“帮助 ” 等。l 内容窗口 : 内容窗口是用户使用最多的地方 , 可以在内容窗口中打开多个文 件 , 但在同一时刻只有一个文件处于活动状态 , 可以被编辑。内容窗口下方的文件视图标签用于在内容窗口中切换文件的各种视图 , 可以从内容窗口中看到处于活动状态的文件的源代码、设计方式、 Bean 方式、 UML 视图、文档和历史。l 工程窗口 : 工程窗口显示当前处于活动状态的工程的内容 , 主要包括工具条、 己打开工程的列表和包含当前工程所有文件的文件视图。l 结构窗口 : 结构窗口显示了当前在内容窗口中处于活动状态的文件的树形结构 , 内容包括类的所有类变量、方法、利用 import 语句包含的包和语法错误 ( 如果程序存在语法错误的话 ) 。根据内容窗口的不同文件视图标签的显示内容 , 在结构窗口将显示不同的文件结构。l 消息显示窗口 : 消息显示窗口显示工程的输出结果 , 如编译信息、查询信息、 运行时的提示信息或出错信息、调试器用户界面等内容。l 状态栏 : 状态栏显示相关框架的信息和特征以及当前处于活动状态的文件所做的动作。2. 使用 JBuilder 开发一个简单的 Appletl) 创建一个工程文件前面提到一个 Java 程序要有工程文件来装载 , 因此在建立一个 Applet 之前 , 首先要建立一个工程文件。方法和开发 Application 时介绍建立工程文件的步骤完全一样。 择菜单栏中的 File |New Project,JBuilder 将出现新建工程向导对话框 , 如图 1-28 所示。 将 Name 设为 HelloWorldApplet, 目录 Directory 设为用户希望存放的目录 ( 如 C:jbprojectHe1loWorldApplet),Template 使用默认值 , 然后进入 Next 对话框 , 接受所有默认选顷 , 进入“第 3 步”如图 1-29 所示。在 Class Javadoc fields 栏中填写相关文档注释信息 , 其他接受默认设置 , 单击 Finish 按钮完成工程文件的创建。2) 使用 Applet 向导建立 Java 源文件和相应 HTML 文件选择菜单栏中 File|New, 弹出新建文件对话框 , 在对象列表中选择 Web, 在出现对话框右部的选项中选择 App1et, 单击 OK 按钮 , 在弹出的 Applet 创建向导对话框的第 1 步中 , 设置 Applet 类的相关信息。将类名设为He1loWorldApplet,Package 设置为空 ,Base class 保持默认设置。第 1 步设置结果如图1-31 所示。单击 Next 按钮进入下一步。在 Applet 向导的第 2 步 , 可以为 Applet 添加相关参数, 但本实验任务不需要做任何参数的设置 , 所以直接单击 Next 按钮。在 Applet 向导的第 3 步 , 对 HTML文件做相应设置 , 将 HTML 页面 Title 设为HelloWorld HTML Test Page, 其他使用默认设置 ,单击 Next按钮。进入 Applet 向导的第 4 步 , 保持所有默认设置 , 单击 Finish 按钮。 在完成 Applet 向导的设置后 ,JBuilder 会生成一个 HelloWorldApplet.java 的模板文件和一个 HelloWorldApplet.html 的模板文件。3) 编写 HelloWorldApplet.java源代码进入内容窗口 , 在提供的源码模板基础上 , 修改相应源代码。编写好 HelloWorldApplet.java 源代码后 , 将其保存。HelloWorldApplet.html 程序代码由 JBuilder2005 根据设置自动生成 。 4)编译和运行 HelloWorldApplet 工程要运行 HelloWorldApplet 工程 , 首先应该编译 HelloWorldApplet.java程序。编译方法和开发 Application 时所介绍的编译方法相同 , 在工程窗口中 , 鼠标右键单击 HelloWorldApplet.java 文件 , 在弹出的下拉菜单中选择 Make 项。完成编译工作后 , 选择菜单栏 Run|Run Project, 运行 HelloWorldApplet 工程或直接使用快捷键 F9 执行运行命令。在 JBuilder Applet 测试工具中显示的工程运行结果。除此以外 , 还可以通过浏览器看到 Applet 在 Web 页面上的显示结果。方法为 : 双击 Project 窗口下的 HelloWorldApplet.html 文件 , 在工作界面的内容窗口中就可以看到 Applet 在 Web 页面中的显示结果 , 或者直接进入 HelloWorldApplet.html 的存放目录 ( 此处为 C: jbprojectHelloWorldApplet classes), 找到该文件并通过浏览器查看。点评 在HelloWorldApplet.java中使用paint()方法向Applet显示窗口输出信息,在定义的 paint() 方法内部通过调用setColor() 方法设置输出信息的颜色 , 而通过调用 drawString() 方法设置输出字符串的内容以及位置。1.1.2 Java 常用的输入和输出操作常用的 Java 语言的输入和输出有两大类可以实现 , 一种是 Java 的标准输入和输出流 , 取决于 java.lang.System 类 : 另一种是 javax.swing.JOptionPane 的对话框式的输入和 输出。在具体使用的时候 , 取决于用户的要求。当前, Javax.swing.JOptionPane 可以提供较好的界面处理 , 得到更广泛的使用。1.java 的标准输入和输出流Java.lang.System 类提供了 3 种有用的标准流 : 标准输入流 (System.in) 、标准输出流(System.out) 和标准出错流 (System.err) 。通过它们可以实现数据的输入和输出操作。System.in: 用于程序的输入 , 通常用于读取用户从键盘的输入或用户定义的输入设备的输入 。注意 : 在 JDK5.0 利用一个新增加的类 java.util.Scanner 结合 System.in 实现对指定数据的输入。如下形式 :Scanner scanner =new Scanner(System.in); 创建一个 Scanner 的对象 scanner, 使得该对象从 System.in 读入输入的数据。System.out: 用于程序的输出 , 通常用来在屏幕或用户指定的输出设备上显示信息。有两种典型的方法可以实现数据在屏幕上显示信息 :System.out.print(data) 和 System.out.println(data) 。其中 ,system.out.println(data) 是分行输出 data 数据到 屏幕或用户定义的输出设备 ,System.out.print(data) 仅仅是在当前位置输出数据: 注意 : 在 JDK 5.O 中 , 提供了 System.out.printf(format,data) 是按指定格式 format 的输出方式输出 data。System.err: 用于显示出错信息 , 可以采用System.err.print(data) 和 System.err.println(data), 将指定的 data 输出到指定的输出设备 , 默认设备为屏幕。2.javax.swing.JOptionPanejavax.swing.JOptionPane 能通过弹出一个标准对话框 , 来提示用户。往往可以利用它这个性质来实现具有对话框显示效果的数据输入和输出。 JOptionPane 类有 4 种常用方法实现对话框。showConfirmDialog(): 用于询问一个可确定的问题 ;showInputDialog(): 用于数据输入 ;showMessageDialog(): 提示用户某些信息 , 可以由用户定义。该方法的常用形式如下 : JOptionPane.showMessageDia1og(parentComponent,message,title,messageIconk) ;其中 parentComponet: 对话框的父组件 , 对话框所在的窗口 , 对话框的大小由内容决定 , 用 null 表示一个默认的窗口作为父组件 , 并且被放置在屏幕中央 ;message: 在对话框显示的信息 :title: 对话框的标题 :essageIcon: 对话框的显示图标 :showOptionDialog: 可以实现以上 3 种方法的综合功能。3.java.util.ScannerJava.util.Scanner 类可用于将文本转换成原语或字符串。 Scanner 的对象通过 next()系列方法将文本标识转换成不同类型的值。 Scanner 的对象往往和标准输入流 System.in 结合 , 允许用户通过标准输入流读入数据。例如 :1.1.3 类和对象类是用来创建对象的模板 , 是一组相似的对象实体共性的抽象。类中包含两大成员 , 其一是数据成员 , 也称为类的属性 , 不同的属性值使得同一个类的对象相互区别 : 其二是代码成员 , 也称为类的方法 , 方法是在类中用来完成某个任务的一组相关的代码。对象是类的实例化 , 或者说具体化 , 它是一种动态的概念 , 而类本身是一个静态的概念。1 类变量、实例变量类变量是有 static 修饰的变量 , 也称为静态变量 , 这种变量定义的是整 个类的共用属性 , 该类的所有对象共享这个变量 , 而实例变量定义了某个特定对象的属性 , 实例变量在类的每个对象中都有一份自己的备份。对某个对象实例变量的修改不会影响到该类的其他对象 , 而对类变量的修改却会影响到同类的所有对象。类变量常用来作为类的不同对象间交流和共享数据的工具。2 类方法、实例方法类方法是一个静态的概念 , 它的调用不一定要与某个实例对象相关联 ,而实例方法则是一个动态的概念 , 它的调用必须与某个实例对象相关联。类方法中不能使用实例变量 , 而实例方法则既可以使用类变量 , 也可以使用实例变量。注意 : 即使没有实例化类的任何对象 , 只要该类在执行时被加载到内存 中 , 该类的类变量和类方法就存在 , 并且可以通过类名来使用它们。3局部变量在方法中声明的变量称为局部变量 , 只在该方法内有效。它随着方法的调用而创建 , 当调用结束时则消亡。如果局部变量与封装该方法的类中的一个成员变量同名 , 则在该方法的作用域中 , 局部变量屏蔽类成员变量 , 若要在该方法中访问这个同名类成员变量 , 则可在其名称前加上 this 关键字。4 对象的创建、构造函数、new 运算符创建一个对象 , 就是创建一个类的实例。对象在创建的过程中会自动调用构造函数 , 构造函数的主要作用就是初始化对象的实例变量 , 构造函数必须以类的名字来命名 , 同时 , 不能为构造函数指定返回类型。创建对象需要采用 new 运算符 , 格式如下 :类型 对象名 =new 类型 () 或 类型 对象 =new 类型 ( 实参列表 ) 执行 new 运算将完成以下几项工作 :(1) 为对象动态地分配内存空间 ;(2) 调用对象的构造函数以初始化对象 ; (3) 以句柄的形式返回该对象的内存地址 ;(4) 将该句柄存储在对象变量中。注意 : 如果没有为类声明构造函数 , 则编译器会自动创建一个不带任何参数且函数体为空的默认构造函数 , 但一旦用户定义了自己的构造函数 , 编译器就不会自动创建默认的构造函数。另外一个类也可以包含多个重载的构造函数 , 使该类的对象能够以不同的方法进行初始化。5. 变量的作用域Java 语言中的变量按作用域划分可分成两种 , 成员变量 ( 类作用域 ) 和非成员变量 ( 方法作用域 ) 。成员变量是指类的静态变量和实例变量 , 非成员变量是指方法中的局部变量和参数。类的变量和方法属于该类的作用域 , 在类的作用域中 , 方法能直接通过成员名来访问类的成员。方法的作用域是从它的左括号开始直到右括号结束。在一个作用域中声明的变量对于该作用域外定义的代码是不可访问的。作用域可以进行嵌套 , 因此在方法中可以定义新的代码块 , 在这种情况下 , 外部作用域中声明的变量对于内部作用域中的代码是可见的 , 但是反过来内部作用域声明的变量对于外部作用域中的代码却是不可见的。X、y 是类成员变量 , 其作用域是整个类 ,m、 n 是方法中的局部变量 , 其作用域是该方法 , 而变量 k 是在方法中的嵌套块里声明的 , 因此只在该嵌套块里有效。6 函数重载函数重载是指在同一个类中可以创建二个或是多个同名的方法 , 这些同名方法的参数个数和类型不能完全相同。比如说可以编写两个同名的 Add 方法 , 其中一个是两个整型数相加 , 而另一个是两个实型数相加 ,Add(int x,int y),Add(float x,f1oat y), 系统能够自动根据调用实参的类型来决定使用哪一个 Add 方法。方法重载是 Java 实现多态性的一种方式。注意 : 在区别重载方法时 ,Java 不会考虑方法的返回值类型 , 如果两个同名方法有着完全相同的参数个数和类型 , 而仅仅是返回值类型不同 , 那么这不叫函数重载。7this 关键字在 Java 中对实例成员访问时必须有一个对象句柄作为引用。 this 关键字代表着类的当前对象的引用。 Java 在默认情况下隐含地包含了 this 关键字 , 因此类的方法可以直接访问类的成员。以下情况常常会使用 this 关键字 : 、在一个方法中 , 如果方法的参数或局部变量与类的某个成员变量同名 , 若想要访问这个类成员变量 , 则应使用 this 关键字 , 否则 , 将引用该方法的参数或局部变量。如果想要将当前的对象作为参数传递给其他的方法时 , 应使用 this 关键字。1.1.4 继承和多态1继承、超类、子类继承是面向对象编程的一个重要的概念 , 是软件重用的一种形式 , 通过继承 ,一个子类可以具有它的超类的属性和行为。创建子类的方式如下 :Class A extends B子类除了继承其超类的属性和方法外 , 还可对其超类进行扩展 , 创建子类自己的属性和方法。一个类可能是另一个类的子类 , 但同时又可能成为其他类的超类 , 这样一来 , 就形成了一种类的层次结构。Ei注意:Java只支持单重继承(指一个类只能有一个直接超类),而不支持多重继承。2子类的构造函数和关键字 super子类可以继承超类的所有非私有成员 , 然而构造函数却不能被继承 , 因此 , 子类要有自己的构造函数 , 子类的构造函数分为两部分 , 一部分用于构造超类的成员 , 另一部分用于构造子类自己的成员。对超类部分的构造要使用 Java 的 super 关键字。一个典型的子类构造函数如下所示 :子类构造函数构造 super() 显示地调用超类的默认或无参构造函数超类 或super(x,y,z,) 显示地调用超类的有参构造函数部分 或空 隐式地调用超类的默认或无参构造函数构造子类 部分注意 :super 必须总是放在子类构造函数的第一个语句执行。另外 , 如果超类中不包含默认或无参的构造函数 , 而子类构造器中又隐含地调用了它们时 , 就会产生编译错误。3 方法覆盖子类可以对超类的同名方法进行重写 , 从而覆盖掉超类中的同名方法。注意此时子类的方法必须与其所覆盖的超类方法具有完全相同的名字、参数和返回类型。当在子类中调用一个覆盖的方法时 , 总是调用子类自己定义的那个方法 , 而超类定义的那个方法将被隐蔽。如果此时要在子类中调用被覆盖的超类版本的方法时 , 就要使用关键字 super 。形式为 : super 成员方法。注意 : 方法覆盖与方法重载是不同的 , 重载是发生在一个类中有多个同名但参数不同的方法时 , 而覆盖是发生在当子类和超类的方法具有完全相同的名字、参数和返回类型时 , 从而子类将父类中的方法屏蔽掉。4抽象类和抽象方法包含有抽象方法的类叫作抽象类 , 抽象类只定义它的所有子类共享的通用格式 , 至 于实现的细节 , 则由它的具体子类来完成。抽象类在声明时需要以 abstract 加以修饰。abstract class 类名 抽象方法也是用 abstract 加以修饰 , 抽象方法定义时在其方法头后面只有一个分号 , 而没有定义方法体。abstract 返回类型 方法名 ( 参数表 ):超类的抽象方法是由子类在继承的时候来实现的 , 当一个子类继承一个抽象类时 ,它必须实现超类中所有的抽象方法 , 否则这个子类也必须被标识为 abstract 类型。因为 在一个类中 , 只要有一个抽象方法存在 , 该类就必须声明为 abstract 类。注意 : 抽象类是不能实例化的 , 如果用 new 去创建一个抽象类的对象 , 会产生编译错误。另外 , 包含抽象方法的类必须声明成抽象类 , 然而一个不包含任何抽象方法的类 , 也是可以声明成抽象类的。5多态性与动态绑定多态性是指具有同样的方法接口 , 却有不同的实现。在 Java 中超类往往定义出一个通用的方法 , 而其不同的实现则由它的不同的子类来完成。当通过对象来调用这样一个方法时 ,Java 会依据运行时该对象的实际类型来决定用方法的哪一个版本来执行 , 也即动态地绑定一个方法来执行。而动态绑定的前提是 Java 允许将子类对象赋给超类类型的变量 , 每个子类对象同时也是其超类的对象。利用多态性 , 可以将一个方法的形参设为超类类型 , 而将来传递给该方法的实参既 可以是超类对象也可以是其子类对象。具体执行时 ,Java 会自动根据实际对象所属的类型来选择方法执行 , 因此多态性增强了编程的灵活性和系统的维护性和可扩展性。6内部类、嵌套类、局部类、匿名类Java 允许在一个类中定义另一个类 , 即类的嵌套定义。通常在一个类里面定义的类叫作嵌套类 , 而直接包围它的类叫作外部类或包围类。嵌套类有两种类型 , 可以用 static 修饰符来修饰 , 即 static 嵌套类和非 static 嵌套类 , 非 static 嵌套类通常也叫作内部类 (inner class) 。1.static 嵌套类static 嵌套类可以直接访问外部类中的所有 static 成员 , 甚至包括 private 成员。但它不能直接访问外部类的实例成员。可以直接通过外部类名来访问该嵌套类。外部类的方法不能直接使用该嵌套类中的成员。 static 嵌套类可以被声明为 Public、 Private 、默认、Protected 、与类的其他成员一样 ,static 嵌套类遵循着相应的访问控制规则。2. 内部类内部类是非 static 的嵌套类。内部类能够直接访问外部类中的所有成员 ( 实例和静态 ) 。不过 , 内部类中不能定义任何静态成员 ; 可以通过外部类的对象来访问内部类。外部类的方法中不能直接使用内部类的成员。在内部类中可以使用 this 关键字 , 来引用当前的内部类对象 , 内部类可以声明为 Public、Private 、默认、 Protected, 并且遵循着和类的其他成员一样的访问控制规则。注意 : 由于 static 嵌套类只能直接访问其外部类中的 static 成员 , 而内部类则可以直接访问其外部类中的所有成员 (static 和非 static), 因而一般很少使用 static 嵌套类而是使用内部类。3. 局部类局部类也是嵌套类 , 但它不是作为类的成员来定义的 , 而是在类的某个代码块内部来定义 , 比如在类的一个成员方法中定义。局部类的概念有点像局部变量 , 因此 , 局部类只在它所定义的代码块中才是可见的 , 外部类无法感知它的存在。局部类可以访问其外部类的所有成员 , 然而除 final 局部变量外 , 它不能访问声明它的代码块中的其他局部 变量。4. 匿名内部类匿名内部类是一种特殊形式的局部类 , 它没有类名只有类体。匿名内部类常常用于 GUI 事件处理 , 以响应某个控件的事件。在使用医名内部类时必须使用它的一个实例 , 在使用匿名内部类时还有一些限制 :匿名内部类不能有构造函数。匿名内部类在实现某个接口时 , 必须实现该接口的所有方法。 匿名类中不能有任何静态成员。1.1.5 包、接口和常用工具1包Java 将程序中的类以包的形式组织起来 , 这些类在目的、范围、功能或继承性上是相关的。在一个包中 , 不仅有类 , 而且还有接口 , 同时还有子包 , 因此包具有像文件目录一样的层次结构。包结构为用户带来了以下好处 :(1) 使得程序的相关部分可以组成一个单元 , 便于管理。(2) 包使用户可以减少命名冲突。(3) 包将类和接口封装起来 , 有效地增强了访问控制的管理。 创建包结构可以划分为 3 个步骤 :(1) 首先 , 选择一个包名 , 包的名称是以层次结构进行组织的 , 每一层和下一层之间以一个点号隔开。特别注意的是包名是区分大小写的。例如 :Java.lang;Java.awt.Font(2) 创建好与包相对应的文件结构 , 比如说创建的包是 (com.Java.myclass,那么必须在类环境中建立一个同样的目录结构 ,comJavamyclass) 。(3) 编写类的时候 , 将该类加入到指定的包中 , 使用 package 表明 ,如下所示 :package com.Java.myclass对包的使用有 3 种情形 :(l) 如果想使用的类在某个包里 , 可以通过它的完整名即包名 + 类名的方式来实现。(2) 如果想使用的类是在 Java.lang 包中 , 那么可以直接通过类名来使用 , 而无须加入包名 , 因为该包中的所有类在程序中都默认自动可用。(3) 对于一些在程序中经常用到的非 Java.lang 包中的类 , 可以使用 import 声明导入单个类或整个包。一经导入 , 就可以直接通过类名来使用 , 而不必带上包名。例如 :import.java.util.*;导入 java.util 包中所有的 Public 类。2 接口接口是且只能是一组抽象方法和常量的集合 , 不能有具体方法和非 Final 变量 , 在 用法上它与抽象类有些相似。接口只定义需要做些什么 , 而不定义如何实现它。具体的实现是由实现它的类来完成的。接口是不能实例化的。以下是 Java 中接口的创建语法 :interface 接口名 常量 ; 抽象方法 ;Java 中接口的实现使用 implements 关键字其语法格式如下 :class 类名 implements 接口 1, 接口 2, .一个类实现接口时必须实现接口中所有的抽象方法 , 否则 , 只要有一个抽象方法还未实现 , 那么该类就是抽象类 , 并且不能实例化。接口像类一样 , 是在源文件中声明的 , 编译后也形成 class 文件 , 接口可以声明成一个变量 , 该变量能够引用任何实现了该接口的对象 , 当通过这个接口变量调用对象的方法时 , 执行的是该对象所实现的方法版本。接口与抽象类有相似之处 , 但也有区别 , 表 1-1 反映了两者的区别。表1-1 接口与抽象类的区别 接 口 抽 象 类数据只能是常量、 final 型可以有非 final 数据 所有方法都必须是 abstract 的 可以有甚至可以全部是非 abstract 的方法接口本身可以多重继承 抽象类只能单继承 接口往往是作为其实现类的一个成分 抽象类可作为某个子类的超类3Java 的预定义类Java 的 API 中包含大量预定义类 , 这些类被组织在不同的包中 , 编程时常用到的包是 Java 语言核心包 java.lang 和 Java 实用工具包 java.util 。 (l)Java 语言核心包 java.lang 提供了 Java 语言进行编程的许多基础类如 Math 类、基本类型的包装器类、处理日期和时间的 Date 类和 Calendar 类。Math 类。 Math 类是 Java.1ang 包中提供的一个执行常用数学计算的类 , 该类中包含着许多常用的数学计算方法如求绝对值、三角函数等。 Math 类中所提供的都是静态方法 , 因此可以直接通过类名来使用。基本类型的包装器类。Java 能将基本数据类型封装起来形成对象 , 从而产生出一组基本类型的包装器类。它们分别是 character、Byte、 Short、Integer、Long、 Float、 Double 和 Boolean 类。所有数值类型包装类都继承自 java.lang 包中的另一个类 Number, 它是数值类的超类。 (2)Java.util 包是 Java 的实用工具类库 , 在这个包中有许多实用的工具类和数据结构类 , 为编程提供了很大的方便 , 如日历类 Calendar 、数组类 Vector 。日历类 Calendar。Calendar 类是用来处理日期和时间的 , 可以用 Calendar 类来获取和设置当前的日期和时间。 Calendar 类中提供许多常量字段 , 如星期、月份、年份、小时、分、秒等。通过 Calendar 类的众多方法就可以对这些数据字段进行计算和操控。向量类 Vector。Vector 类是 java.util 包中的一个常用的数据结构类 , 它代表着一个动态对象数组 , 该数组的大小是可变的 , 可根据需要增加或减少容量 , 其次 , 该数组可以用来 存放任何对象。可以让 Vector 数组中存放 Object 类的引用变量以使它可以指向任何对象。1.2 实验内容实验 1 对象的创建和使用实验目的 :(1) 理解类的定义 ;(2) 掌握对象的声明 ;(3) 学会使用构造函数初始化对象 ;(4) 使用类的数据和方法。实验任务 :编写一个圆环类 Ring 的 Java 程序。圆环类有 3 个数据成员 , 分别是内半径 innerRadius, 外半径 outerRadius 和颜色 color, 这些属性可以查看 get 也可以重新设置 set, 另外 , 圆环还可以返回其面积 area 。实验步骤 :(1) 仔细阅读程序清单 1-1, , 并完成其中的代码1代码4程序清单1-1 Ring.javapublic class Ring private double innerRadius; private double outerRadius; public String color; public Ring(double iRadius, double oRadius, String c) innerRadius = iRadius;代码1 /初始化外半径 color = c; public double getInnerRadius( ) 代码2 / 返回内半径 public double getOuterRadius( ) return outerRadius; public void setInnerRadius(double iRadius) innerRadius = iRadius; public void setOuterRadius(double oRadius) outerRadius = oRadius; public void setColor(String c) 代码3 / 设置颜色 public double getArea() return (outerRadius * outerRadius - innerRadius * innerRadius) * 3.1415; public static void main(String args) Ring ring = new Ring(5,8,red);System.out.println(圆环的内半径: + ring.getInnerRadius( );System.out.println(圆环的外半径: + ring.getOuterRadius( );System.out.println(圆环的颜色: + ring.color); System.out.println(圆环的面积: + ring.getArea() + n);ring.setInnerRadius(4);代码4 /设置圆环ring的外半径为6ring.setColor(blue);System.out.println(圆环的内半径: + ring.getInnerRadius( );System.out.println(圆环的外半径: + ring.getOuterRadius( );System.out.println(圆环的颜色: + ring.color); System.out.println(圆环的面积: + ring.getArea(); (2) 打开文本编辑器 , 编辑 Ring.java 后保存 , 然后在JBuilder 2005 环境中编译并运行它 , 观察程序运行的结果。思考(1) 现在请将程序 Ring.java 中的语句Ring ring=new Ring (5,8,red);改成Ring ring=new Ring ();修改后编译运行 , 此时有错误发生吗 ? 分析错误的原因。(2) 接着为程序添加一个如下所示的默认构造函数 , 观察程序运行是否还有上述错误发生。public Ring () innerRadiusz=1.0, outerRadius=2.0; color=white; (3) 请把程序中的如下语句 :System.out.println( 圆环的内半径 :+riI1g.getInnerRadius(); system.out.println(“圆环的外径 :+riIIg.getouterRadius();改成System.out.println( 圆环的内半径 :+ring-innerRadius(),system.out.printiII( 圆环的外半径 :+ring-outerRadius();修改后编译 , 此时程序运行结果如何 , 应如何修改这个错误。(4) 现在请为该圆环类 Ring 再添加两个方法以便能返回内圆和外圆的周长 , 然后在主函数 main() 中分别创建两个对象 ring1,ring2 以显示周长。实验 2 类的静态成员与实例成员实验目的 :(l) 掌握静态成员与实例成员的区别 ;(2) 学会使用类的静态成员。实验任务 :编写一个圆类 Circle, 其中有圆周率 , 半径和圆对象个数 , 其中圆周率和圆对象个数为 static 成员 , 此外 ,Circle 中还有两个 static 方法分别是设置圆周率和显示当前圆对象个数的 , 其余都是实例成员 , 仔细体会静态成员与实例成员的使用方法和区别。实验步骤 :(l) 打开文本编辑器 , 按程序清单 1-2输入源程序 StaticTestJava。程序清单 1-2class Circle static double pi = 3.14; static int objectNo = 0; int radius; Circle(int r) radius=r; objectNo+; Circle( ) radius = 2; objectNo+; double getArea( ) return pi*radius*radius; static void setPI(double p) pi = p; void setRadius(int r) radius = r; static void displayNo( ) System.out.println(当前圆对象个数是: + objectNo); public class StaticTest public static void main( String args ) Circle cir1 = new Circle(5); System.out.println(cir1圆周率是: + cir1.pi); System.out.println(cir1的半径是: + cir1.radius); System.out.println(cir1的面积是: + cir1.getArea(); cir1.displayNo(); cir1.setRadius(10); Circle cir2 = new Circle( ); cir2.setPI(3.1415); System.out.println(cir1圆周率是: + cir1.pi); System.out.println(cir1的半径是: + cir1.radius); System.out.println(cir2的半径是: + cir2.radius); System.out.println(cir2的面积是: + cir2.getArea(); cir2.displayNo(); (2) 编辑源程序并保存,然后在JBuilder 2005 环境中形成两个 class 文件 ,StaticTest.class 和 Circle.class, 编译运行主类 StaticTest.class, 观察程序运行结果。思考(l) 请将程序中的语句 :System.out.printin(cirl 圆周率是 :+Cid-pi), Cid.displayNo();改成System.out.println(cirl 圆周率是 :+Circle-pi); Circle.displayNo();修改后编译运行 , 程序会报错吗 ? 为什么 ? 接着如果将语句 Cirl.setRadius(10) 改成 Circle.setRadius(10) 情况又会怎样呢 ?(2) 现在请将圆周率pi的 static 修饰符去掉 , 使之成为实例变量 , 修改后编译运行 , 会报错吗 ? 产生错误的原因是什么 ? 可以试着同时将方法 setPI(double p) 前面的 static 也去掉 , 看编译是否仍有错误 ?(3) 程序中的数据成员 objectNo 为什么要设置成 static 类型 , 它的作用是什么 ? (4) 现在请在主方法 main() 中声明并创建一个 Circle 类型的对象数组 cirs, 然后调用 displayNo() 方法 , 观察程序运行的结果。Circlecirs=new Circle5for (int i=0;icirs.length;i+)cirsi=new Circle();点评 这个程序很好地揭示了实例成员与静态成员的区别 , 静态变量可以在类的所有对象之间共享 , 如同本例中的 objectNo 和 Pi, 其中 objectNo 始终记录着当前该类的对象个数 , 而对静态变量 Pi 的修改则会影响到该类的所有对象。此外 , 对于静态成员可以直接用类名来访问。实验 3 变量的作用域和 this 关键字 实验目的 :(1) 理解变量的作用域 ;(2) 掌握成员变量 , 局部变量和块变量的区别 ;(3) 学会使用 this 关键字。实验任务 :编写一个 Java 程序 ScopeTest 以反映变量的种类及其作用范围 , 类 ScopeTest 中既有类的成员变量 , 又有方法中的局部变量和参数 , 甚至还有在方法内部的块中声明的变量 , 仔细体会这些变量的差异及其用法。实验步骤 :打开文本编辑器 , 将程序清单1-3 输入到计算机中。程序清单1-3 ScopeTest.javaclass ScopeTest int x; static int m=0; void show( ) int x=8, y;for (y=0; y2; y+) int z=5; System.out.println(z = + z); z = 10; System.out.printl

温馨提示

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

评论

0/150

提交评论