实验六 高级类设计

  • 格式:doc
  • 大小:185.00 KB
  • 文档页数:14

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六高级类设计

一、实验目的

通过实验验证类的高级特性的相关语法,掌握类的静态域、静态方法,包,掌握接口的定义和实现方法,掌握异常的使用方法。

二、实验要求

1. 了解Java 系统包的结构。

2. 掌握创建自定义包的方法。

3. 掌握使用系统接口的技术和创建自定义接口的方法。

4. 理解系统异常处理的机制和创建自定义异常的方法。

三、实验设备

计算机、JCreator 、JDK

四、实验内容

Ⅰ基本指导

(-)静态方法和静态变量

static 声明的成员变量、方法称为静态方法和静态成员,静态方法和静态成员被视为类的成员变量、类的成员方法,而不把它当作实例对象的成员变量和方法。换句话说,静态变量、静态方法是类固有的,可以直接引用,其它成员变量、成员方法仅仅被声明,生成实例对象后才存在,才可以被引用。基于这样的事实,也把静态变量、静态方法称为类变量、方法,非静态变量称为实例变量、实例方法。

下面给出类StaticDemo和对应测试类StaticDemoTest,分别存放在文件

StaticDemo.java和StaticDemoTest.java中,仔细阅读程序,观察程序的运行结果,理解static 方法和变量的使用方法。

1.类StaticDemo

//该程序验证静态方法和静态变量的特点

//StaticDemo.java文件

public class StaticDemo {

private static int x; //静态变量

private int y;

public static int getX( )//静态方法

{

return x;

}

public static void setX(int newX) {//静态方法

x = newX;

}

public int getY() {//实例方法

return y;

}

public void setY(int newY) {//实例方法

y = newY;

}

}

阅读该程序,总结下列问题:

1)如何定义一个静态的方法和静态的常量,我们使用的关键字是什么?与实例常量和方法的定义有何区别?

2.输入StaticDemo类的测试类文件StaticDemoTest.java,仔细阅读程序,观察运行结果,体会静态方法和静态变量的用法和特征。

//StaticDemoTest.java

public class StaticDemoTest {

public static void main(String[] args) {

//注意静态方法getX()访问的方式:类名.方法名();

System.out.println("静态变量x="+StaticDemo.getX());

//访问实例方法

// System.out.println("实例变量y="+StaticDemo.getY()); // 非法,编译时将出错

StaticDemo a= new StaticDemo();

StaticDemo b= new StaticDemo();

//再次访问静态方法,通过对象名.方法名();

a.setX(1);

System.out.println("a. setX(1)后,a和b对x的取值是:");

System.out.println("静态变量a.x="+a.getX());

System.out.println("静态变量b.x="+b.getX());

b.setX(3);

System.out.println("b. setX(3)后,a和b对x的取值是:");

System.out.println("静态变量a.x="+a.getX());

System.out.println("静态变量b.x="+b.getX());

a.setY(2); //访问实例方法

b.setY(4);

//输出对象a、b 的属性:x,y的值

System.out.println("a,b的最后的值为”);

System.out.println("静态变量a.x="+a.getX());

System.out.println("实例变量a.y="+a.getY());

System.out.println("静态变量b.x="+b.getX());

System.out.println("实例变量b.y="+b.getY());

}

}

阅读并运行类StaticDemoTest,思考下列问题:

1)对于类StaticDemo中定义的静态方法getX();我们分别使用了类名.静态方法名()和对象名. 静态方法名()两种方式进行调用,编译该类,查看是否有错误,如果没有错误则说明两种方式都可以调用静态方法。

2)在程序中我们将“System.out.println("实例变量y="+StaticDemo.getY());”进行了注释,删去注释符号,重新编译该类,观察是否有编译错误,如果有说明什么问题?(提示:我们通过类名.实例方法名()调用了实例方法)。

3) 删去“System.out.println("实例变量y="+StaticDemo.getY());”或者为此语句添加注释,重新编译运行此类,仔细查看输出结果,对象a的x、y的值是多少?对象b的x、y的值是多少?

a、b两个对象的静态变量x的值一直保持相同,而y是分别不同的,这表示静态变量是所有对象共享的,而实例变量是各个对象自有的。

4)将类StaticDemo中的Static方法:setX,按照下列语句进行修改:

public static void setX(int newX) {//静态方法

x = newX + y;

}

重新保存并编译类StaticDemo,有没有编译错误,如果有,说明其无法访问类的实例变量y,但是可以访问静态变量x;这表示什么含义?

5)撤销对类StaticDemo中的Static方法setX的修改,修改方法setY。

public void setY(int newY) {//实例方法

y = newY+x;

}

重新保存并编译类StaticDemo,有没有编译错误,如果有,说明实例方法setY无法访问类的静态变量x,如果没有,表示其可以访问类的静态变量。

6)将类StaticDemo中的变量x、y的访问权限设置为public,并修改StaticDemoTest使其在StaticDemoTest对两个变量直接进行访问,总结对静态变量的访问方式。

Static小结:

·类的静态变量可以直接引用,而非静态变量则不行。类的静态变量相当于某些程序语言的全局变量。

·静态方法只能使用静态变量,不能使用实例变量。因为对象实例化之前,实例变量不可用。

·类的静态变量只有一个版本,所有实例对象引用的都是同一个版本。

·对象实例化后,每个实例变量都被制作了一个副本,它们之间互不影响。