java static和final的巧妙应用
来源:互联网 发布:wings知乎 编辑:程序博客网 时间:2024/05/23 12:49
监听当前对象被创建了几个..我们可以用一个static来确定个数.(此处说明下为什么要用static:一个类中静态变量只会被初始化一次,不管你实例化多少个类,里面始终只有一个).
下面是使用计数来跟踪仍旧访问着共享对象的对象数量:
package com.glacier.demo;class Shared {private int refcount = 0;private 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);}}public String toString() {return "Shared " + id;}}class Composing {private Shared shared;private static long counter = 0;private final long id = counter++;public Composing(Shared shared) {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 "Compsing " + id;}}public class Demo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubShared shared = new Shared();Composing[] composing = { new Composing(shared), new Composing(shared),new Composing(shared), new Composing(shared),new Composing(shared) };for (Composing c : composing) {c.dispose();}}}
static long counter 跟踪所创建的shared的实例的数量,还可以为id提供数值.counter的类型是long而不是int,这样可以防止溢出.id是final类型的,我们不希望它在生命周期中改变.
在将一个共享对象附到类上时,必须记住调用addRef(),但是dispose()方法将跟踪引用数,并决定何时执行清理.使用这种技巧需要加倍细心.
看下运行结果:
Creating Shared 0
Creating Compsing 0
Creating Compsing 1
Creating Compsing 2
Creating Compsing 3
Creating Compsing 4
disposing Compsing 0
disposing Compsing 1
disposing Compsing 2
disposing Compsing 3
disposing Compsing 4
- java static和final的巧妙应用
- 【Java笔记】static和final关键字的初级理解应用
- 【java】final和final static的区别
- java的static 和final
- java的static final 和final static区别
- java-static和final
- java的final和static的区别
- java static和final的理解
- Java中static 和final的区别
- Java中static 和final的区别
- java中static和final的理解
- Java的final和static区别
- Java中static 和final的区别
- Java中static 和final的区别
- Java中final和static的区别
- java中final和static的区别
- Java 关键字 final 和static 的区别
- Java的final和static区别
- js 实现 图片刷新 验证码 看不清 换一张
- 10038 - Jolly Jumpers
- 推荐系统(利用用户行为数据 )
- Linux中有哪些文件种类
- ADF11g-022:ADF 文章收藏
- java static和final的巧妙应用
- Google Dremel 原理 - 如何能 3 秒分析 1PB
- Android初级开发第七讲--特效和数据传递处理
- java文件路径操作
- 全球七大黑帮:最神秘组织竟在中国
- 字体对话框使用实例
- Ora-12514和Ora-12514解决方法
- java上机 第十四周 任务一 线程的练习
- 在“Resources”参数中指定了项xx.resources”多次 “Resources”参数不支重复项