欢迎来到天天文库
浏览记录
ID:18900707
大小:97.00 KB
页数:21页
时间:2018-09-20
《简述java语言的对象克隆特性.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、简述Java语言的对象克隆特性Java认证考试:简述Java语言的对象克隆特性 本文通过介绍java.lang.Object#clone()方法来说明Java语言的对象克隆特性。java.lang.Object#clone()方法由java.lang.Object加以实现,主要对对象本身加以克隆。 在Java中传值及引伸深度克隆的思考中,我们讲过引申到克隆技术Java中的所有对象都是Object类的子类。我们知道,Java是纯面向对象的程序设计语言。Java里,所有的类的顶级父类都是java.lang.Object类,也就是说,
2、如果一个类没有显示申明继承关系,它的父类默认就是java.lang.Object。有一个很简单的方法可以证明这一点,我们写一个Test类,如下:1.publicclassTest{2.publicvoidsomeMethod(){3.super.clone();4.}5.}6.里面调用了super.clone(),编译时并不报错。其实clone()方法为java.lang.Object类提供的一个protected型方法。对象克隆本文通过介绍java.lang.Object#clone()方法来说明Java语言的对象克隆特性。jav
3、a.lang.Object#clone()方法由java.lang.Object加以实现,主要对对象本身加以克隆。首先我们看看下面的例子:7.publicclassTestClone{8.publicstaticvoidmain(String[]args){9.MyClonemyClone1=newMyClone(“clone1”);10.11.MyClonemyClone2=(MyClone)myClone1.clone();12.13.if(myClone2!=null){14.System.out.println(myClon
4、e2.getName());15.System.out.println(“myClone2equalsmyClone1:”+myClone2.equals(myClone1));16.}else{17.System.out.println(“CloneNotSupported”);18.}19.}20.}21.classMyClone{22.privateStringname;23.publicMyClone(Stringname){24.this.name=name;25.}26.27.publicStringgetName(){
5、28.returnname;29.}30.publicvoidsetName(Stringname){31.this.name=name;32.}33.34.publicObjectclone(){35.try{36.returnsuper.clone();37.}catch(CloneNotSupportedExceptione){38.returnnull;39.}40.}41.编译执行TestClone,打印出:42.C:clone》javac*.java43.C:clone》javaTestClone44.CloneNo
6、tSupported45.C:clone》46.说明MyClone#clone()方法调用super.clone()时抛出了CloneNotSupportedException异常,不支持克隆。为什么父类java.lang.Object里提供了clone()方法,却不能调用呢?原来,Java语言虽然提供了这个方法,但考虑到安全问题,一方面将clone()访问级别设置为protected型,以限制外部类访问;另一方面,强制需要提供clone功能的子类实现java.lang.Cloneable接口,在运行期,JVM会检查调用clone
7、()方法的类,如果该类未实现java.lang.Cloneable接口,则抛出CloneNotSupportedException异常。java.lang.Cloneable接口是一个空的接口,没有申明任何属性与方法。该接口只是告诉JVM,该接口的实现类需要开放“克隆”功能。我们再将MyClone类稍作改变,让其实现Cloneable接口:47.classMyCloneimplementsCloneable{48.。。.//其余不做改变49.}50.51.编译执行TestClone,打印出:52.53.C:clone》javac*
8、.java54.C:clone》javaTestClone55.clone156.myClone2equalsmyClone1:false57.C:clone》58.根据结果,我们可以发现:1,myClone1.clone()克隆
此文档下载收益归作者所有