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


原创粉丝点击