您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页02-01_实验手册

02-01_实验手册

来源:宝玛科技网


Java课程组

版本1.2

文档提供:java课程组 孟双英

修 改 记 录 修改时间 2009.8.25 2011.8.15

修改人 刘战洪 王伟 修改内容 文档创建 修改 目录

一、 内容概述 ....................................................................................................................... 4

二、实验内容 .................................................................................................................................... 4 2.1实验目的 ........................................................................................................................................ 4 2.2准备 ................................................................................................................................................ 4 2.3 实验步骤 ....................................................................................................................................... 4 2.4实验结论 ........................................................................................................................................ 8

一、 内容概述

本章讲解了Java中的封装、继承,介绍了Java中接口的实现,Java中方法的重写与重载以及super、final关键字。

二、实验内容

2.1实验目的

Java程序的整体组成有个认识:Java中继承的写法,理解父类与子类的概念,掌握方法重写与方法重载。通过实验验证类的加载过程以及对象的创建过程。通过实验理解初始化块,静态代码块,构造函数(父类与子类)的执行过程。

2.2准备

题目:圆形、三角形、方形 三个形状类,高宽等属性。需要能够计算周长,面积的成员方法。

要求:

(创建Circle、Triangle、Rectangle、Shape四个类,将其放入org.edu2act.shape包中。

创建Exp0105Test编写main()方法测试三个类。

其中圆的半径,三角形的三边,方形的长与宽都为double类型, 都不能为负(在构造函数中验证); 三角形三边关系: 任意两边之和都大于第三遍。 参考:已知三角形三边a b c求三角型面积S有如公式2.1:

2.3 实验步骤

分析问题:

根据题目要求提取相关类信息,得到如下类图。图2-1

Circle-radius: double+Circle()+Circle(double radius)+void setRadius(double radius)+double getRadius()+double getArea()+double getPerimeter()+double getArea()Rectangle-length: double-width: double+Rectangle()+Rectangle(double langth, double width)+double getLength()+void setLength(double length)+double getWidth()+void setWidth(double width)+double getPerimeter()+double getArea()-a: double-b: double-c: double+Triangle()+Triangle(double a, double b, double c)+double getPerimeter()+double getArea()Triangle

图2-1

步骤一: 创建一个Java项目

1、在自己本地硬盘某目录下新建一个名为02_01_EXP的Java项目。

2、在项目中创建Circle、Triangle、Rectangle、Shape、Exp0105Test四个类。

步骤二: 添加成员、方法与注释

步骤一 :

按照类图实现Shape类,添加其两个成员方法。

步骤二 :

按照类图为另外三个类添加成员,并实现方法。 例如Circle 使用extends关键字继承Shape,并重写了Shape的两个方法。下面实现这三个类。

package org.edu2act.shape; public class Circle extends Shape { } //字段 //初始化块 //静态代码块 //构造函数 //成员方法 代码 2-1

步骤三 :

初始化块,用法如代码 2-2。

编写初始化代码块,验证初始化代码块在父类构造函数执行后,本类构造函数调用之前执行。主要做一些对象层次初始化操作。

package org.edu2act.shape; public class Circle extends Shape { } ... { //初始化块代码区 } ... 代码 2-2

步骤四 :

静态代码块,用法如代码 2-3。

编写静态代码块,验证静态代码块在类加载时执行。做一些类层次的初始化工作。

public class Circle extends Shape { } ... static { //静态代码块代码区 } ... 代码 2-3

为了查看各类代码块的执行顺序。在块代码段中插入如下格式打印语句; *****的初始化块中:

System.out.println(\"*****类的初始化块执行了!\"); *****的静态代码块中:

System.out.println(\"*****类的静态代码块执行了!\"); *****的构造函数中:

System.out.println(\"*****类的构造函数执行了!\"); 步骤五 :

编写测试类:Exp0201Test测试类

创建三个图形类的实例,并调用其成员方法。验证执行顺序: 请看测试代码(代码 2-4):

1 package org.edu2act.shape; 2 3 public class Exp0201Test { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 Triangle t = new Triangle(3, 4, 5); 10 System.out.println(\"Triangle(3, 4, 5)的周长为:\" + t.getPerimeter()); 11 System.out.println(\"Triangle(3, 4, 5)的面积为:\" + t.getArea()); 12 13 Circle c = new Circle(3); 14 System.out.println(\"Circle(3)的半径:\" + c.getRadius()); 15 System.out.println(\"Circle(3)的周长:\" + c.getPerimeter()); 16 System.out.println(\"Circle(3)的面积:\" + c.getArea()); 17 18 Rectangle r = new Rectangle(4, 5); 19 System.out.println(\"Rectangle(4, 5)的周长:\" + r.getPerimeter()); 20 System.out.println(\"Rectangle(4, 5)的面积:\" + r.getArea()); 21 } 22 23} 代码 2-4

步骤六 :

运行过程分析main()函数第一行代码:

9 Triangle t = new Triangle(3, 4, 5); 将会执行以下这些操作:

1. 创建Triangle的实例时,先加载其父类Shape,再加载Triangle类。所以先执行Shape的静态代码块,然后是Triangle静态代码块。

2. 调用父类Shape的构造方法,在这之前先执行Shape的初始化块。然后执行Shape的构造方法。

3. 在父类构造函数执行完后,子类Triangle构造函数执行之前,执行Triangle的初始化块,然后执行Trangle的构造器。

然后是调用Triangle的成员方法计算周长与面积,并打印到控制台。 当执行到下面代码:

13 Circle c = new Circle(3); 会执行下面操作:

1. 加载Circle类,执行Circle静态代码块(由于Shape已经加载一次,所以这是不再加载,也不会再执行其静态代码块)。 2. 调用父类Shape的构造方法,在这之前先执行Shape的初始化块。然后执行Shape的构造方法。

3. 在父类构造函数执行完后,子类Triangle构造函数执行之前,执行Triangle的初始化块,然后执行Trangle的构造器。

下面过程与此类似。

2.4实验结论

通过实验,掌握继承的实际使用方式。以及继承中子类和父类的加载过程。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务