易截截图软件、单文件、免安装、纯绿色、仅160KB

深入浅出Java clone技术

 这是clone技术介绍的第一篇。本篇主要介绍对象clone技术的基本知识。
Clone基本知识储备
在Java里提到clone技术,就不能不提java.lang.Cloneable接口和含有clone方法的Object类。所有具有clone功能的类都有一个特性,那就是它直接或间接地实现了Cloneable接口。否则,我们在尝试调用clone()方法时,将会触发CloneNotSupportedException异常。下面我们通过对Object类的部分源码的分析,来发现和理解这一特性。请看JDK中Object# clone()方法的源码:
/*
…………
* @return a clone of this instance.
* @exception? CloneNotSupportedException? if the object's class does not
*support the Cloneable interface. Subclasses
*that override the clone method can also
* throw this exception to indicate that an instance cannot
*be cloned.
* @see java.lang.Cloneable
*/
protected native Object clone() throws CloneNotSupportedException;
这段源码的@exception部分的描述内容证实了上文关于clone对象特性论断的正确性。它明确指出对象类必须支持Cloneable接口,否则即使派生类覆盖了Object#clone()方法,也同样会抛出CloneNotSupportedException这个异常。关于覆盖clone()方法,后续文章将会用专门篇幅进行比较详细的分析.
在上一篇中,介绍了java里clone的基本知识。本篇将着重描述如何实现clone。
l clone的实现
1.实现Cloneable接口
通过上一篇的介绍,我们知道,一个类若要具备clone功能,就必须实现Cloneable接口。做到这一步,clone功能已经基本实现了。Clone功能对我们来说,最主要的还是要能够使用它。那么我们如何才能使用clone功能呢?答案是覆盖Object#clone()方法。
2. 覆盖Object#clone()方法
为什么需要覆盖Object#clone()方法?这里得再次从jdk源码说起。JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException;
是否注意到,这里clone()方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。相信读者已明白为什么要覆盖Object#clone()方法。而且,覆盖的方法的修饰符必须是public,如果还保留为protected,覆盖将变得没有实际意义。下面举一个具有clone功能的简单的例子:
/*
* 具有clone功能的类的例子
*/
public class CloneableObjExampl


相关文档:

Java求职简历

个 人 简 历
姓    名:
王志国
性    别:

年    龄:
23岁
联系电话:
13124799190
专    业:
计算机技术
工作时间:
一年以上
学    历:
大专
邮    箱:
andy478168@yeah.net
★ 求职意向
工作性质 ......

在Java中调用C++

在java中调用自己的c++代码是一件简单的事情,以下类为例:
class Prompt {
  private native String getLine(String prompt);
  public static void main(String args[]) {
    Prompt p = new Prompt();
    String input = p.getLine("Type a line: ");
  &nbs ......

Java中native关键字用法

      在通读jdk源代码的时候发现许多java方法前都有native关键字修饰,最后得知native是与C++联合开发的时候用的,java自己开发不用。
      使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数 ......

在Eclipse中将Java Project转换成Dynamic Web Project


编辑工程的.project文件:
添加
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>

<natures>

& ......

java中HashMap遍历方法

方法一:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
}
方法二:
Map map = n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号