Thinking In Java中初始化和清理中的一段代码
来源:互联网 发布:vb中mid函数的使用方法 编辑:程序博客网 时间:2024/05/29 13:48
package com.kael;class Shape { Shape(int i) { System.out.println("Shape constructor"); } void dispose() { System.out.println("Shape dispose"); } }class Circle extends Shape { Circle(int i) { super(i); System.out.println("Drawing Circle"); } void dispose() { System.out.println("Erasing circle"); super.dispose(); }}class Triangle extends Shape { Triangle(int i) { super(i); System.out.println("Drawing Triangle"); } void dispose() { System.out.println("Erasing Triangle"); super.dispose(); }}class Line extends Shape { private int start, end; Line(int start, int end) { super(start); this.start = start; this.end = end; System.out.println("Drawing Line: " + start + ", " + end); } void dispose() { System.out.println("Erasing Line: " + start + ", " + end); super.dispose(); }}public class CADSystem16 extends Shape { private Circle c; private Triangle t; private Line[] lines = new Line[3]; public CADSystem16(int i) { super(i + 1); for(int j = 0; j < lines.length; j++) lines[j] = new Line(j, j*j); c = new Circle(1); t = new Triangle(1); System.out.println("Combined constructor"); } public void dispose() { System.out.println("CADSystem.dispose()"); // The order of cleanup is the reverse // of the order of initialization t.dispose(); c.dispose(); for(int i = lines.length - 1; i >= 0; i--) lines[i].dispose(); super.dispose(); } public static void main(String[] args) { CADSystem16 x = new CADSystem16(47); try { System.out.println("Returning from try block"); return; // unreachable statement: // System.out.println("You can't see this"); // but finally block will still execute: } finally { x.dispose(); } } }
输出结果:Shape constructorShape constructorDrawing Line: 0, 0Shape constructorDrawing Line: 1, 1Shape constructorDrawing Line: 2, 4Shape constructorDrawing CircleShape constructorDrawing TriangleCombined constructorReturning from try blockCADSystem.dispose()Erasing TriangleShape disposeErasing circleShape disposeErasing Line: 2, 4Shape disposeErasing Line: 1, 1Shape disposeErasing Line: 0, 0Shape disposeShape dispose