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

济南网站建设泉诺关键词优化软件排行

济南网站建设泉诺,关键词优化软件排行,罗定市住房和城乡建设局网站,口碑好的做网站java:浅复制与深复制 八种原始数据类型(int,boolean,char,byte,short,float,double.long)的复制 int apples 5; int pears apples; 万类之王Object有11个方法,有两个protected的方法,其中一个为clone方法。 该方法的签名…

java:浅复制与深复制

八种原始数据类型(int,boolean,char,byte,short,float,double.long)的复制
       int apples = 5; 
       int pears = apples; 

万类之王Object有11个方法,有两个protected的方法,其中一个为clone方法。
该方法的签名是:protected native Object clone() throws CloneNotSupportedException;
因为每个类直接或间接的父类都是Object,因此它们都含有clone()方法,但是因为该方法是protected,所以都不能在类外进行访问。要想对一个对象进行复制,就需要对clone方法覆盖。
一般步骤是(浅复制):
       1. 被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedException异常) 该接口为标记接口(不含任何方法)
       2. 覆盖clone()方法,访问修饰符设为public。方法中调用super.clone()方法得到需要的复制对象,(native为本地方法)
       class Student implements Cloneable{ 
           private int number; 
           public int getNumber() { 
               return number; 
           } 
           public void setNumber(int number) { 
               this.number = number; 
           } 
            
           @Override 
           public Object clone() { 
               Student stu = null; 
               try{ 
                   stu = (Student)super.clone(); 
               }catch(CloneNotSupportedException e) { 
                   e.printStackTrace(); 
               } 
               return stu; 
           } 
       } 
       public class Test {           
           public static void main(String args[]) {                
               Student stu1 = new Student(); 
               stu1.setNumber(12345); 
               Student stu2 = (Student)stu1.clone(); 
                
               System.out.println("学生1:" + stu1.getNumber()); 
               System.out.println("学生2:" + stu2.getNumber()); 
                
               stu2.setNumber(54321); 
            
               System.out.println("学生1:" + stu1.getNumber()); 
               System.out.println("学生2:" + stu2.getNumber()); 
                System.out.println(stu1 == stu2); 
           } 
       } 
       输出结果为:
           学生1:12345 
           学生2:12345 
       
           学生1:12345 
           学生2:54321 

            false

深复制:
       class Address implements Cloneable { 
           private String add; 
           public String getAdd() { 
               return add; 
           } 
           public void setAdd(String add) { 
               this.add = add; 
           } 
            
           @Override 
           public Object clone() { 
               Address addr = null; 
               try{ 
                   addr = (Address)super.clone(); 
               }catch(CloneNotSupportedException e) { 
                   e.printStackTrace(); 
               } 
               return addr; 
           } 
       } 
       class Student implements Cloneable{ 
           private int number; 
           private Address addr; 
            
           public Address getAddr() { 
               return addr; 
           } 
           public void setAddr(Address addr) { 
               this.addr = addr; 
           } 
           public int getNumber() { 
               return number; 
           } 
           public void setNumber(int number) { 
               this.number = number; 
           } 
            
           @Override 
           public Object clone() { 
               Student stu = null; 
               try{ 
                   stu = (Student)super.clone();   //浅复制  
               }catch(CloneNotSupportedException e) { 
                   e.printStackTrace(); 
               } 
               stu.addr = (Address)addr.clone();   //深度复制  
               return stu; 
           } 
       } 
       public class Test {          
           public static void main(String args[]) {                
               Address addr = new Address(); 
               addr.setAdd("杭州市"); 
               Student stu1 = new Student(); 
               stu1.setNumber(123); 
               stu1.setAddr(addr); 
                
               Student stu2 = (Student)stu1.clone(); 
                
               System.out.println("学生1:" + stu1.getNumber() + ",地址:" + stu1.getAddr().getAdd()); 
               System.out.println("学生2:" + stu2.getNumber() + ",地址:" + stu2.getAddr().getAdd()); 
                
               addr.setAdd("西湖区"); 
                
               System.out.println("学生1:" + stu1.getNumber() + ",地址:" + stu1.getAddr().getAdd()); 
               System.out.println("学生2:" + stu2.getNumber() + ",地址:" + stu2.getAddr().getAdd()); 
           } 
       } 
       输出结果为:
            学生1:123,地址:杭州市 
            学生2:123,地址:杭州市 
       
            学生1:123,地址:西湖区 
            学生2:123,地址:杭州市

总结:
       浅拷贝是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝,没有对引用指向的对象进行拷贝。而深拷贝是指在拷贝对象时,同时会对引用指向的对象进行拷贝。区别就在于是否对 对象中的引用变量所指向的对象进行拷贝。

最后我们可以看看API里其中一个实现了clone方法的类:
java.util.Date(该类其实也属于深度复制。):
/**
* Return a copy of this object.
*/ 
public Object clone() { 
    Date d = null; 
    try { 
        d = (Date)super.clone(); 
        if (cdate != null) { 
            d.cdate = (BaseCalendar.Date) cdate.clone(); 
        } 
    } catch (CloneNotSupportedException e) {
// Won't happen
    }   
    return d; 

http://www.lbrq.cn/news/2404621.html

相关文章:

  • 济南网站定制策划软文营销的成功案例
  • 办公用品网站建设share群组链接分享
  • 专做立体化的网站郑州网站托管
  • 如何用威客做网站推广 方案电子商务网页制作
  • 网站备案ip地址段网站自动提交收录
  • 做面包有哪些网站知乎江北seo页面优化公司
  • 本地网站建设多少钱学生没钱怎么开网店
  • 广州智能建站网站交易平台
  • 武汉人才网seo的中文意思
  • 海淀网站建设多少钱百度竞价排名的优缺点
  • 机械网站建设注意什么下载百度app下载
  • 深圳住建局官网登录入口青岛推广优化
  • html网站的直播怎么做的企业查询app
  • 公众号申请网站网站管理
  • 北京做软件最好的公司重庆seo网站收录优化
  • 西安网站建设维护达州seo
  • 营口做网站企业怎么样在百度上推广自己的产品
  • 做电商怎么找货源seo网站优化系统
  • 做室内设计的网站有哪些方面陕西seo关键词优化外包
  • 谷歌账号注册网站打不开黑龙江最新疫情
  • 淘宝客是如何做网站与淘宝对接的天津百度seo推广
  • 海外营销网站建设百度做免费推广的步骤
  • 做公众号时图片的网站外链代发免费
  • 延吉做网站ybdiran友情链接网站免费
  • 舅舅建筑网东莞优化怎么做seo
  • 一个页面多少钱惠州seo快速排名
  • 自己做微网站制作教程网站点击量查询
  • 网站建设 补充协议百度学术官网论文查重免费
  • 做网站开发的是不是程序员seo关键词优化报价
  • 世界500强企业排名2021茶叶seo网站推广与优化方案
  • 17.TaskExecutor与ResourceManager交互
  • 彩虹云商城全源码 - 全新客服系统上线
  • 子线程不能直接 new Handler(),而主线程可以
  • 【Linux服务器】-MySQL数据库参数调优
  • UGUI 性能优化系列:第三篇——渲染与像素填充率优化
  • Spring Cloud Gateway与Envoy Sidecar在微服务请求路由中的架构设计分享