第3章 面向对象(上) - 补充案例(3)

2019-08-01 23:03

博学谷——让IT教学更简单,让IT学习更有效

三、案例总结

1、从运行结果可以看出,三个构造方法都被调用了,为了更加清楚地了解三个构造方法的执行顺序,下面通过一张图例进行说明,如图3-9所示。

Student()this()Student(String name)this(name)new Student(\Student(String name,int age)

图3-9 构造方法的执行顺序

2、在构造方法中,使用 this调用重载构造方法的代码必须放在第一行,否则程序不能通过编译,这就限定了在一个构造方法中只能调用一次重载的构造方法。

3、在构造方法中可以通过this.方法名([参数 …])的方式调用普通的成员方法,但是在普通的成员方法中不能使用this([参数 …])的方式来调用构造方法。

执行顺序案例3-7 垃圾回收机制 一、案例描述

1、 考核知识点

编号:00103008 名称:垃圾回收机制

2、 练习目标

? 掌握垃圾回收机制的特点 ? 掌握垃圾回收相关的方法

3、 需求分析

垃圾对象会占用一定的内存空间,当垃圾对象积累到一定程度后,Java虚拟机会自动进行垃圾回收。但是,如果希望程序可以及时通知Java虚拟机回收垃圾对象,可以通过System.gc()方法强制启动垃圾回收器回收垃圾。为了让初学者熟悉垃圾回收机制,本案例将演示如何通过System.gc()方法强制启动垃圾回收器回收垃圾。

4、 设计思路(实现原理)

1) 对Student类进行修改,在类中对finalize()方法进行重写。

2) 编写测试类Example07,创建若干个Student对象,然后调用System.gc()方法通知垃圾回收

期回收垃圾,为了确保可以看到垃圾回收的过程,可以在类中编写一个简单的循环语句,延长程序执行时间。

二、案例实现

1、对Student类进行修改,代码如下所示:

11

博学谷——让IT教学更简单,让IT学习更有效

class Student { }

public void finalize() { }

System.out.println(\垃圾对象被回收了\

2、定义Example07类,代码如下所示:

public class Example07 { }

public static void main(String[] args) { }

new Student(); new Student(); System.gc();

for (int i = 0; i < 1000000; i++) { }

// 延长程序结束时间

运行结果如图3-10所示。

图3-10 运行结果

三、案例总结

1、从运行结果可以看到,两个Student对象的finalize()方法都被调用了,这表示两个对象作为垃圾被回收了。如果把System.gc()这行代码注释,会发现命令行窗口不会打印任何内容,这说明对象在变成垃圾后不会被立即回收,同时也验证了System.gc()方法的作用。

2、由于System.gc()方法只是通知Java虚拟机尽快进行垃圾回收,这意味着垃圾回收器也可能不会马上运行,因此,在程序的最后使用了一个for循环来延长程序运行的时间,从而确保能够看到垃圾对象被回收的过程。

3、Student类中定义的 finalize()方法其签名必须是public(protected) void finalize()[throw Throwable]{},这样做的原因会涉及到后面的一些知识,比如类的继承、Object类、方法的重写、异常等等,同学们在学完这些内容后就会明白其中的道理。

案例3-8静态变量 一、案例描述

1、 考核知识点

编号:00103009

12

博学谷——让IT教学更简单,让IT学习更有效

名称:静态变量

2、 练习目标

? 了解静态变量的作用

? 掌握静态变量的定义和使用方式

3、 需求分析

当多个对象存储的数据相同时,可以使用静态变量的方式存储。例如,有一个Student类具有name、className属性,请根据该类创建出三个Student对象,并将这些对象的className值都设置为“三年级二班”。

4、 设计思路(实现原理)

1) 定义Student类,并在类中定义name和className属性。

2) 编写测试类Example08,在main()方法中创建三个学生对象,并分别为这些对象的name和

className属性赋值,然后输出这些对象的name和className值。 3) 对Student类进行修改,将className定义为静态变量。

4) 修改测试类,在main()方法中使用Student.className = “三年级二班”语句为静态变量

className进行赋值,然后输出这些对象的name和className值。

为了更好地理解Student类中静态变量className和Student实例对象的关系,下面通过一个图例进行演示,如图3-11所示:

Student{className三年级二班Student实例对象{names1names2names3

图3-11 静态变量与实例对象的关系

二、案例实现

1、定义Student类,代码如下所示:

class Student{ }

String name; String className;

2、定义Example08类,代码如下所示:

public class Example08 {

public static void main(String[] args) {

Student s1 = new Student(); s1.name = \张三\

s1.className = \三年级二班\

Student s2 = new Student();

13

博学谷——让IT教学更简单,让IT学习更有效

Student s3 = new Student(); s3.name = \王五\

s3.className = \三年级二班\

System.out.println(\我的名字是\来自\

}

}

System.out.println(\我的名字是\来自\System.out.println(\我的名字是\来自\s2.name = \李四\

s2.className = \三年级二班\

运行结果如图3-12所示。

图3-12 运行结果

3、对Student类进行修改,代码如下所示:

class Student { }

String name;

static String className;

4、对Example08类进行修改,代码如下所示:

public class Example08 { }

}

System.out.println(\我的名字是\来自\System.out.println(\我的名字是\来自\System.out.println(\我的名字是\来自\public static void main(String[] args) {

Student.className = \三年级二班\Student s1 = new Student(); s1.name = \张三\

Student s2 = new Student(); s2.name = \李四\

Student s3 = new Student(); s3.name = \王五\

运行结果如图3-13所示。

14

博学谷——让IT教学更简单,让IT学习更有效

图3-13 运行结果

三、案例总结

1、本案例中,三个Student对象的className属性值均为“三年级二班”,对于这样的相同数据,没有必要在每个对象中都开辟一块空间存储,完全可以在内存中只用一块空间存储,并被一个类的所有实例对象所共享。在Java中提供了一个static关键字,使用static关键字修饰的成员变量称为静态变量,静态变量能被该类所有实例对象共享。

2、静态变量可以使用“类名.静态方法名”的方式访问,也可以通过“对象引用变量.静态方法名”的方式访问,例如本例中的静态变量className,通过Student.className或者s2.className这两种方式访问都是可以的,不过更推荐使用前一种方式。

3、思考一下:定义一个Person类,在类中定义两个String类型的成员变量name和nationality(国籍),变量nationality使用static关键字修饰为静态变量,其值为“中国”。

定义Example09类,在类的main()方法中创建Person类的两个实例对象,并打印出这两个对象的姓名和国籍。 (1)定义Person类,代码如下所示:

class Person { }

String name;

static String nationality = \中国\

(2)定义Example09类,代码如下所示:

public class Example09{ }

public static void main(String[] args) { }

Person lily = new Person(); lily.name = \丽丽\

Person lucy = new Person(); lucy.name = \露西\

System.out.println(lily.name + \的国籍是\System.out.println(lucy.name + \的国籍是\

运行结果如图3-14所示。

图3-14 运行结果

15


第3章 面向对象(上) - 补充案例(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级期末模拟考语文试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: