??xml version="1.0" encoding="utf-8" standalone="yes"?>在线国产精品视频,欧美精品一二三四,日韩av系列http://www.aygfsteel.com/hiswing/archive/2006/08/30/66561.htmlhiswinghiswingWed, 30 Aug 2006 01:25:00 GMThttp://www.aygfsteel.com/hiswing/archive/2006/08/30/66561.htmlhttp://www.aygfsteel.com/hiswing/comments/66561.htmlhttp://www.aygfsteel.com/hiswing/archive/2006/08/30/66561.html#Feedback0http://www.aygfsteel.com/hiswing/comments/commentRss/66561.htmlhttp://www.aygfsteel.com/hiswing/services/trackbacks/66561.html首先让我们来复习下一什么是多线E?

  多线E是q样一U机Ӟ它允许在E序中ƈ发执行多个指令流Q每个指令流都称Z个线E,彼此间互相独立?/p>

  U程又称量q程Q它和进E一h有独立的执行控制Q由操作pȝ负责调度Q区别在于线E没有独立的存储I间Q而是和所属进E中的其它线E共享一个存储空_q得线E间的通信q较q程单?/p>

  多个U程的执行是q发的,也就是在逻辑上“同时”,而不是否是物理上的“同时”。如果系l只有一个CPUQ那么真正的“同时”是不可能的Q但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它Q只需要设惛_个线E是同时执行卛_?/p>

  多线E和传统的单U程在程序设计上最大的区别在于Q由于各个线E的控制彼此独立,使得各个U程之间的代码是乱序执行的?/p>

  l过以上介绍Q想必大安已经回忆起当时写多线E程序的痛苦。那么再让我们回忆一下,Java中是如何实现多线E的吧?/p>

  作ؓ一个完全面向对象的语言QJava提供了类 java.lang.Thread 来方便多U程~程Q这个类提供了大量的Ҏ来方便我们控制自q各个U程。让我们来看一?Thread cRThread cL重要的方法是 run() Q它为Thread cȝҎ start() 所调用Q提供我们的U程所要执行的代码。ؓ了指定我们自q代码Q只需要覆盖它Q?/p>

 1 public   class  MyThread  extends  Thread  {
 2          private   int  index;
 3          
 4          public  MyThread( int  i)  {
 5                  this .index  =  i;
 6         }

 7         
 8          public   void  run()  {
 9                  while  ( this .index  <   6 {
10                         System.out.println( " index =  "   +   this .index);
11
12                          this .index ++ ;
13                 }

14         }

15         
16          public   static   void  main(String[] args)  {
17                  for  ( int  i  =   0 ; i  <   10 ; i ++ {
18                          new  MyThread(i).start();
19                 }

20         }

21 }

22

  当然Q除了以上这U方法,Javaq提供了Runnable 接口。该接口只有一个方?run()Q我们声明自qcd?Runnable 接口q提供这一ҎQ将U程代码写入其中Q就完成了这一部分的Q务。但?Runnable 接口q没有Q何对U程的支持,我们q必d?Thread cȝ实例Q这一炚w过 Thread cȝ构造函数来实现?/p>

 1 public   class  MyThread  implements  Runnable  {
 2          private   int  index;
 3          
 4          public  MyThread( int  i)  {
 5                  this .index  =  i;
 6         }

 7         
 8          public   void  run()  {
 9                  while  ( this .index  <   6 {
10                         System.out.println( " index =  "   +   this .index);
11
12                          this .index ++ ;
13                 }

14         }

15         
16          public   static   void  main(String[] args)  {
17                  for  ( int  i  =   0 ; i  <   10 ; i ++ {
18                          new  Thread( new  MyThread(i)).start();
19                 }

20         }

21 }

22
23


  我们已经习惯了以上两U线E的ҎQ但是,Eclipse的swt却不相同。如果按照我们以上的ҎQ当讉Kswt的某一lgӞpȝ会抛出异常:org.eclipse.swt.SWTException: Invalid thread access 那么Q在swt中,如保使用U程呢?

 1 public   class  MyThread  extends  Thread  {
 2      private  Display display;
 3      private  Label miniLabel;
 4     
 5      private   static   int  index  =   0
 6
 7      public  MyThread(Display display, Label label)  {
 8          this .display  =  display;
 9          this .miniLabel  =  label;
10     }

11     
12      public   void  run()  {
13          try   {
14              while  ( true {
15                 Thread.sleep( 1000 );
16                  if  ( ! this .display.isDisposed())  {
17                     Runnable runnable  =   new  Runnable()  {
18                          public   void  run()  {
19                              //  your source
20                         }

21                     }
;
22                     
23                     display.asyncExec(runnable);  //  关键在这一句上
24                 }

25             }

26         }
  catch  (Exception ex)  {}
27     }

28 }

swt的display有两U方式实现线E:asyncExec是线E异步的QsyncExec是线E同步的?br />



hiswing 2006-08-30 09:25 发表评论
]]>
止重复启动http://www.aygfsteel.com/hiswing/archive/2006/08/10/62887.htmlhiswinghiswingThu, 10 Aug 2006 15:59:00 GMThttp://www.aygfsteel.com/hiswing/archive/2006/08/10/62887.htmlhttp://www.aygfsteel.com/hiswing/comments/62887.htmlhttp://www.aygfsteel.com/hiswing/archive/2006/08/10/62887.html#Feedback1http://www.aygfsteel.com/hiswing/comments/commentRss/62887.htmlhttp://www.aygfsteel.com/hiswing/services/trackbacks/62887.html
  前些日子用SWING为朋友写了一个程序,其中有不可同时启动多个pȝ实例的要求。由于没有一个好的思\Q所以走了很多弯路。现在终于解决了Q积累了一些心h与大家分享?br />
  初遇该问题时Q我首先惛_的是q程。当E序启动时判断操作系l中是否存在该进E,如果存在退出启动,否则启动E序。这个方法在VB或C语言中可以通过调用WIN32 API来实现。在JAVA中,要想实现该方法或许还要借助C的力量。(对于JAVA如何捕获q程Q还h评指正。)

  攑ּ了第一U方法,惛_了弱智的Ҏ--配置文g。当pȝW一ơ启动时标识设|ؓ启动中,退出时标识设|ؓ未启动。但很快发玎ͼ当非法关闭程序(比如x时未及时关闭E序Q后Q我们的E序便永q长眠了?br />
  其实Q在该程序中Q最限制我们思\的便?单机?q三个字。它l我们的印象是仅供一台机器单独用,与网l无关的。因此,我们很难思\整理到服务器与客h中去。但要解册问题恰恰要用到服务器与客h的概c想像一下我们^时启动电脑的步骤Q首先按下加电,有了电,电脑才能启动。没错,只有当电脑未加电Q也是说当我们首次启动电脑时才会做q个动作Q而且q个动作在一D|间内只会做一ơ。若要重新加电,必需先断c现在回到我们的E序Q有了这个思\Q留l我们的问题是谁来充当늚角色呢?没错Q就是之前提到过的服务器。程序首ơ启动时首先q接指定端口的服务器Q发现服务器q未启动Q于是启动服务器Q启动程序。当E序复数启动Ӟ再次q接服务器,q时发现服务器已l启动了Q于是就l止启动。代码如下:

 1public class Console {
 2    /**端口?/span>*/
 3    private static int iPort = 50000;
 4    /**ȝ?/span>*/
 5    JFrame frame = null
 6    /**
 7    * pȝ入口
 8    * @param String[] args
 9    * */

10    public static void main(String[] args) throws Exception {
11        Socket socket = null//客户端连接器
12        Thread thread = null//启动服务器的U程
13
14        try {
15            //q接服务?br />16            //如果服务器未启动则抛异常
17            (socket = new Socket("localhost", iPort)).close();
18            //如果服务器已l启动则退出系l?/span>
19            System.exit(0);
20        }
 catch (Exception e) {}//未做处理
21
22        //如果服务器未启动则在新的U程中启动服务器
23        (thread = new Thread(new Server())).setDaemon(true);
24        //开始线E?/span>
25        thread.start();
26
27        //启动ȝ?/span>
28        frame = new JFrame("学v无");
29        frame.setVisible(true);
30    }

31    
32    /**
33    * 端口监听服务器端q行
34    * @author hiswing
35    */

36    static class Server implements Runnable {
37        public final void run() {
38            ServerSocket serversocket = null;
39
40            //查找没有占用的端?/span>
41            while (iPort < 60000{
42                try{
43                    serversocket = new ServerSocket(iPort);
44                }
catch(Exception ex){
45                    iPort++;
46                }

47                break;
48            }

49            try {
50                do {
51                    //监听客户端是否有q接
52                    serversocket.accept();
53
54                    //H口在Q务栏闪动
55                    if(frame.getExtendedState() == 1{
56                        frame.setExtendedState(0);
57                    }

58                    if(frame.getExtendedState() != 1{
59                        frame.toFront();
60                        frame.requestFocus();
61                        frame.repaint();
62                    }

63                }
 while(true);
64            }
 catch (Exception ex) {
65                //不做处理
66            }

67        }

68    }

69}

  ׃没有好的思\Q我们在编E中C许多弯\Q浪费了宝贵的时间。都说Y件是智慧的结Ӟ一Ҏ错?

hiswing 2006-08-10 23:59 发表评论
]]>
Swt/JFace制做pȝ托盘E序http://www.aygfsteel.com/hiswing/archive/2006/08/09/62593.htmlhiswinghiswingWed, 09 Aug 2006 08:19:00 GMThttp://www.aygfsteel.com/hiswing/archive/2006/08/09/62593.htmlhttp://www.aygfsteel.com/hiswing/comments/62593.htmlhttp://www.aygfsteel.com/hiswing/archive/2006/08/09/62593.html#Feedback1http://www.aygfsteel.com/hiswing/comments/commentRss/62593.htmlhttp://www.aygfsteel.com/hiswing/services/trackbacks/62593.html
 1 // 取得pȝ托盘对象
 2final Tray tray = shell.getDisplay().getSystemTray();
 3
 4if (tray != null{
 5        // 生成托盘对象
 6        final TrayItem item = new TrayItem(tray, SWT.NONE);
 7        // 为托盘对象添加鼠标停留时的文?/span>
 8        item.setToolTipText(“六月天?;
 9        // 为托盘添加事?/span>
10        item.addListener(SWT.Show, new Listener() {
11                public void handleEvent(Event event) {
12                        System.out.println("show");
13                }

14        }
);
15        item.addListener(SWT.Hide, new Listener() {
16                public void handleEvent(Event event) {
17                        System.out.println("hide");
18                }

19        }
);
20        item.addListener(SWT.Selection, new Listener() {
21                public void handleEvent(Event event) {
22                        System.out.println("selection");
23                }

24        }
);
25        item.addListener(SWT.DefaultSelection, new Listener() {
26                public void handleEvent(Event event) {
27                        System.out.println("default selection");
28                }

29        }
);
30        // 为托盘对象添加显C用的图?/span>
31        item.setImage(image);
32        // 生成菜单?/span>
33        final Menu menu = new Menu(shell, SWT.POP_UP);
34        MenuItem miShow = new MenuItem(menu, SWT.PUSH);
35        miShow.setText("S&how");
36        
37        miShow.addSelectionListener(new SelectionListener() {
38                public void widgetSelected(SelectionEvent arg0) {
39                        shell.setVisible(true);
40                        shell.setMaximized(true);
41                }

42        
43                public void widgetDefaultSelected(SelectionEvent arg0) {
44                }

45        }
);
46        
47        MenuItem miExit = new MenuItem(menu, SWT.PUSH);
48        miExit.setText("E&xit");
49        
50        miExit.addSelectionListener(new SelectionListener() {
51                public void widgetSelected(SelectionEvent arg0) {
52                        exitAction.run();
53                }

54                
55                public void widgetDefaultSelected(SelectionEvent arg0) {
56                }

57        }
);
58        
59        // 为托盘对象添加事Ӟ当右键点d标时Q显C?/span>
60        item.addListener(SWT.MenuDetect, new Listener() {
61                public void handleEvent(Event event) {
62                        menu.setVisible(true);
63                }

64        }
);
65}

ȝQswt/jface为javaE序员提供了快速反映的界面Q由于swt/jface本n也是利用JNI来调用系l的界面Q所以在实现界面的同时也为程序员提供了一些与操作pȝ交互的方法。利用这些方法,可以很方便快捷地完成我们的功能?br />
Eclipse的Forms也非怸错,提供了华丽的界面Q写出来的程序就如同|页一P当然要有一定的审美眼光Q有兴趣的朋友不仿研I研I?

hiswing 2006-08-09 16:19 发表评论
]]>
Java Excel API操作Excel的一个问?/title><link>http://www.aygfsteel.com/hiswing/archive/2006/08/04/61806.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Fri, 04 Aug 2006 09:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/hiswing/archive/2006/08/04/61806.html</guid><wfw:comment>http://www.aygfsteel.com/hiswing/comments/61806.html</wfw:comment><comments>http://www.aygfsteel.com/hiswing/archive/2006/08/04/61806.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hiswing/comments/commentRss/61806.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hiswing/services/trackbacks/61806.html</trackback:ping><description><![CDATA[  今天为cfmspȝ增加了̎功能,列表中的数据导入Excel文g中。在以前用Java操作Excel十分困难Q最常用的是生成CSVQcomma separated valuesQ文Ӟ然后用Excel打开该文件。这样只能说可以讉K到Excel文gQ但是还不能真正的操UExcel文g。还有将数据生成xmlQƈ由vb或vc来读取ƈ生成Excel文g。这h率显然比较差。Java Excel API是一个开源项目,通过它Java开发h员可以读取Excel文g的内宏V创建新的Excel文g、更新已l存在的Excel文g。用该API?Windows操作pȝ也可以通过UJava应用来处理Excel数据表。用它可以方便地操UExcel文g。关于Java Excel API的基本操作和使用请参见利用JAVA操作EXCEL文gQ这里补充一下自己在实际开发过E中遇到的问题以及解x案?br /><br />  在修改Excel文gӞ׃文g的单元格有各U样?如:ҎQ背景等)Q在更新Ӟ如果直接使用以下代码则会把单元格的样式覆盖?br /><div id="wmqeeuq" class="UBBPanel"><div id="wmqeeuq" class="UBBContent">//生成新的Label<br />jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");<br />//label插入sheet?br />ws.addCell(labelC); </div></div><br />正确的写法应该如下:<br /><div id="wmqeeuq" class="UBBPanel"><div id="wmqeeuq" class="UBBContent">//q里的数据类型ؓ字符型,若ؓ其它cd请将其{为正的cdQ否则出错?br />jxl.write.Label labelC = (Label) sheet.getWritableCell(0, 0);<br />labelC.setString("This is a Label cell"); </div></div><br />在利用如下代码进行拷贝操作时QL法成功?br /><div id="wmqeeuq" class="UBBPanel"><div id="wmqeeuq" class="UBBContent">jxl.write.Label labelC.copyTo(0, 1)Q?</div></div><br />原因是该操作只是生成了labelC的一个副本,q没有真正插入sheet中。正的做法如下Q?br /><div id="wmqeeuq" class="UBBPanel"><div id="wmqeeuq" class="UBBContent">sheet.addCell(jxl.write.Label labelC.copyTo(0, 1)); </div></div><br />  以前用com操作ExcelQ突然用Java Excel APIq真有点不适应。最主要的区别还是在思\上。我感觉目前Java Excel API功能q不是很强大Q操作v来非常复杂,q需改进。com一行代码就可完成的功能Q在q里需要写N行。话又说回来Q有谁比Microsoft更了解他们自q东西呢? <img src ="http://www.aygfsteel.com/hiswing/aggbug/61806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hiswing/" target="_blank">hiswing</a> 2006-08-04 17:46 <a href="http://www.aygfsteel.com/hiswing/archive/2006/08/04/61806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一道java题,你能做对吗?http://www.aygfsteel.com/hiswing/archive/2006/08/01/61151.htmlhiswinghiswingTue, 01 Aug 2006 03:17:00 GMThttp://www.aygfsteel.com/hiswing/archive/2006/08/01/61151.htmlhttp://www.aygfsteel.com/hiswing/comments/61151.htmlhttp://www.aygfsteel.com/hiswing/archive/2006/08/01/61151.html#Feedback11http://www.aygfsteel.com/hiswing/comments/commentRss/61151.htmlhttp://www.aygfsteel.com/hiswing/services/trackbacks/61151.html
public class Test {
    
public static void main(String[] args) {
        
int i = 11;
        i 
+= i++;

        System.out.println(i);
    }

}
L出答案后自己q行一遍。记得,要先l出{案再运行?img src ="http://www.aygfsteel.com/hiswing/aggbug/61151.html" width = "1" height = "1" />

hiswing 2006-08-01 11:17 发表评论
]]>
java克隆详述-?/title><link>http://www.aygfsteel.com/hiswing/archive/2006/07/27/60440.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 27 Jul 2006 15:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/hiswing/archive/2006/07/27/60440.html</guid><wfw:comment>http://www.aygfsteel.com/hiswing/comments/60440.html</wfw:comment><comments>http://www.aygfsteel.com/hiswing/archive/2006/07/27/60440.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hiswing/comments/commentRss/60440.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hiswing/services/trackbacks/60440.html</trackback:ping><description><![CDATA[何ؓ影子cloneQ先看一下例子?br /><div id="wmqeeuq" class="UBBPanel"><div id="wmqeeuq" class="UBBTitle"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">倒霉的羊</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img id="Codehighlighter1_46_288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_288_Open_Text.style.display='none'; Codehighlighter1_46_288_Closed_Image.style.display='inline'; Codehighlighter1_46_288_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_46_288_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_288_Closed_Text.style.display='none'; Codehighlighter1_46_288_Open_Image.style.display='inline'; Codehighlighter1_46_288_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sheep </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Cloneable</span><span id="Codehighlighter1_46_288_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_46_288_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_109_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_109_135_Open_Text.style.display='none'; Codehighlighter1_109_135_Closed_Image.style.display='inline'; Codehighlighter1_109_135_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_109_135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_135_Closed_Text.style.display='none'; Codehighlighter1_109_135_Open_Image.style.display='inline'; Codehighlighter1_109_135_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String arg) </span><span id="Codehighlighter1_109_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_109_135_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> arg;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id="Codehighlighter1_165_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_190_Open_Text.style.display='none'; Codehighlighter1_165_190_Closed_Image.style.display='inline'; Codehighlighter1_165_190_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_165_190_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_190_Closed_Text.style.display='none'; Codehighlighter1_165_190_Open_Image.style.display='inline'; Codehighlighter1_165_190_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_165_190_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_165_190_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> name;<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id="Codehighlighter1_252_286_Open_Image" onclick="this.style.display='none'; Codehighlighter1_252_286_Open_Text.style.display='none'; Codehighlighter1_252_286_Closed_Image.style.display='inline'; Codehighlighter1_252_286_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_252_286_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_252_286_Closed_Text.style.display='none'; Codehighlighter1_252_286_Open_Image.style.display='inline'; Codehighlighter1_252_286_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_252_286_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_252_286_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">圈</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img id="Codehighlighter1_339_527_Open_Image" onclick="this.style.display='none'; Codehighlighter1_339_527_Open_Text.style.display='none'; Codehighlighter1_339_527_Closed_Image.style.display='inline'; Codehighlighter1_339_527_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_339_527_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_339_527_Closed_Text.style.display='none'; Codehighlighter1_339_527_Open_Image.style.display='inline'; Codehighlighter1_339_527_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sheepfold </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Cloneable </span><span id="Codehighlighter1_339_527_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_339_527_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Sheep sheep;<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String name;<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id="Codehighlighter1_406_435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_406_435_Open_Text.style.display='none'; Codehighlighter1_406_435_Closed_Image.style.display='inline'; Codehighlighter1_406_435_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_406_435_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_406_435_Closed_Text.style.display='none'; Codehighlighter1_406_435_Open_Image.style.display='inline'; Codehighlighter1_406_435_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Sheepfold() </span><span id="Codehighlighter1_406_435_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_406_435_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    sheep </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Sheep();<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_495_525_Open_Image" onclick="this.style.display='none'; Codehighlighter1_495_525_Open_Text.style.display='none'; Codehighlighter1_495_525_Closed_Image.style.display='inline'; Codehighlighter1_495_525_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_495_525_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_495_525_Closed_Text.style.display='none'; Codehighlighter1_495_525_Open_Image.style.display='inline'; Codehighlighter1_495_525_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_495_525_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_495_525_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">克隆</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img id="Codehighlighter1_552_1335_Open_Image" onclick="this.style.display='none'; Codehighlighter1_552_1335_Open_Text.style.display='none'; Codehighlighter1_552_1335_Closed_Image.style.display='inline'; Codehighlighter1_552_1335_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_552_1335_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_552_1335_Closed_Text.style.display='none'; Codehighlighter1_552_1335_Open_Image.style.display='inline'; Codehighlighter1_552_1335_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_552_1335_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_552_1335_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id="Codehighlighter1_612_1333_Open_Image" onclick="this.style.display='none'; Codehighlighter1_612_1333_Open_Text.style.display='none'; Codehighlighter1_612_1333_Closed_Image.style.display='inline'; Codehighlighter1_612_1333_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_612_1333_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_612_1333_Closed_Text.style.display='none'; Codehighlighter1_612_1333_Open_Image.style.display='inline'; Codehighlighter1_612_1333_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception </span><span id="Codehighlighter1_612_1333_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_612_1333_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    Sheepfold fold </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Sheepfold();<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    fold.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">羊?/span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    fold.sheep.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">羊</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    Sheepfold fold2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheepfold)fold.clone();<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold2.name = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.name);<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold2.sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.sheep.getName());<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    fold2.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">大羊?/span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    fold2.sheep.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">大羊</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=====================================</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold2.name = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.name);<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">* fold2.sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold2.sheep.getName());<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> fold.name = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold.name);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">* fold.sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fold.sheep.getName());<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=====================================</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />  在这个例子中有三个类QSheep和Sheepflod都实CCloneable接口Qƈ且覆写了ObjectcȝcloneҎQ说明这两个cLh克隆能力的。注意一点,在Sheepflod中持有一个Sheep的实例,q在MaincM对其q行克隆Q结果如下:<br />fold2.name = 羊?br />fold2.sheep.getName() = 羊<br />=====================================<br />fold2.name = 大羊?br />* fold2.sheep.getName() = 大羊<br />fold.name = 羊?br />* fold.sheep.getName() = 大羊<br />===================================== <br /><br />  h意一下结果中带有"*"L两条l果语句。fold2.sheep和fold.sheep的name都变Z"大羊"Q很奇怪是吗?在此之前Q我们只对fold2.sheep的name赋过倹{ؓ什么fold.sheep的name也变Z"大羊"呢?原因很简单,因ؓ它们是指向同一个对象的不同引用。从中可以看出,调用ObjectcMclone()ҎӞ首先在内存中划分一块同原对象相同的I间Q然后将原对象的内容原样拯x对象。我们知道,java中有基本数据cdQ对于基本数据类型,q样的操作是没有问题的,但对非基本类型变量,它们保存的仅仅是对象的引用,q也是ؓ什么clone后非基本cd变量和原对象中的变量指向同一个对象的原因。可能你已经注意刎ͼE序中用CStringcdQ即对象Qؓ什么没有出现引用指向同一地址的情况?q是因ؓString是一个不可更改的c(immutable classQ,每次l它赋值时Q都会生一个新的String对象。如String str = "a"; str += "b";在这两句代码中,当执行str += "b"Ӟ实际上是重新成生了一个gؓ"ab"的String对象Q即重新分配了一块内存空间。以上cloneҎ通常被称?影子clone"?影子clone"l我们留下了一个问题,卛_个引用指向同一个对象。如何解册问题呢?{案?深度clone"。把上面的例子改成深度clone很简单,只需Sheepfold的clone()Ҏ改ؓ如下卛_Q?br /><div id="wmqeeuq" class="UBBPanel"><div id="wmqeeuq" class="UBBTitle"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img id="Codehighlighter1_56_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_161_Open_Text.style.display='none'; Codehighlighter1_56_161_Closed_Image.style.display='inline'; Codehighlighter1_56_161_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_56_161_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_56_161_Closed_Text.style.display='none'; Codehighlighter1_56_161_Open_Image.style.display='inline'; Codehighlighter1_56_161_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_56_161_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_56_161_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    Sheepfold fold </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheepfold)</span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    sheep </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheep)fold.sheep.clone();<br /></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> fold;<br /></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span></div></div></div><br />  xQclone基本完成了。当Ӟ在实际用过E中需要注意一些问题,比如StringBuffer不可以直接cloneQ当Ӟ也有解决办法Q等{?br /><br />  完! <br /><br />  2004-09-01<img src ="http://www.aygfsteel.com/hiswing/aggbug/60440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hiswing/" target="_blank">hiswing</a> 2006-07-27 23:32 <a href="http://www.aygfsteel.com/hiswing/archive/2006/07/27/60440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java克隆详述-?/title><link>http://www.aygfsteel.com/hiswing/archive/2006/07/27/60438.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 27 Jul 2006 15:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/hiswing/archive/2006/07/27/60438.html</guid><wfw:comment>http://www.aygfsteel.com/hiswing/comments/60438.html</wfw:comment><comments>http://www.aygfsteel.com/hiswing/archive/2006/07/27/60438.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hiswing/comments/commentRss/60438.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hiswing/services/trackbacks/60438.html</trackback:ping><description><![CDATA[  在今天的工作中,Z解决对象地址的问题,使用了java的clone。但发现有些同事竟然对clone很是不明白,甚至?引用"(reference)也是一头雾水。这些都是java最基础的概念,也是最重要的,是我们在学习java时必领会的?br /><br />  l常听到有h说java中没有指针。事实如此吗QnoQjava是有指针的,只不q换了个名字而已Q也是我们l常提到的引用。我们知道,在java中一切都是对象,那么我们如何操控对象Q如何在成千上万的对象中扑ֈ我们所需的那个对象呢Q又是如何让对象按照我们的意思来完成d的呢Q?br />  Object o = new Object(); <br /><br />  q是java中最常见的语句了Q在q句话中做了三g事。首先声明一个Objectcd的变量oQ在内存中ؓ对象划分一块地址new Object()Q将声明的变量指向内存中的对象。如此一来,我们可以通过o来操U对象了。就好像孩子们玩的遥控飞机,在空中飞行的是飞机,而它做Z动作的却是孩子们手中的摇控器?br /><br />  "克隆"是如今听到的较多的词汇,听说已经某只羊克隆了好几䆾了。但愿这U技术不要在n上实验。java中也?克隆"Q与现实世界的克隆一P一个实际存在的对象拯几䆾。如下:<br /><div id="wmqeeuq" class="UBBPanel"><div id="wmqeeuq" class="UBBTitle"> </div><div id="wmqeeuq" class="UBBContent"><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">倒霉的羊</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #008000"><img id="Codehighlighter1_46_292_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_292_Open_Text.style.display='none'; Codehighlighter1_46_292_Closed_Image.style.display='inline'; Codehighlighter1_46_292_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_46_292_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_292_Closed_Text.style.display='none'; Codehighlighter1_46_292_Open_Image.style.display='inline'; Codehighlighter1_46_292_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sheep </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Cloneable</span><span id="Codehighlighter1_46_292_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_46_292_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img id="Codehighlighter1_109_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_109_135_Open_Text.style.display='none'; Codehighlighter1_109_135_Closed_Image.style.display='inline'; Codehighlighter1_109_135_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_109_135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_135_Closed_Text.style.display='none'; Codehighlighter1_109_135_Open_Image.style.display='inline'; Codehighlighter1_109_135_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String arg) </span><span id="Codehighlighter1_109_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_109_135_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> arg;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id="Codehighlighter1_165_192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_192_Open_Text.style.display='none'; Codehighlighter1_165_192_Closed_Image.style.display='inline'; Codehighlighter1_165_192_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_165_192_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_192_Closed_Text.style.display='none'; Codehighlighter1_165_192_Open_Image.style.display='inline'; Codehighlighter1_165_192_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_165_192_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_165_192_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> name;<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id="Codehighlighter1_254_290_Open_Image" onclick="this.style.display='none'; Codehighlighter1_254_290_Open_Text.style.display='none'; Codehighlighter1_254_290_Closed_Image.style.display='inline'; Codehighlighter1_254_290_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_254_290_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_254_290_Closed_Text.style.display='none'; Codehighlighter1_254_290_Open_Image.style.display='inline'; Codehighlighter1_254_290_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_254_290_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_254_290_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.clone();<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">克隆</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img id="Codehighlighter1_317_693_Open_Image" onclick="this.style.display='none'; Codehighlighter1_317_693_Open_Text.style.display='none'; Codehighlighter1_317_693_Closed_Image.style.display='inline'; Codehighlighter1_317_693_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_317_693_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_317_693_Closed_Text.style.display='none'; Codehighlighter1_317_693_Open_Image.style.display='inline'; Codehighlighter1_317_693_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_317_693_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_317_693_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id="Codehighlighter1_396_691_Open_Image" onclick="this.style.display='none'; Codehighlighter1_396_691_Open_Text.style.display='none'; Codehighlighter1_396_691_Closed_Image.style.display='inline'; Codehighlighter1_396_691_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_396_691_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_396_691_Closed_Text.style.display='none'; Codehighlighter1_396_691_Open_Image.style.display='inline'; Codehighlighter1_396_691_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> CloneNotSupportedException </span><span id="Codehighlighter1_396_691_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.aygfsteel.com/images/dot.gif" /></span><span id="Codehighlighter1_396_691_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        Sheep sheep </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Sheep(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">先得到那只羊的实?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        sheep.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">我是真的</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">l它做个记号</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sheep.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> sheep.getName());<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        Sheep sheepClone </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Sheep)sheep.clone(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">开始克?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sheepClone.getName() = </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> sheepClone.getName());<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span></div></div></div><br />q行E序l果为:<br />sheep.getName() = 我是真的<br />sheepClone.getName() = 我是真的<br /><br />  两只是一模一LQ哪怕那只羊瘸腿Q。让我们来看看代码。首先要注意的是SheepcdCCloneable接口Q该接口属于java.lang包,默认已经导入了)Q该接口中ƈ没有定义要实现的ҎQ是个空接口Qv标志作用。也是_实现了这个接口的就不再是只普通的,它是一只可以被克隆的羊。再往下看Q有个cloneҎQ返回Objectcd的对象,q抛出CloneNotSupportedException异常。该Ҏ覆写了父c?Object)的cloneҎQƈ在最后调用了super.clone()Q这也意味着无论clonecȝ承结构是什么样的,super.clone()都会直接或间接调用Objectcȝclone()Ҏ。看看jdk帮助文档会发玎ͼObjectcȝclone()是一个nativeҎQ我们知道,nativeҎ的效率一般来说都是远高于java中的非nativeҎ。这也说明了new一个对象,然后原对象中的数据导入到新创徏的对象中ȝ做法是多么愚蠢。必说明的是Object中的cloneҎ是protected的,所以要使用clone必ȝ承Objectc(默认Q。ƈ且ؓ了可以其它c调用该ҎQ必d其作用域讄为public?br /><br />  以上只是一个简单clone的实现。明天说?影子clone"?深度clone"?br /><br />  夜,׃?<br /><br />  2004-08-31<img src ="http://www.aygfsteel.com/hiswing/aggbug/60438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hiswing/" target="_blank">hiswing</a> 2006-07-27 23:24 <a href="http://www.aygfsteel.com/hiswing/archive/2006/07/27/60438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ӻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ѳ</a>| <a href="http://" target="_blank">ƽң</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">߮</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӱ</a>| <a href="http://" target="_blank">û</a>| <a href="http://" target="_blank">ɳƺ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank">ͩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ǹ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˿</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">Ž</a>| <a href="http://" target="_blank">̨</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>