当前位置:首页 > 第3章-面向对象(上)-补充案例
第3章-面向对象(上)-补充案例
}
}
public Student(String name, int age) { }
System.out.println(\两个参数的构造方法\System.out.println(\一个参数的构造方法\
2、定义Example05类,代码如下所示:
public class Example05 { }
public static void main(String[] args) { }
Student s1 = new Student(); Student s2 = new Student(\Student s3 = new Student(\
运行结果如图3-7所示。
图3-7 运行结果
三、案例总结
一个类中可以定义多个重载的构造方法,在创建对象时,根据传入参数的不同会调用相应的构造方法。
案例3-6 this关键字访问构造方法 一、案例描述
1、 考核知识点
编号:
名称:this关键字的使用
2、 练习目标
? 掌握如何在构造方法中使用this关键字访问重载的构造方法
3、 需求分析
如果一个类中定义了多个重载的构造方法,为了避免在重载的构造方法中重复书写代码,可以在一个构造方法中使用this关键字调用其它的构造方法。为了让初学者掌握this关键字访问构造方法的用法,本案例将演示如何使用this关键字调用其他的构造方法。
4、 设计思路(实现原理)
1) 在Student类中创建多个重载的构造方法,包括无参的构造方法和一个参数的构造方法,以
及两个参数的构造方法。
9 / 25
第3章-面向对象(上)-补充案例
2) 在一个参数的构造方法中使用this关键字调用无参构造方法,在两个参数的构造方法中调用
一个参数的构造方法。
3) 编写测试类Example06,在main()方法中,调用两个参数的构造方法创建对象,演示构造方
法的执行顺序。
二、案例实现
1、对Student类进行修改,代码如下所示:
class Student { }
public Student() { }
public Student(String name) { }
public Student(String name, int age) { }
this(name);
System.out.println(\两个参数的构造方法\this();
System.out.println(\一个参数的构造方法\System.out.println(\无参的构造方法\
2、定义Example06类,代码如下所示:
public class Example06 { }
public static void main(String[] args) { }
Student s1 = new Student(\
运行结果如图3-8所示。
图3-8 运行结果
三、案例总结
1、从运行结果可以看出,三个构造方法都被调用了,为了更加清楚地了解三个构造方法的执行顺序,下面通过一张图例进行说明,如图3-9所示。
10 / 25
第3章-面向对象(上)-补充案例
Student()this()Student(String name)this(name)new Student(\Student(String name,int age)
图3-9 构造方法的执行顺序
2、在构造方法中,使用 this调用重载构造方法的代码必须放在第一行,否则程序不能通过编译,这就限定了在一个构造方法中只能调用一次重载的构造方法。
3、在构造方法中可以通过this.方法名([参数 …])的方式调用普通的成员方法,但是在普通的成员方法中不能使用this([参数 …])的方式来调用构造方法。
执行顺序案例3-7 垃圾回收机制 一、案例描述
1、 考核知识点
编号:
名称:垃圾回收机制
2、 练习目标
? 掌握垃圾回收机制的特点 ? 掌握垃圾回收相关的方法
3、 需求分析
垃圾对象会占用一定的内存空间,当垃圾对象积累到一定程度后,Java虚拟机会自动进行垃圾回收。但是,如果希望程序可以及时通知Java虚拟机回收垃圾对象,可以通过System.gc()方法强制启动垃圾回收器回收垃圾。为了让初学者熟悉垃圾回收机制,本案例将演示如何通过System.gc()方法强制启动垃圾回收器回收垃圾。
4、 设计思路(实现原理)
1) 对Student类进行修改,在类中对finalize()方法进行重写。
2) 编写测试类Example07,创建若干个Student对象,然后调用System.gc()方法通知垃圾回收
期回收垃圾,为了确保可以看到垃圾回收的过程,可以在类中编写一个简单的循环语句,延长程序执行时间。
二、案例实现
1、对Student类进行修改,代码如下所示:
class Student { }
public void finalize() { }
System.out.println(\垃圾对象被回收了\
11 / 25
第3章-面向对象(上)-补充案例
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、 考核知识点
编号:
名称:静态变量
2、 练习目标
? 了解静态变量的作用
? 掌握静态变量的定义和使用方式
3、 需求分析
12 / 25
共分享92篇相关文档