java创建包顺序_Java中包含继承关系时对象的创建与销毁顺序详解(附源码)

package com.mufeng.theeighthchapter;

class Characteristic {// 特征

private String s;

public Characteristic(String s) {

// TODO Auto-generated constructor stub

this.s = s;

System.out.println("Creating Characteristic " + s);

}

protected void dispose() {

System.out.println("disposing Characteristic " + s);

}

}

class Description {// 描述

private String s;

public Description(String s) {

// TODO Auto-generated constructor stub

this.s = s;

System.out.println("Creating Description " + s);

}

protected void dispose() {

System.out.println("disposing Description " + s);

}

}

class LivingCreature {// 生物

private Characteristic p = new Characteristic("is alive");

private Description t = new Description("Basic Living Creature");

public LivingCreature() {

// TODO Auto-generated constructor stub

System.out.println("LivingCreature()");

}

protected void dispose() {

System.out.println("LivingCreature dispose");

t.dispose();

p.dispose();

}

}

class Animal extends LivingCreature {// 动物

private Characteristic p = new Characteristic("has heart");

private Description t = new Description("Animal not Vegetable");

public Animal() {

// TODO Auto-generated constructor stub

System.out.println("Animal()");

}

protected void dispose() {

System.out.println("Animal dispose");

t.dispose();

p.dispose();

super.dispose();

}

}

class Amphibian extends Animal {// 两栖动物

private Characteristic p = new Characteristic("can live in water");

private Description t = new Description("Both water and land");

public Amphibian() {

// TODO Auto-generated constructor stub

System.out.println("Amphibian()");

}

protected void dispose() {

System.out.println("Amphibian dispose");

t.dispose();

p.dispose();

super.dispose();

}

}

public class Frog extends Amphibian {// 青蛙

private Characteristic p = new Characteristic("Croaks");

private Description t = new Description("Eats Bugs");

public Frog() {

// TODO Auto-generated constructor stub

System.out.println("Frog()");

}

protected void dispose() {

System.out.println("Frog dispose");

t.dispose();

p.dispose();

super.dispose();

}

public static void main(String[] args) {

Frog frog = new Frog();

System.out.println("Bye!");

frog.dispose();

}

}

输出结果

Creating Characteristic is alive

Creating Description Basic Living Creature

LivingCreature()

Creating Characteristic has heart

Creating Description Animal not Vegetable

Animal()

Creating Characteristic can live in water

Creating Description Both water and land

Amphibian()

Creating Characteristic Croaks

Creating Description Eats Bugs

Frog()

Bye!

Frog dispose

disposing Description Eats Bugs

disposing Characteristic Croaks

Amphibian dispose

disposing Description Both water and land

disposing Characteristic can live in water

Animal dispose

disposing Description Animal not Vegetable

disposing Characteristic has heart

LivingCreature dispose

disposing Description Basic Living Creature

disposing Characteristic is alive

源码解析

层次结构中的每个类都包含

Characteristic和

Description这两种类型的成员对象,并且它们也必须被销毁。所以万一某个子对象要依赖于其他对象,销毁的顺序应该和初始化顺序相反。对于字段,则意味着与声明的顺序相反(因为字段的初始化是按声明的顺序进行的)。对于基类(遵循

C++中析构函数的形式),应该首先对于其导出类进行清理,然后才是基类。这是因为导出类的清理可能会调用基类中的某些方法,所以需要使基类中的构件仍起作用而不应该过早地销毁它们。从输出结果可以看到,

Frog对象的所有部分都是按照创建的逆序进行销毁的。

在这个例子中可以看到,尽管通常不必执行清理工作,但是一旦选择要执行,就必须谨慎和小心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主会及解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值