Java 父类和子类对象销毁实例

原创 2013年12月02日 14:32:41

1)定义一个共享类Shared

使用long而不使用int,是为了防止溢出,refcount是共享类被其他类引用的次数,只要还有其他的类引用这个类,共享类就不会被GC回收。

package cn.javass.user;

public class Shared {
 private int refcount=0;
 private static long counter=0;
 private final long id=counter++;
 
 public Shared(){
  System.out.println("Creating "+this);
 }
 
 public void addRef(){refcount++;};
 
 protected void dispose(){
  if(--refcount==0){
   System.out.println("Disposing "+this);
  }
 }
 
 //重写toString方法
 public String toString(){return "Shared"+id;};
}

2)定义一个组合类

package cn.javass.user;

public class Composing {

 private Shared shared;
 private static long counter=0;
 private final long id=counter++;
 
 public Composing(Shared shared) {
  // TODO Auto-generated constructor stub
  System.out.println("Creating "+this);
  this.shared=shared;
  this.shared.addRef();
 }
 
 protected void dispose(){
  System.out.println("disposing "+this);
  shared.dispose();
 }
 
 public String toString(){return "Composing" +id; };
}

3)定义引用计数类

package cn.javass.user;

public class ReferenceCounting {

 public static void main(String[] args) {
  Shared shared=new Shared();
  Composing[] composings={new Composing(shared),new Composing(shared),new Composing(shared),new Composing(shared),new Composing(shared)};
  for(Composing c:composings)
   c.dispose();
 }
}

 

Java进阶 创建和销毁对象

最近准备写点Javase的东西,希望可以帮助大家写出更好的代码。 1、给不可实例化的类提供私有构造器 比如:每个项目中都有很多工具类,提供了很多static类型的方法供大家使用,谁也不希望看到下面的代...
  • lmj623565791
  • lmj623565791
  • 2014年05月12日 21:55
  • 18486

Unity3d的父级与Destory()

因为这个问题,导致我花了半天时间来调,可恶之极!真相必须公布以后快! 在一个逻辑里,我需要根据新的数组将原来的显示列表重新,为了性能,我进行差异更新,把需要删除的个数删除,其它的只更新。于是问题就出...
  • wdw5945
  • wdw5945
  • 2016年08月15日 21:52
  • 447

Java 初始化与清理

转载自:http://github.thinkingbar.com/thinking_in_java_chapter05/ C++提出了构造函数和析构函数。为了提高效率,这两项工...
  • cjc_karen
  • cjc_karen
  • 2016年08月12日 11:17
  • 227

关于java泛型擦除与ClassCastException的问题

今天在复习java泛型时遇到一个疑问:即然java泛型的原理是编译时定,运行时擦除,那为什么还会在运行时抛出ClassCastException异常呢? 问题代码如下:ArrayList list ...
  • u011193276
  • u011193276
  • 2016年01月10日 17:36
  • 852

Java中创建一个子类对象会不会创建父类对象?

答案是否定的,在Java中创建一个子类对象是不会创建父类对象的。 通过一个实例来证明:实例:父类Base.javapublic class Base { private String str...
  • qq_27760433
  • qq_27760433
  • 2017年06月06日 22:23
  • 1371

Java 父类子类的对象初始化过程及例子

基本初始化过程: 对于一个简单类的初始化过程是:static 修饰的模块(static变量和static 块) ---> 按照代码顺序依次执行。 |实例变量 及非static模块---> 按...
  • shihengli2010
  • shihengli2010
  • 2016年02月18日 11:51
  • 1319

java对象之初始化和清理(1)

随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。 初始化和清理正是设计安全的两个问题。 构造器: java在创建对象时,用构造器保证对象被初始化。 使用ne...
  • A947809647
  • A947809647
  • 2015年01月17日 23:04
  • 427

java对象清除和垃圾回收

对象清除: 在java中自动清除不需要delete。 对象的自动清除: *垃圾回收 *对象回收是由java虚拟机的垃圾回收线程来完成的。 *为什么系统知道对象是否为垃圾?      任何对...
  • qq_36745652
  • qq_36745652
  • 2017年05月19日 19:02
  • 128

C++ 父类指针指向子类对象||子类指针指向父类对象的理解

父类子类指针函数调用注意事项 1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩) 2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型...
  • u010355144
  • u010355144
  • 2015年04月18日 18:32
  • 4172

java一种极端情况下出现父类访问子类的实例变量的情况

在一般的情况下,或者说,在我们使用类继承的时候,几乎都不会出现父类访问子类的实例变量,因为父类不知道它被哪些子类继承了,也不知道继承它的子类做了哪些改变,比如增加了成员变量。 然而,在一种极端的情况...
  • g96968586
  • g96968586
  • 2014年06月23日 22:09
  • 1131
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 父类和子类对象销毁实例
举报原因:
原因补充:

(最多只允许输入30个字)