快速业务通道

大话深入浅出Effective Java核心实战编程思想之猴王的把戏 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

大话深入浅出Effective Java核心实战编程思想之猴王的把戏

时间:2011-09-24 blogjava Heis

不知道大家还记不记得在《西游记》里的莲花洞夺宝的故事,就是猴王巧夺宝物,收复金银角大王那 一章。到底这个故事给了我们什么启示呢?这故事又和Effective Java有什么联系?还是延续上篇文章的 风格吧,看代码,读故事。

  1import static org.junit.Assert.*; 2import org.junit.Test; 3 4 5public class TestClone { 6 7    @Test 8    public void testClone(){ 9        // 西天取经的路上,金角大王和银角大王把唐僧抓走了 10         猴王 齐天大圣=new 猴王("齐天大圣孙悟空"); 11        //大圣手拿金 箍棒,正要收拾金、银角大王。 12        齐天大圣.取得武器(new 金箍棒()); 13 14        /**//* 15         * 这时候,金角大王和银角大王听闻大圣 来者不善,立马让小妖去请出他们的宝葫芦 16         * 当然这一切瞒不过神通广大的 大圣爷。大圣猴毛一吹,变出一个老道士。 17         */ 18        猴王 空悟孙道士=(猴王)齐天大圣.变出一个化身(); 19        空悟孙道士.改名("空悟孙道 士"); 20 21        /**//* 22         * 老道士忽悠小妖说他的葫 芦更厉害,能把天都给收了,智力值只有20的小妖看了羡慕不已,要求交换葫芦。 23          * 老道士自然很乐意,换了葫芦,直奔妖怪洞穴,收服了金、银角大王。 24          */ 25        空悟孙道士.取得武器(new 宝葫芦()); 26 27        //问题1:道士拿的是什么武器?道士是由大圣克隆而来,拿的却不是金箍棒,而是宝葫芦? 28         assertFalse(齐天大圣.的武器() instanceof 金箍棒); 29        assertTrue(空悟孙道士.的武器() instanceof 宝葫芦); 30 31        //问题2:大 圣和道士拿同一个武器? 32        assertSame(空悟孙道士.的武器(),齐天大圣.的武器 ()); 33 34        //问题3:既然武器是一样的,为什么名字又不一样呢? 35         assertEquals(齐天大圣.名字(),"齐天大圣孙悟空"); 36        assertEquals(空悟孙道士.名字(),"空悟孙道士"); 37 38        /**//* 39          * 答案:猴王类继承了Object.clone(),其克隆原理是:如果类每个域包含一个原语类 型(primitive)的值, 40         * 或者包含一个指向非可变(final)对象的引用, 那么返回的值或对象是一个相同的拷贝;否则,如果是可变类,则会返回相同的引用。 41          * 因为金箍棒类不是非可变类,而String是,所以你应该明白,为什么大圣爷和他的克隆体有 不同的名字,却有相同的武器吧。 42         * 43         * Object.clone()被称为浅拷贝,或浅克隆。相对应的是深克隆(deep clone),他是指类在克隆时也拷贝 可变对象。 44         * 看到这里你应该知道其实这个猴王类实现得不合理,他应该拥 有一个深克隆的方法。 45         */ 46    } 47 48    class 猴王 implements Cloneable{ 49        private String name; 50        private 武器[] weapon=new 武器[1]; 51 52        public 猴王(String name) { 53            this.name=name; 54        } 55 56         /** *//** 57         * 取得一个猴王的浅克隆化身 58          * @return 59         */

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号