当前位置: 首页 > news >正文

北京建站免费模板广告联盟官网入口

北京建站免费模板,广告联盟官网入口,河北远策网站建设,自己怎么优化网站排名文章目录前言#xff1a;知识点一#xff1a;什么是浅拷贝#xff1f;知识点二#xff1a;什么是深拷贝#xff1f;知识点三、java拷贝#xff08;clone#xff09;的前提#xff1a;知识点四#xff1a;浅拷贝案例#xff1a;拷贝类#xff1a;测试类#xff1a;总… 文章目录前言知识点一什么是浅拷贝知识点二什么是深拷贝知识点三、java拷贝clone的前提知识点四浅拷贝案例拷贝类测试类总结下面通过画图示意知识点五深拷贝案例结果为总结画图说明知识点六总结前言 java中的clone一直是一个老生常谈的问题另外关于克隆网上也有很多的写过这方面的问题。 我在这里记录一下我遇到的问题和使用clone的方法。知识点一什么是浅拷贝 我们这里说的浅拷贝是指我们拷贝出来的对象内部的引用类型变量和原来对象内部引用类型变量是同一引用指向同一对象。但是我们拷贝出来的对象和新对象不是同一对象。简单来说新拷贝产生、旧元对象对象不同但是内部如果有引用类型的变量新、旧对象引用的都是同一引用。知识点二什么是深拷贝 深拷贝全部拷贝原对象的内容包括内存的引用类型也进行拷贝知识点三、java拷贝clone的前提 1.首先我们需要知道Object类中一个clone()的方法并且是protected关键字修饰的本地方法(使用native关键字修饰)我们完成克隆需要重写该方法。 注意按照惯例重写的时候一个要将protected修饰符修改为public这是JDK所推荐的做法但是我测试了一下 复写的时候不修改为public也是能够完成拷贝的。但是还是推荐写成public。2.我们重写的clone方法一个要实现Cloneable接口。虽然这个接口并没有什么方法但是必须实现该标志接口。 如果不实现将会在运行期间抛出CloneNotSupportedException异常3.Object中本地clone()方法默认是浅拷贝知识点四浅拷贝案例 拷贝类 package cn.cupcat.java8;public class Person implements Cloneable{private String name;private int age;private int[] ints;public int[] getInts() {return ints;}public Person(String name, int age, int[] ints) {this.name name;this.age age;this.ints ints;}public void setInts(int[] ints) {this.ints ints;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public Person(String name, int age) {this.name name;this.age age;}/*** 默认实现* */Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();} }测试类 package cn.cupcat.java8;import org.junit.Test;public class CloneTest {Testpublic void test() throws CloneNotSupportedException {int[] ints {1,2,3};String name zhangxiangyang;int age 23;Person person new Person(zhangxiangyang,age,ints);System.out.print(一克隆前 age age ... name name 数组);for (int i : ints){System.out.print(i );}System.out.println();//拷贝Person clonePerson (Person) person.clone();int clonePersonAge clonePerson.getAge();String clonePersonName clonePerson.getName();int[] ints1 clonePerson.getInts();System.out.print(二克隆后 age clonePersonAge ... name clonePersonName 数组 );for (int i : ints1){System.out.print(i );}System.out.println();//修改ints1[0] 50;//修饰clonePerson.setName(666666666);age person.getAge();name person.getName();System.out.println();System.out.print(三修改后原对象 age age ... name name 数组 );for (int i : ints){System.out.print(i );}System.out.println();System.out.println(四person clonePerson ? (person clonePerson ));} }结果为 一克隆前 age 23... name zhangxiangyang 数组1 2 3 二克隆后 age 23... name zhangxiangyang 数组 1 2 3 三修改后原对象 age 23... name zhangxiangyang数组 50 2 3 四person clonePerson ? false总结 1.通过四输出 person clonePerson ? false 可以看出克隆以后的对象已经和以前不是同一对象了。因为其引用是不同的。 2.通过分析一、二可以看出我们的拷贝成功执行了并且拷贝的数据也都正确 3.通过分析三我们修改了拷贝后对象的name、intsints1[0] 50;//修饰clonePerson.setName(666666666);发现原对象中的ints也跟着修改了因此可以证明拷贝后的对象和原对象的ints数组指向了同一引用。而我们发现同时也修改了拷贝对象name属性为什么那么原对象中的name属性没有发生改变呢而且String类型也是引用类型呀 别急下面我会画图示意。 4. 通过以上总结我们得出结论clone()方法的默认实现是浅拷贝 下面通过画图示意 拷贝成功后 修改拷贝对象过后 ps如果看不清楚图片可以在标签窗口打开 知识点五深拷贝案例 该类只和浅拷贝在clone方法的实现上有区别其他地方相同 package cn.cupcat.java8;public class Person implements Cloneable{private String name;private int age;private int[] ints;public int[] getInts() {return ints;}public Person(String name, int age, int[] ints) {this.name name;this.age age;this.ints ints;}public void setInts(int[] ints) {this.ints ints;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public Person(String name, int age) {this.name name;this.age age;}/*** 深拷贝* */Overridepublic Object clone() throws CloneNotSupportedException {Person person new Person(name,age);int[] ints new int[this.ints.length];System.arraycopy(this.ints,0,ints,0,ints.length);person.setInts(ints);return person;} }该测试类和前拷贝测试类相同 package cn.cupcat.java8;import org.junit.Test;public class CloneTest {Testpublic void test() throws CloneNotSupportedException {int[] ints {1,2,3};String name zhangxiangyang;int age 23;Person person new Person(zhangxiangyang,age,ints);System.out.print(克隆前 age age ... name name 数组);for (int i : ints){System.out.print(i );}System.out.println();//拷贝Person clonePerson (Person) person.clone();int clonePersonAge clonePerson.getAge();String clonePersonName clonePerson.getName();int[] ints1 clonePerson.getInts();System.out.print(克隆后 age clonePersonAge ... name clonePersonName 数组 );for (int i : ints1){System.out.print(i );}System.out.println();//修改ints1[0] 50;//修饰可控后的对象clonePerson.setName(666666666);age person.getAge();name person.getName();System.out.println();System.out.print(修改后原对象 age age ... name name 数组 );for (int i : ints){System.out.print(i );}System.out.println();System.out.println(person clonePerson ? (person clonePerson ));} }结果为 一克隆前 age 23... name zhangxiangyang 数组1 2 3 二克隆后 age 23... name zhangxiangyang 数组 1 2 3 三修改后原对象 age 23... name zhangxiangyang数组 1 2 3 四person clonePerson ? false总结 1.通过四可以看出完成了拷贝并且克隆对象和原对象不是同一对象没有同一引用 2.通过一、二可以看出完成了拷贝并且数据正确 3.通过三我们修改克隆以后的对象打印原对象发现没有影响到原对象的数据也就是说完成的深拷贝下面使用图解说明一下画图说明 拷贝完成后 修改拷贝后对象后 知识点六总结 拷贝也算是我们经常使用的一个方法但是如果是不明白其中原理的程序员可能还是会入坑的。下面总结几条使用建议1.一定要实现Cloneable接口2.复写clone()方法注意默认是浅拷贝这里需要将引用类型进行深拷贝处理3.特殊String类虽然是引用类型但是是final类同时也有字符串常量池的存在不必进行处理
http://www.pierceye.com/news/732225/

相关文章:

  • 网站制作素材图片英文站 wordpress seo优化
  • 现在ui做的比较好的网站徐州经济技术开发区
  • 网站设计公司网帐号售卖网站建设
  • 信阳建设网站哪家好wordpress 文章评价插件
  • 网校网站模板东莞网站关键字
  • 做游戏的php网站2019做seo网站
  • 做外贸那个网站好免费asp主机网站
  • 网站设计服务要不要交文化事业建设费在线解压zip网站
  • 沈阳关键词自然排名西安百度seo排名软件
  • 徐州网站建设市场分析手工灯笼简单又好看
  • 网站开发学什么语音提供设计的的网站
  • 微站和网站数据同步icp备案查询
  • 诸城网站制作wordpress圆角插件汉化
  • 杨家平网站建设小程序开发网站
  • 校园文化建设图片网站浅析图书馆门户网站建设
  • 网站开发与应用案例教程哈尔滨自助建站系统
  • 网站关键词排名seo百度网址链接是多少
  • 电子商务网站的建设收益直播软件的app
  • 遵义在百度做个网站多少钱如何建立企业网站
  • 我想做个网站手机网站建设优势
  • 网站制作毕业设计滁州市建设局网站
  • saas建站和开源建站的区别比较高端的网页
  • 新公司董事长致辞做网站wordpress二次开发手册chm
  • 网站显示建设中大型企业网站制作
  • 长沙自动化网站建设wordpress 自定义栏目 调用
  • 吉大建设工程学院官方网站wordpress 文章图片插件
  • 赤峰中国建设招标网站网页设计素材网站推荐
  • 天津网站建设电焊机wordpress主题jenney
  • 个人网站制作wordpress英文注册查询网站
  • 哪里有免费网站空间申请wordpress重定向插件