网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.两点Javamail的开发与应用总结经.
.Java中的方法和变量在继承时的覆.
.Java开发中关于Hibernate对多表关.
.Java和以网络为核心的未来.
.使用JDBC创建数据库访问程序.
.详细的spring入门实例讲解运用.
.保持你对Java的敏感度.
.Java初学者福音——自动设置环境.
.Java中四种XML解析技术之不完全测.
.Java将更重视功能的易用性.
.JAVA学习,是一条漫长的道路.
.错误的堆大小产生的.
.优化 Java 垃圾收集器改进系统性.
.[webservices开发]使用XFire开发.
.Thinking in Java第三版读书笔记.
.Struts模块化编程经典实战教程(二.
.常用基础函数.
.Java咖啡馆(11):Java插件技术.
.Hibernate自关联关系.
.在Java开源的王国中自由翱翔.

Reference 不为人知的一面

发表日期:2008-1-5



  Java 不支持 pointer,只提供 reference,初学者经常因此颇为困惑,非凡是修过数据
  结构的信息系学生,他们心中第一个想到的是:「没 pointer,这怎么成,那不就做不
  出 linked list 和 tree 的数据结构?」殊不知 reference 就是一种智能型的 point
  er,它具有 pointer 的好处,而且不用像 pointer 一样要程序员自行 reference (*)
  以及 dereference (&),更不会像 pointer 一样会误闯内存禁区造成 crash。因为好
  处多多,所以 reference 已经是现代化程序语言的重要必备功能了。什么!你说 xx 高
  级语言没支持 reference,那你可以把它埋葬在二十世纪的历史灰烬中。
  Java 对于资料的处理方式是:只要是基本型态(包括 boolean, byte, short, int, l
  ong, float, double, char)一律使用 pass by value,其它型态一律 pass by refer
  ence。但是我发现这在未来有可能变动,因为 Java language 将 byvalue 订为 reser
  ved Word(非 keyword)。当 Java 将 byvalue 变成 keyword 之时,非基本型态的值
  就可以 pass by value 了,但我相信,此时 Java 也必须开始支持 copy constrUCtor
  作为配套措施,究竟使用 deep copy 或 shallow copy(甚至 deep 和 shallow 兼而
  有之的 copy)还是要让 programmer 决定。
  前面提到:只要是基本型态(包括 boolean、byte、short、int、long、float、doubl
  e、char)一律使用 pass by value,其它型态一律 pass by reference。到底什么是
  pass by value?什么又是 pass by reference 呢?打个比方,pass by value 就是资
  料的「分身」传递过去,pass by reference 就是资料的「本尊」传递过去。(注:自
  从 发生那件新闻,有了「本尊」和「分身」的名词之后,我发现要向学生解释 refere
  nce 的观念也就轻易多了)。因为对象一律是 pass by reference,所以一个对象经常
  同时被多个 variable 所指到。
  Java 提供自动内存治理的机制,也就是俗称的 garbage collection(垃圾收集)。当
  一个对象不再被任何 variable 所指到,就代表此对象从此不可能再被利用,Java 虚拟
  机器内一个负责收集垃圾的 thread 就会在适当的时机出来将此块内存回收。
  记得在 Java 之父 James Gosling 应邀到台湾时(1997年12月),我曾经问他:Java
  的这种自动内存治理方式造成某些程序(例如 debugger)的困扰,Java 有没有打算支
  持 weak reference。 James Gosling回答:未来的版本将会支持 weak reference,果
  然在后来的 JDK 1.2 就提供此支持了。JDK 1.2 除了 weak reference(也就是 java.
  lang.ref.WeakReference)之外,还多了一个强化的 weak reference(也就是 java.l
  ang.ref.SoftReference)以及一个弱化的 weak reference(也就是 java.lang.ref.P
  hantomReference),这个设计考虑得相当仔细。
  这些 reference 依照「强度」排列如下:
  Direct Reference > Soft Reference > Weak Reference > Phantom Reference
  其中,direct reference 就是一般的 reference。只要被任何 direct reference 所
  reference 到的对象就不会被 garbage collector 清除。其它的三种 reference(包括
  soft reference,weak reference,phantom reference)则不然,他们不会影响 gar
  bage collection。
  假如你对这些非凡的 reference 感爱好,不妨去看看 java.lang.ref 的 Javadoc,顺
  便写几个程序试试看。
上一篇:连接池用法 人气:649
下一篇:正确使用ArrayList和LinkedList—性能的改进 人气:1170
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐