﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;b&gt;牛仔裤的夏天&lt;/b&gt;-随笔分类-Java</title><link>http://www.blogjava.net/luckyrobbie/category/8493.html</link><description>&lt;font size=-1&gt;JAVA是蓝色的-&lt;/font&gt;
&lt;!-- Start FastOnlineUsers.com --&gt;
&lt;a href="http://www.fastonlineusers.com"&gt;&lt;script type="text/javascript" src="http://fastonlineusers.com/on2.php?d=www.blogjava.net/luckyrobbie"&gt;&lt;/script&gt; online&lt;/a&gt;&lt;!-- End FastOnlineUsers.com --&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:18:04 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:18:04 GMT</pubDate><ttl>60</ttl><item><title>用decorate模式画一张画</title><link>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37638.html</link><dc:creator>luckyrobbie</dc:creator><author>luckyrobbie</author><pubDate>Mon, 27 Mar 2006 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37638.html</guid><wfw:comment>http://www.blogjava.net/luckyrobbie/comments/37638.html</wfw:comment><comments>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luckyrobbie/comments/commentRss/37638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luckyrobbie/services/trackbacks/37638.html</trackback:ping><description><![CDATA[
		<p>我对decorate模式的理解：<br />1-首先要有一个Interface，提供一个通用的方法；<br />2-其次有n多个class来实现这个接口中的方法，这些实现方法在功能上应该是并列的，但不是必须的，从而可以根据需要decorate那个需要被修饰的初始对象。<br />3-最后这些class都有一个带有Interface作为参数的构造方法和一个Interface的属性，这样在构造的时候就可以取得那个需要修饰的对象的实例，然后在实现Interface的方法里面，首先实现修饰对象实例的修饰方法，然后再进行自己的decorate方法。<br /><br />根据这个想法来画一张画：</p>
		<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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> test;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_41_65_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_65_Open_Text.style.display='none'; Codehighlighter1_41_65_Closed_Image.style.display='inline'; Codehighlighter1_41_65_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_41_65_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_65_Closed_Text.style.display='none'; Codehighlighter1_41_65_Open_Image.style.display='inline'; Codehighlighter1_41_65_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> Painting </span>
				<span id="Codehighlighter1_41_65_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.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_41_65_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.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"> paint();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_106_349_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_349_Open_Text.style.display='none'; Codehighlighter1_106_349_Closed_Image.style.display='inline'; Codehighlighter1_106_349_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_106_349_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_349_Closed_Text.style.display='none'; Codehighlighter1_106_349_Open_Image.style.display='inline'; Codehighlighter1_106_349_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> SunPainting </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> Painting </span>
				<span id="Codehighlighter1_106_349_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.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_106_349_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Painting painting </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_158_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_158_161_Open_Text.style.display='none'; Codehighlighter1_158_161_Closed_Image.style.display='inline'; Codehighlighter1_158_161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_158_161_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_158_161_Closed_Text.style.display='none'; Codehighlighter1_158_161_Open_Image.style.display='inline'; Codehighlighter1_158_161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> SunPainting() </span>
						<span id="Codehighlighter1_158_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_158_161_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_203_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_203_234_Open_Text.style.display='none'; Codehighlighter1_203_234_Closed_Image.style.display='inline'; Codehighlighter1_203_234_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_203_234_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_203_234_Closed_Text.style.display='none'; Codehighlighter1_203_234_Open_Image.style.display='inline'; Codehighlighter1_203_234_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> SunPainting(Painting painting) </span>
						<span id="Codehighlighter1_203_234_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_203_234_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.painting </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> painting;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_258_347_Open_Image" onclick="this.style.display='none'; Codehighlighter1_258_347_Open_Text.style.display='none'; Codehighlighter1_258_347_Closed_Image.style.display='inline'; Codehighlighter1_258_347_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_258_347_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_258_347_Closed_Text.style.display='none'; Codehighlighter1_258_347_Open_Image.style.display='inline'; Codehighlighter1_258_347_Open_Text.style.display='inline';" src="http://www.blogjava.net/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"> paint() </span>
						<span id="Codehighlighter1_258_347_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_258_347_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_284_309_Open_Image" onclick="this.style.display='none'; Codehighlighter1_284_309_Open_Text.style.display='none'; Codehighlighter1_284_309_Closed_Image.style.display='inline'; Codehighlighter1_284_309_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_284_309_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_284_309_Closed_Text.style.display='none'; Codehighlighter1_284_309_Open_Image.style.display='inline'; Codehighlighter1_284_309_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (painting </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_284_309_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.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_284_309_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            painting.paint();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">画了一个太阳<img src="http://www.blogjava.net/images/dot.gif" /></span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_392_639_Open_Image" onclick="this.style.display='none'; Codehighlighter1_392_639_Open_Text.style.display='none'; Codehighlighter1_392_639_Closed_Image.style.display='inline'; Codehighlighter1_392_639_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_392_639_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_392_639_Closed_Text.style.display='none'; Codehighlighter1_392_639_Open_Image.style.display='inline'; Codehighlighter1_392_639_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> CloudPainting </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> Painting </span>
				<span id="Codehighlighter1_392_639_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.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_392_639_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Painting painting </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_446_449_Open_Image" onclick="this.style.display='none'; Codehighlighter1_446_449_Open_Text.style.display='none'; Codehighlighter1_446_449_Closed_Image.style.display='inline'; Codehighlighter1_446_449_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_446_449_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_446_449_Closed_Text.style.display='none'; Codehighlighter1_446_449_Open_Image.style.display='inline'; Codehighlighter1_446_449_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> CloudPainting() </span>
						<span id="Codehighlighter1_446_449_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_446_449_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_493_524_Open_Image" onclick="this.style.display='none'; Codehighlighter1_493_524_Open_Text.style.display='none'; Codehighlighter1_493_524_Closed_Image.style.display='inline'; Codehighlighter1_493_524_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_493_524_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_493_524_Closed_Text.style.display='none'; Codehighlighter1_493_524_Open_Image.style.display='inline'; Codehighlighter1_493_524_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> CloudPainting(Painting painting) </span>
						<span id="Codehighlighter1_493_524_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_493_524_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.painting </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> painting;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_548_637_Open_Image" onclick="this.style.display='none'; Codehighlighter1_548_637_Open_Text.style.display='none'; Codehighlighter1_548_637_Closed_Image.style.display='inline'; Codehighlighter1_548_637_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_548_637_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_548_637_Closed_Text.style.display='none'; Codehighlighter1_548_637_Open_Image.style.display='inline'; Codehighlighter1_548_637_Open_Text.style.display='inline';" src="http://www.blogjava.net/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"> paint() </span>
						<span id="Codehighlighter1_548_637_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_548_637_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_574_599_Open_Image" onclick="this.style.display='none'; Codehighlighter1_574_599_Open_Text.style.display='none'; Codehighlighter1_574_599_Closed_Image.style.display='inline'; Codehighlighter1_574_599_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_574_599_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_574_599_Closed_Text.style.display='none'; Codehighlighter1_574_599_Open_Image.style.display='inline'; Codehighlighter1_574_599_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (painting </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_574_599_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.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_574_599_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            painting.paint();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">画了一朵白云<img src="http://www.blogjava.net/images/dot.gif" /></span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_681_926_Open_Image" onclick="this.style.display='none'; Codehighlighter1_681_926_Open_Text.style.display='none'; Codehighlighter1_681_926_Closed_Image.style.display='inline'; Codehighlighter1_681_926_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_681_926_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_681_926_Closed_Text.style.display='none'; Codehighlighter1_681_926_Open_Image.style.display='inline'; Codehighlighter1_681_926_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> LawnPainting </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> Painting </span>
				<span id="Codehighlighter1_681_926_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.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_681_926_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Painting painting </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_734_737_Open_Image" onclick="this.style.display='none'; Codehighlighter1_734_737_Open_Text.style.display='none'; Codehighlighter1_734_737_Closed_Image.style.display='inline'; Codehighlighter1_734_737_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_734_737_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_734_737_Closed_Text.style.display='none'; Codehighlighter1_734_737_Open_Image.style.display='inline'; Codehighlighter1_734_737_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> LawnPainting() </span>
						<span id="Codehighlighter1_734_737_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_734_737_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_780_811_Open_Image" onclick="this.style.display='none'; Codehighlighter1_780_811_Open_Text.style.display='none'; Codehighlighter1_780_811_Closed_Image.style.display='inline'; Codehighlighter1_780_811_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_780_811_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_780_811_Closed_Text.style.display='none'; Codehighlighter1_780_811_Open_Image.style.display='inline'; Codehighlighter1_780_811_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> LawnPainting(Painting painting) </span>
						<span id="Codehighlighter1_780_811_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_780_811_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.painting </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> painting;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_835_924_Open_Image" onclick="this.style.display='none'; Codehighlighter1_835_924_Open_Text.style.display='none'; Codehighlighter1_835_924_Closed_Image.style.display='inline'; Codehighlighter1_835_924_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_835_924_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_835_924_Closed_Text.style.display='none'; Codehighlighter1_835_924_Open_Image.style.display='inline'; Codehighlighter1_835_924_Open_Text.style.display='inline';" src="http://www.blogjava.net/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"> paint() </span>
						<span id="Codehighlighter1_835_924_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_835_924_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_861_886_Open_Image" onclick="this.style.display='none'; Codehighlighter1_861_886_Open_Text.style.display='none'; Codehighlighter1_861_886_Closed_Image.style.display='inline'; Codehighlighter1_861_886_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_861_886_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_861_886_Closed_Text.style.display='none'; Codehighlighter1_861_886_Open_Image.style.display='inline'; Codehighlighter1_861_886_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (painting </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_861_886_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.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_861_886_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            painting.paint();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">画了一片草地<img src="http://www.blogjava.net/images/dot.gif" /></span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>再写段测试画画的代码:</p>
		<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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> test;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_41_153_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_153_Open_Text.style.display='none'; Codehighlighter1_41_153_Closed_Image.style.display='inline'; Codehighlighter1_41_153_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_41_153_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_153_Closed_Text.style.display='none'; Codehighlighter1_41_153_Open_Image.style.display='inline'; Codehighlighter1_41_153_Open_Text.style.display='inline';" src="http://www.blogjava.net/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"> TestPainting </span>
				<span id="Codehighlighter1_41_153_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.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_41_153_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_82_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_151_Open_Text.style.display='none'; Codehighlighter1_82_151_Closed_Image.style.display='inline'; Codehighlighter1_82_151_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_82_151_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_151_Closed_Text.style.display='none'; Codehighlighter1_82_151_Open_Image.style.display='inline'; Codehighlighter1_82_151_Open_Text.style.display='inline';" src="http://www.blogjava.net/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 id="Codehighlighter1_82_151_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.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_82_151_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> SunPainting(</span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> CloudPainting(</span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> LawnPainting())).paint();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>测试结果:</p>
		<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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">画了一片草地<img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />画了一朵白云<img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />画了一个太阳<img src="http://www.blogjava.net/images/dot.gif" /></span>
		</div>
		<p>
				<br /> <font color="#0099cc">最后有个问题：为什么不直接定义一个画画的类，然后把这些该怎么画的事情分别通过方法来实现呢？ 那么什么情况下使用decorate模式更为合适呢？</font></p>
<img src ="http://www.blogjava.net/luckyrobbie/aggbug/37638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luckyrobbie/" target="_blank">luckyrobbie</a> 2006-03-27 16:56 <a href="http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用六大代码问题检验你的Java知识能力</title><link>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37553.html</link><dc:creator>luckyrobbie</dc:creator><author>luckyrobbie</author><pubDate>Mon, 27 Mar 2006 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37553.html</guid><wfw:comment>http://www.blogjava.net/luckyrobbie/comments/37553.html</wfw:comment><comments>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luckyrobbie/comments/commentRss/37553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luckyrobbie/services/trackbacks/37553.html</trackback:ping><description><![CDATA[你觉得自己是一个Java专家吗？是否肯定自己已经全面掌握了Java的异常处理机制？在下面这段代码中，你能够迅速找出异常处理的六个问题吗？<br /><br />        1 OutputStreamWriter out = ...<br />　　2 java.sql.Connection conn = ...<br />　　3 try { // ⑸<br />　　4 Statement stat = conn.createStatement();<br />　　5 ResultSet rs = stat.executeQuery(<br />　　6 "select uid, name from user");<br />　　7 while (rs.next())<br />　　8 {<br />　　9 out.println("ID：" + rs.getString("uid") // ⑹<br />　　10 "，姓名：" + rs.getString("name"));<br />　　11 }<br />　　12 conn.close(); // ⑶<br />　　13 out.close();<br />　　14 }<br />　　15 catch(Exception ex) // ⑵<br />　　16 {<br />　　17 ex.printStackTrace(); // ⑴，⑷<br />　　18 }<br /><br />作为一个Java程序员，你至少应该能够找出两个问题。但是，如果你不能找出全部六个问题，请继续阅读本文。 <br /><br />本文讨论的不是Java异常处理的一般性原则，因为这些原则已经被大多数人熟知。我们要做的是分析各种可称为“反例”（anti-pattern）的违背优秀编码规范的常见坏习惯，帮助读者熟悉这些典型的反面例子，从而能够在实际工作中敏锐地察觉和避免这些问题。 <br /><br />反例之一：丢弃异常 <br /><br />代码：15行-18行。 <br /><br />这段代码捕获了异常却不作任何处理，可以算得上Java编程中的杀手。从问题出现的频繁程度和祸害程度来看，它也许可以和C/C++程序的一个恶名远播的问题相提并论??不检查缓冲区是否已满。 <br /><br />如果你看到了这种丢弃（而不是抛出）异常的情况，可以百分之九十九地肯定代码存在问题（在极少数情况下，这段代码有存在的理由，但最好加上完整的注释，以免引起别人误解）。 <br /><br />这段代码的错误在于，异常（几乎）总是意味着某些事情不对劲了，或者说至少发生了某些不寻常的事情，我们不应该对程序发出的求救信号保持沉默和无动于衷。调用一下printStackTrace算不上“处理异常”。 <br /><br />不错，调用printStackTrace对调试程序有帮助，但程序调试阶段结束之后，printStackTrace就不应再在异常处理模块中担负主要责任了。 <br /><br />丢弃异常的情形非常普遍。打开JDK的ThreadDeath类的文档，可以看到下面这段说明：“特别地，虽然出现ThreadDeath是一种‘正常的情形’，但ThreadDeath类是Error而不是Exception的子类，因为许多应用会捕获所有的Exception然后丢弃它不再理睬。 <br /><br />”这段话的意思是，虽然ThreadDeath代表的是一种普通的问题，但鉴于许多应用会试图捕获所有异常然后不予以适当的处理，所以JDK把ThreadDeath定义成了Error的子类，因为Error类代表的是一般的应用不应该去捕获的严重问题。可见，丢弃异常这一坏习惯是如此常见，它甚至已经影响到了Java本身的设计。 <br /><br />那么，应该怎样改正呢？主要有四个选择： <br /><br />1、处理异常。针对该异常采取一些行动，例如修正问题、提醒某个人或进行其他一些处理，要根据具体的情形确定应该采取的动作。再次说明，调用printStackTrace算不上已经“处理好了异常”。 <br /><br />2、重新抛出异常。处理异常的代码在分析异常之后，认为自己不能处理它，重新抛出异常也不失为一种选择。 <br /><br />3、把该异常转换成另一种异常。大多数情况下，这是指把一个低级的异常转换成应用级的异常（其含义更容易被用户了解的异常）。 <br /><br />4、不要捕获异常。 <br /><br />结论一：既然捕获了异常，就要对它进行适当的处理。不要捕获异常之后又把它丢弃，不予理睬。 <br /><br />反例之二：不指定具体的异常 <br /><br />代码：15行。 <br /><br />许多时候人们会被这样一种“美妙的”想法吸引：用一个catch语句捕获所有的异常。最常见的情形就是使用catch(Exception <br /><br />ex)语句。但实际上，在绝大多数情况下，这种做法不值得提倡。为什么呢？ <br /><br />要理解其原因，我们必须回顾一下catch语句的用途。catch语句表示我们预期会出现某种异常，而且希望能够处理该异常。异常类的作用就是告诉Java编译器我们想要处理的是哪一种异常。 <br /><br />由于绝大多数异常都直接或间接从java.lang.Exception派生，catch(Exception ex)就相当于说我们想要处理几乎所有的异常。 <br /><br />再来看看前面的代码例子。我们真正想要捕获的异常是什么呢？最明显的一个是SQLException，这是JDBC操作中常见的异常。另一个可能的异常是IOException，因为它要操作OutputStreamWriter。 <br /><br />显然，在同一个catch块中处理这两种截然不同的异常是不合适的。如果用两个catch块分别捕获SQLException和IOException就要好多了。这就是说，catch语句应当尽量指定具体的异常类型，而不应该指定涵盖范围太广的Exception类。 <br /><br />另一方面，除了这两个特定的异常，还有其他许多异常也可能出现。例如，如果由于某种原因，executeQuery返回了null，该怎么办？答案是让它们继续抛出，即不必捕获也不必处理。实际上，我们不能也不应该去捕获可能出现的所有异常，程序的其他地方还有捕获异常的机会直至最后由JVM处理。 <br /><br />结论二：在catch语句中尽可能指定具体的异常类型，必要时使用多个catch。不要试图处理所有可能出现的异常。 <br /><br />反例之三：占用资源不释放 <br /><br />代码：3行-14行。 <br /><br />异常改变了程序正常的执行流程。这个道理虽然简单，却常常被人们忽视。如果程序用到了文件、Socket、JDBC连接之类的资源，即使遇到了异常，也要正确释放占用的资源。为此，Java提供了一个简化这类操作的关键词finally。 <br /><br />finally是样好东西：不管是否出现了异常，Finally保证在try/catch/finally块结束之前，执行清理任务的代码总是有机会执行。遗憾的是有些人却不习惯使用finally。 <br /><br />当然，编写finally块应当多加小心，特别是要注意在finally块之内抛出的异常??这是执行清理任务的最后机会，尽量不要再有难以处理的错误。 <br /><br />结论三：保证所有资源都被正确释放。充分运用finally关键词。 <br /><br />反例之四：不说明异常的详细信息 <br /><br />代码：3行-18行。 <br /><br />仔细观察这段代码：如果循环内部出现了异常，会发生什么事情？我们可以得到足够的信息判断循环内部出错的原因吗？不能。我们只能知道当前正在处理的类发生了某种错误，但却不能获得任何信息判断导致当前错误的原因。 <br /><br />printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程，但只提供了一些最基本的信息，未能说明实际导致错误的原因，同时也不易解读。 <br /><br />因此，在出现异常时，最好能够提供一些文字信息，例如当前正在执行的类、方法和其他状态信息，包括以一种更适合阅读的方式整理和组织printStackTrace提供的信息。 <br /><br />结论四：在异常处理模块中提供适量的错误原因信息，组织错误信息使其易于理解和阅读。 <br /><br />反例之五：过于庞大的try块 <br /><br />代码：3行-14行。 <br /><br />经常可以看到有人把大量的代码放入单个try块，实际上这不是好习惯。这种现象之所以常见，原因就在于有些人图省事，不愿花时间分析一大块代码中哪几行代码会抛出异常、异常的具体类型是什么。把大量的语句装入单个巨大的try块就象是出门旅游时把所有日常用品塞入一个大箱子，虽然东西是带上了，但要找出来可不容易。 <br /><br />一些新手常常把大量的代码放入单个try块，然后再在catch语句中声明Exception，而不是分离各个可能出现异常的段落并分别捕获其异常。这种做法为分析程序抛出异常的原因带来了困难，因为一大段代码中有太多的地方可能抛出Exception。 <br /><br />结论五：尽量减小try块的体积。 <br /><br />反例之六：输出数据不完整 <br /><br />代码：7行-11行。 <br /><br />不完整的数据是Java程序的隐形杀手。仔细观察这段代码，考虑一下如果循环的中间抛出了异常，会发生什么事情。循环的执行当然是要被打断的，其次，catch块会执行??就这些，再也没有其他动作了。 <br /><br />已经输出的数据怎么办？使用这些数据的人或设备将收到一份不完整的（因而也是错误的）数据，却得不到任何有关这份数据是否完整的提示。对于有些系统来说，数据不完整可能比系统停止运行带来更大的损失。 <br /><br />较为理想的处置办法是向输出设备写一些信息，声明数据的不完整性；另一种可能有效的办法是，先缓冲要输出的数据，准备好全部数据之后再一次性输出。 <br /><br />结论六：全面考虑可能出现的异常以及这些异常对执行流程的影响。 <br /><br />改写后的代码 <br /><br />根据上面的讨论，下面给出改写后的代码。也许有人会说它稍微有点?嗦，但是它有了比较完备的异常处理机制。 <br /><br /><br />OutputStreamWriter out = ...<br />　　java.sql.Connection conn = ...<br />　　try {<br />　　　Statement stat = conn.createStatement();<br />　　　ResultSet rs = stat.executeQuery("select uid, name from user");<br />　　　while (rs.next()){<br />　　　　out.println("ID：" + rs.getString("uid") + "，姓名: "+ rs.getString("name"));<br />　　　}<br />　　}<br />　　catch(SQLException sqlex)<br />　　{<br />　　　out.println("警告：数据不完整");<br />　　　throw new ApplicationException("读取数据时出现SQL错误", sqlex);<br />　　}<br />　　catch(IOException ioex)<br />　　{<br />　　　throw new ApplicationException("写入数据时出现IO错误", ioex);<br />　　}<br />　　finally<br />　　{<br />　　　if (conn != null) {<br />　　　　try {<br />　　　　　conn.close();<br />　　　　}<br />　　　　catch(SQLException sqlex2)<br />　　　　{<br />　　　　　System.err(this.getClass().getName() + ".mymethod - 不能关闭数据库连接:" + sqlex2.toString());<br />　　　　}<br />　　　}<br />　　　if (out != null){<br />　　　　try {<br />　　　　　out.close();<br />　　　　}<br />　　　　catch(IOException ioex2)<br />　　　　{<br />　　　　　System.err(this.getClass().getName() + ".mymethod - 不能关闭输出文件" + ioex2.toString());<br />　　　　}<br />　　　}<br />　　}<br /><br /><br /><br /><br />本文的结论不是放之四海皆准的教条，有时常识和经验才是最好的老师。如果你对自己的做法没有百分之百的信心，务必加上详细、全面的注释。 <br /><br />一方面，不要笑话这些错误，不妨问问你自己是否真地彻底摆脱了这些坏习惯。即使最有经验的程序员偶尔也会误入歧途，原因很简单，因为它们确确实实带来了“方便”。所有这些反例都可以看作Java编程世界的恶魔，它们美丽动人，无孔不入，时刻诱惑着你。也许有人会认为这些都属于鸡皮蒜毛的小事，不足挂齿，但请记住：勿以恶小而为之，勿以善小而不为。 <img src ="http://www.blogjava.net/luckyrobbie/aggbug/37553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luckyrobbie/" target="_blank">luckyrobbie</a> 2006-03-27 10:17 <a href="http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP彩色验证码</title><link>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37552.html</link><dc:creator>luckyrobbie</dc:creator><author>luckyrobbie</author><pubDate>Mon, 27 Mar 2006 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37552.html</guid><wfw:comment>http://www.blogjava.net/luckyrobbie/comments/37552.html</wfw:comment><comments>http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luckyrobbie/comments/commentRss/37552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luckyrobbie/services/trackbacks/37552.html</trackback:ping><description><![CDATA[
		<div>
				<div>
						<h2>
								<font face="Arial" size="3">JSP彩色验证码</font>
						</h2>
						<a href="http://spaces.msn.com/user.shtml;jsessionid=1364A4BB4BE0CBF599D6DE2DE5CC104D?userid=24701">
								<u>
										<font face="Arial" color="#0000ff">xiaohanne</font>
								</u>
						</a>
						<font face="Arial"> 发表于2004-06-01 作者:xiaohanne 评价:13/6 评论数:5 点击数:5229 [</font>
						<a href="http://spaces.msn.com/favorite.shtml;jsessionid=1364A4BB4BE0CBF599D6DE2DE5CC104D?type=article&amp;title=JSP彩色验证码&amp;url=http://www.matrix.org.cn/articleView.shtml?id%3D910">
								<u>
										<font face="Arial" color="#0000ff">收藏</font>
								</u>
						</a>
						<font face="Arial">] </font>
				</div>
				<div>
						<div>
								<font face="Arial">
								</font>
						</div>
						<div>
								<font face="Arial">摘要：<br /><br /><br /><br />本文Matrix永久镜像：</font>
								<a href="http://spaces.msn.com/resource/article/0/910.html">
										<u>
												<font face="Arial" color="#0000ff">http://www.matrix.org.cn/resource/article/0/910.html</font>
										</u>
								</a>
								<font face="Arial">
										<br />说明：本文可能由Matrix原创，也可能由Matrix的会员整理，或者由<br />Matrix的Crawler在全球知名Java或者其他技术相关站点抓取并永久<br />保留镜像，Matrix会保留所有原来的出处URL，并在显著地方作出说明，<br />如果你发觉出处URL有误，请联系Matrix改正.<br /></font>
						</div>
				</div>
				<div>
						<font face="Arial">生成有4个随机数字和杂乱背景的图片，数字和背景颜色会改变，服务器端刷新（用history.go(-1)也会变）<br />原型参考ALIBABA  </font>
						<a href="http://china.alibaba.com/member/showimage">
								<u>
										<font face="Arial" color="#800080">http://china.alibaba.com/member/showimage</font>
								</u>
						</a>
						<br />
						<br />
						<font face="Arial">------------产生验证码图片的文件-----image.jsp-------------------------------------------<br /><br />&lt;%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %&gt;<br />&lt;%!<br />Color getRandColor(int fc,int bc){//给定范围获得随机颜色<br />        Random random = new Random();<br />        if(fc&gt;255) fc=255;<br />        if(bc&gt;255) bc=255;<br />        int r=fc+random.nextInt(bc-fc);<br />        int g=fc+random.nextInt(bc-fc);<br />        int b=fc+random.nextInt(bc-fc);<br />        return new Color(r,g,b);<br />        }<br />%&gt;<br />&lt;%<br />//设置页面不缓存<br />response.setHeader("Pragma","No-cache");<br />response.setHeader("Cache-Control","no-cache");<br />response.setDateHeader("Expires", 0);<br /><br />// 在内存中创建图象<br />int width=60, height=20;<br />BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);<br /><br />// 获取图形上下文<br />Graphics g = image.getGraphics();<br /><br />//生成随机类<br />Random random = new Random();<br /><br />// 设定背景色<br />g.setColor(getRandColor(200,250));<br />g.fillRect(0, 0, width, height);<br /><br />//设定字体<br />g.setFont(new Font("Times New Roman",Font.PLAIN,18));<br /><br />//画边框<br />//g.setColor(new Color());<br />//g.drawRect(0,0,width-1,height-1);<br /><br /><br />// 随机产生155条干扰线，使图象中的认证码不易被其它程序探测到<br />g.setColor(getRandColor(160,200));<br />for (int i=0;i&lt;155;i++)<br />{<br />        int x = random.nextInt(width);<br />        int y = random.nextInt(height);<br />        int xl = random.nextInt(12);<br />        int yl = random.nextInt(12);<br />        g.drawLine(x,y,x+xl,y+yl);<br />}<br /><br />// 取随机产生的认证码(4位数字)<br />String sRand="";<br />for (int i=0;i&lt;4;i++){<br />    String rand=String.valueOf(random.nextInt(10));<br />    sRand+=rand;<br />    // 将认证码显示到图象中<br />    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成<br />    g.drawString(rand,13*i+6,16);<br />}<br /><br />// 将认证码存入SESSION<br />session.setAttribute("rand",sRand);<br /><br /><br />// 图象生效<br />g.dispose();<br /><br />// 输出图象到页面<br />ImageIO.write(image, "JPEG", response.getOutputStream());<br /><br /><br />%&gt; <br /><br />---------------使用验证码图片的文件---------a.jsp------------------------------------<br /><br />&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;认证码输入页面&lt;/title&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; <br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;form method=post action="check.jsp"&gt;<br />&lt;table&gt;<br />&lt;tr&gt;<br />&lt;td align=left&gt;系统产生的认证码：&lt;/td&gt;<br />&lt;td&gt;&lt;img border=0 src="image.jsp"&gt;&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;tr&gt;<br />&lt;td align=left&gt;输入上面的认证码：&lt;/td&gt;<br />&lt;td&gt;&lt;input type=text name=rand maxlength=4 value=""&gt;&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;tr&gt;<br />&lt;td colspan=2 align=center&gt;&lt;input type=submit value="提交检测"&gt;&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br />-----------------验证的页面----------check.jsp<br /><br />&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;认证码验证页面&lt;/title&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; <br />&lt;/head&gt;<br /><br />&lt;body&gt;<br />&lt;% <br />String rand = (String)session.getAttribute("rand");<br />String input = request.getParameter("rand");<br />%&gt;<br />系统产生的认证码为： &lt;%= rand %&gt;&lt;br&gt;<br />您输入的认证码为： &lt;%= input %&gt;&lt;br&gt;<br />&lt;br&gt;<br />&lt;%<br />  if (rand.equals(input)) {<br />%&gt;<br />&lt;font color=green&gt;输入相同，认证成功！&lt;/font&gt;<br />&lt;%<br />  } else {<br />%&gt;<br />&lt;font color=red&gt;输入不同，认证失败！&lt;/font&gt;<br />&lt;%<br />  }<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></font>
				</div>
		</div>
<img src ="http://www.blogjava.net/luckyrobbie/aggbug/37552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luckyrobbie/" target="_blank">luckyrobbie</a> 2006-03-27 10:13 <a href="http://www.blogjava.net/luckyrobbie/archive/2006/03/27/37552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Databases and JDBC Drivers</title><link>http://www.blogjava.net/luckyrobbie/archive/2006/03/21/36575.html</link><dc:creator>luckyrobbie</dc:creator><author>luckyrobbie</author><pubDate>Tue, 21 Mar 2006 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/luckyrobbie/archive/2006/03/21/36575.html</guid><wfw:comment>http://www.blogjava.net/luckyrobbie/comments/36575.html</wfw:comment><comments>http://www.blogjava.net/luckyrobbie/archive/2006/03/21/36575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/luckyrobbie/comments/commentRss/36575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luckyrobbie/services/trackbacks/36575.html</trackback:ping><description><![CDATA[
		<h1 class="title">Databases and JDBC Drivers</h1>
		<p class="text">This page lists the most current information about databases and some of their JDBC drivers that can be used for import data or extract XML schema from database structure features. Information about what file(s) to load in the Preferences-&gt;Database-&gt;JDBC Drivers as well as information about driver classes and URL formats are also provided. An extensive list of JDBC drivers is also available at <a class="$class" onclick="window.open('http://industry.java.sun.com/products/jdbc/drivers','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">JDBC section</a> at Sun Microsystems. </p>
		<code class="textStrong">Oracle 10.2.0.1.0: Oracle JDBC Driver 10.1.0.2.0 </code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: ojdbc14.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: oracle.jdbc.OracleDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:oracle:thin:@&lt;host&gt;:&lt;port1521&gt;:&lt;sid&gt; </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />jdbc:oracle:oci:@&lt;host&gt;:&lt;port1521&gt;:&lt;sid&gt; </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />OBS: The same driver file used for both thin and OCI connections. </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://otn.oracle.com/software/tech/java/sqlj_jdbc/index.html','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">DB2 8.2: IBM DB2 JDBC Universal Driver 2.3.63 </code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: db2jcc.jar, db2jcc_license_cu.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.ibm.db2.jcc.DB2Driver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:db2://&lt;host&gt;:&lt;port50000&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.ibm.com/software/data/db2/udb/','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">SQL Server 2000 - 8.00.2039: SQL Server Driver 2.2.0040</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: mssqlserver.jar, msbase.jar, msutil.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:microsoft:sqlserver://&lt;host&gt;:&lt;port1433&gt;;DatabaseName=&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.microsoft.com/downloads/details.aspx?FamilyID=07287B11-0502-461A-B138-2AA54BFDC03A&amp;displaylang=en','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">Sybase ASE 12.5.3: jConnect 6.0 Build 25308</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: jconn3.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.sybase.jdbc3.jdbc.SybDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:sybase:Tds:&lt;host&gt;:&lt;port2048&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.sybase.com/products/informationmanagement/softwaredeveloperkit/jconnect','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">Informix 9.40: Informix 2.21.JC6</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: ifxjdbc.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.informix.jdbc.IfxDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:informix-sqli://&lt;host&gt;:&lt;port&gt;/&lt;database&gt;:informixserver=&lt;dbservername&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www14.software.ibm.com/webapp/download/search.jsp?go=y&amp;rs=ifxjdbc','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">MySQL 4.1.12: mysql-connector-java-3.1.8</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: mysql-connector-java-3.1.8-bin.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.mysql.jdbc.Driver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:mysql://&lt;host&gt;:&lt;port3306&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://dev.mysql.com/downloads/connector/j/','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">MySQL 5.0.2: mysql-connector-java-3.1.5-gamma</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: mysql-connector-java-3.1.5-gamma-bin.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.mysql.jdbc.Driver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:mysql://&lt;host&gt;:&lt;port3306&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://dev.mysql.com/downloads/connector/j/','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">PostgeSQL 7.4.8: PostgreSQL 7.4.4 JDBC2 with SSL </code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: pg74.215.jdbc2ee.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: org.postgresql.Driver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:postgresql://&lt;host&gt;:&lt;port5432&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://jdbc.postgresql.org/download.html','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">MaxDB 7.4.3: SAP DB JDBC Driver 7.4.4</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: sapdbc.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.sap.dbtech.jdbc.DriverSapDB </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:sapdb://&lt;host&gt;:&lt;port&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.mysql.com/products/maxdb/','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">FrontBase 3.6.21: FBJDriver 2.4.7 </code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: frontbasejdbc.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.frontbase.jdbc.FBJDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:FrontBase://&lt;host&gt;:&lt;port&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.frontbase.com/','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">Sybase ASA 9.0.2.2452: jConnect 6.0 Build 25308</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: jconn3.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.sybase.jdbc3.jdbc.SybDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:sybase:Tds:&lt;host&gt;:&lt;port2638&gt;/&lt;database&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.sybase.com/products/informationmanagement/softwaredeveloperkit/jconnect','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">JDataStore 6.7.25 Embedded: DataStore Driver 6.0</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: jdsserver.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.borland.datastore.jdbc.DataStoreDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:borland:dslocal:&lt;file&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.borland.com/products/downloads/download_jdatastore.html','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">JDataStore 6.7.25 Server: DataStore Driver 6.0 </code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: jdsremote.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.borland.datastore.jdbc.DataStoreDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:borland:dslocal:&lt;file&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.borland.com/products/downloads/download_jdatastore.html','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
		<p class="text"> </p>
		<code class="textStrong">Cache 5.0 Server: InterSystems Cache JDBC 5.0</code>
		<br />
		<img alt="" src="http://www.oxygenxml.com/img/tr_separator.jpg" />
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Files: CacheDB.jar </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />Driver Class: com.intersys.jdbc.CacheDriver </td>
						</tr>
				</tbody>
		</table>
		<p class="element" align="left">
		</p>
		<table class="tableFormat">
				<tbody>
						<tr>
								<td class="element">
										<img alt="" src="http://www.oxygenxml.com/img/gt.gif" />URL: jdbc:Cache://&lt;host&gt;:&lt;port&gt;/&lt;namespace&gt; </td>
						</tr>
				</tbody>
		</table>
		<a class="$class" onclick="window.open('http://www.intersystems.com/cache/downloads/index.html','NEW','toolbar,scrollbars=yes,resizable=yes'); return true" href="http://www.oxygenxml.com/database_drivers.html#">
				<img alt="" src="http://www.oxygenxml.com/img/download.gif" border="0" /> Download Driver </a>
<img src ="http://www.blogjava.net/luckyrobbie/aggbug/36575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luckyrobbie/" target="_blank">luckyrobbie</a> 2006-03-21 10:55 <a href="http://www.blogjava.net/luckyrobbie/archive/2006/03/21/36575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个取到ResultSet后返回Iterator的例子</title><link>http://www.blogjava.net/luckyrobbie/archive/2006/03/15/35446.html</link><dc:creator>luckyrobbie</dc:creator><author>luckyrobbie</author><pubDate>Wed, 15 Mar 2006 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/luckyrobbie/archive/2006/03/15/35446.html</guid><wfw:comment>http://www.blogjava.net/luckyrobbie/comments/35446.html</wfw:comment><comments>http://www.blogjava.net/luckyrobbie/archive/2006/03/15/35446.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/luckyrobbie/comments/commentRss/35446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/luckyrobbie/services/trackbacks/35446.html</trackback:ping><description><![CDATA[<FONT face=Arial size=2>在Jdon.com里面看到的，觉得很值得借鉴<BR>原文：<A href="http://www.jdon.com/jive/thread.jsp?forum=16&amp;thread=302">http://www.jdon.com/jive/thread.jsp?forum=16&amp;thread=302</A><BR><BR>看下面比较：</FONT><BR><FONT face=Arial size=2>
<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"><IMG id=Codehighlighter1_23_167_Open_Image onclick="this.style.display='none'; Codehighlighter1_23_167_Open_Text.style.display='none'; Codehighlighter1_23_167_Closed_Image.style.display='inline'; Codehighlighter1_23_167_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_23_167_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_23_167_Closed_Text.style.display='none'; Codehighlighter1_23_167_Open_Image.style.display='inline'; Codehighlighter1_23_167_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;List&nbsp;getUsers()&nbsp;</SPAN><SPAN id=Codehighlighter1_23_167_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_23_167_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;userDbQuery();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;List&nbsp;retval&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ArrayList();<BR><IMG id=Codehighlighter1_111_148_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_148_Open_Text.style.display='none'; Codehighlighter1_111_148_Closed_Image.style.display='inline'; Codehighlighter1_111_148_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_111_148_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_148_Closed_Text.style.display='none'; Codehighlighter1_111_148_Open_Image.style.display='inline'; Codehighlighter1_111_148_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">&nbsp;(rs.next())&nbsp;</SPAN><SPAN id=Codehighlighter1_111_148_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_111_148_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;retval.add(rs.getString(</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;retval;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>上面是个我们采取返回Collection后最常用的方法，将ResultSet中的用户名加入List再返回，显然这很耗费内存。<BR><BR>使用Iterator返回：<BR></FONT><FONT face=Arial size=2>
<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"><IMG id=Codehighlighter1_27_631_Open_Image onclick="this.style.display='none'; Codehighlighter1_27_631_Open_Text.style.display='none'; Codehighlighter1_27_631_Closed_Image.style.display='inline'; Codehighlighter1_27_631_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_27_631_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_631_Closed_Text.style.display='none'; Codehighlighter1_27_631_Open_Image.style.display='inline'; Codehighlighter1_27_631_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Iterator&nbsp;getUsers()&nbsp;</SPAN><SPAN id=Codehighlighter1_27_631_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_27_631_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;ResultSet&nbsp;rs&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;userDbQuery();<BR><IMG id=Codehighlighter1_93_629_Open_Image onclick="this.style.display='none'; Codehighlighter1_93_629_Open_Text.style.display='none'; Codehighlighter1_93_629_Closed_Image.style.display='inline'; Codehighlighter1_93_629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_93_629_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_93_629_Closed_Text.style.display='none'; Codehighlighter1_93_629_Open_Image.style.display='inline'; Codehighlighter1_93_629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Iterator()&nbsp;</SPAN><SPAN id=Codehighlighter1_93_629_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_93_629_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;Object&nbsp;next;<BR><IMG id=Codehighlighter1_150_320_Open_Image onclick="this.style.display='none'; Codehighlighter1_150_320_Open_Text.style.display='none'; Codehighlighter1_150_320_Closed_Image.style.display='inline'; Codehighlighter1_150_320_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_150_320_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_150_320_Closed_Text.style.display='none'; Codehighlighter1_150_320_Open_Image.style.display='inline'; Codehighlighter1_150_320_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;hasNext()&nbsp;</SPAN><SPAN id=Codehighlighter1_150_320_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_150_320_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_178_291_Open_Image onclick="this.style.display='none'; Codehighlighter1_178_291_Open_Text.style.display='none'; Codehighlighter1_178_291_Closed_Image.style.display='inline'; Codehighlighter1_178_291_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_178_291_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_178_291_Closed_Text.style.display='none'; Codehighlighter1_178_291_Open_Image.style.display='inline'; Codehighlighter1_178_291_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(next&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN id=Codehighlighter1_178_291_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_178_291_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_207_246_Open_Image onclick="this.style.display='none'; Codehighlighter1_207_246_Open_Text.style.display='none'; Codehighlighter1_207_246_Closed_Image.style.display='inline'; Codehighlighter1_207_246_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_207_246_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_207_246_Closed_Text.style.display='none'; Codehighlighter1_207_246_Open_Image.style.display='inline'; Codehighlighter1_207_246_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">&nbsp;rs.next())&nbsp;</SPAN><SPAN id=Codehighlighter1_207_246_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_207_246_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;rs.getString(</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_350_515_Open_Image onclick="this.style.display='none'; Codehighlighter1_350_515_Open_Text.style.display='none'; Codehighlighter1_350_515_Closed_Image.style.display='inline'; Codehighlighter1_350_515_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_350_515_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_350_515_Closed_Text.style.display='none'; Codehighlighter1_350_515_Open_Image.style.display='inline'; Codehighlighter1_350_515_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Object&nbsp;next()&nbsp;</SPAN><SPAN id=Codehighlighter1_350_515_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_350_515_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_377_433_Open_Image onclick="this.style.display='none'; Codehighlighter1_377_433_Open_Text.style.display='none'; Codehighlighter1_377_433_Closed_Image.style.display='inline'; Codehighlighter1_377_433_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_377_433_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_377_433_Closed_Text.style.display='none'; Codehighlighter1_377_433_Open_Image.style.display='inline'; Codehighlighter1_377_433_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">&nbsp;hasNext())&nbsp;</SPAN><SPAN id=Codehighlighter1_377_433_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_377_433_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;NoSuchElementException();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;retval&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;next;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;retval;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_545_624_Open_Image onclick="this.style.display='none'; Codehighlighter1_545_624_Open_Text.style.display='none'; Codehighlighter1_545_624_Closed_Image.style.display='inline'; Codehighlighter1_545_624_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_545_624_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_545_624_Closed_Text.style.display='none'; Codehighlighter1_545_624_Open_Image.style.display='inline'; Codehighlighter1_545_624_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;remove()&nbsp;</SPAN><SPAN id=Codehighlighter1_545_624_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_545_624_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;UnsupportedOperationException&nbsp;(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">no&nbsp;remove&nbsp;allowed</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>这个Javabean只是做了一个指针传递作用，将调用本Javabean的指针传递到ResultSet,这样既提高了效率，节约了内存，又降低了偶合性，这是堪称中间件典型的示范。</FONT><BR><BR><img src ="http://www.blogjava.net/luckyrobbie/aggbug/35446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/luckyrobbie/" target="_blank">luckyrobbie</a> 2006-03-15 16:56 <a href="http://www.blogjava.net/luckyrobbie/archive/2006/03/15/35446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>