﻿<?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-dingfirst</title><link>http://www.blogjava.net/dingfirst/</link><description>Ｏｎ　ｔｈｅ　Ｒｏａｄ</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:56:02 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:56:02 GMT</pubDate><ttl>60</ttl><item><title>励精图治</title><link>http://www.blogjava.net/dingfirst/archive/2007/09/11/144286.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Tue, 11 Sep 2007 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2007/09/11/144286.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/144286.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2007/09/11/144286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/144286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/144286.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS"><span style="font-size: 36pt"><strong><span style="font-family: Comic Sans MS">励精图治</span> </strong></span></span>
<img src ="http://www.blogjava.net/dingfirst/aggbug/144286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2007-09-11 16:29 <a href="http://www.blogjava.net/dingfirst/archive/2007/09/11/144286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无题</title><link>http://www.blogjava.net/dingfirst/archive/2007/04/25/113575.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Wed, 25 Apr 2007 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2007/04/25/113575.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/113575.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2007/04/25/113575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/113575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/113575.html</trackback:ping><description><![CDATA[<p>现在在干啥啊！<br>没有方向，没有动力。<br>十年之后会是什么样子呢？<br>nnd<br>郁闷！<br>极其郁闷！！！<br><br>改变，<br>要改变啊！！</p>
<img src ="http://www.blogjava.net/dingfirst/aggbug/113575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2007-04-25 17:13 <a href="http://www.blogjava.net/dingfirst/archive/2007/04/25/113575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web文件下载时文件名过长导致截断的问题</title><link>http://www.blogjava.net/dingfirst/archive/2006/11/27/83859.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Mon, 27 Nov 2006 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2006/11/27/83859.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/83859.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2006/11/27/83859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/83859.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/83859.html</trackback:ping><description><![CDATA[问题：<br />      直接用URLEncoder.encode(fileName,"UTF-8")，得到的文件名长度会被截断。<br /><br />解决方法是：<br />      文件名先用“GB2312”编码，然后用“<span style="COLOR: #000000">ISO8859_1</span>”解码。当然也可以在将文件名保存到数据库之前用“GB2312”编码。<br /><br />代码如下：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> DBUtil.getConnection();<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            ps </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> conn.prepareStatement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SELECT FILE_NAME, CONTENT_TYPE, CONTENT FROM PUB_JOB_ATTACHMENTS WHERE ATTACHID = ?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            ps.setString(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,getAttachId());<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            rs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ps.executeQuery();<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(rs.next())<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img id="Codehighlighter1_275_1150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_275_1150_Open_Text.style.display='none'; Codehighlighter1_275_1150_Closed_Image.style.display='inline'; Codehighlighter1_275_1150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_275_1150_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_275_1150_Closed_Text.style.display='none'; Codehighlighter1_275_1150_Open_Image.style.display='inline'; Codehighlighter1_275_1150_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />            </span><span id="Codehighlighter1_275_1150_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_275_1150_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">java.net.URLEncoder.encode(rs.getString("FILE_NAME"), "UTF-8")</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">                response.setContentType(rs.getString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CONTENT_TYPE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                String fileName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rs.getString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">FILE_NAME</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                fileName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">URLEncoder.encode(fileName,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GB2312</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                fileName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">URLDecoder.decode(fileName, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ISO8859_1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                response.addHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Disposition</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">attachment; filename=\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000"> + fileName + </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                Blob content </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rs.getBlob(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CONTENT</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                InputStream ins </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> content.getBinaryStream();<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000"> buffer[] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">];<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> length </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                outs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> response.getOutputStream();<br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">((length </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ins.read(buffer)) </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    outs.write(buffer, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, length);<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                ins.close();<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                outs.flush();<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />            }</span></span></div><br /><img src ="http://www.blogjava.net/dingfirst/aggbug/83859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2006-11-27 18:59 <a href="http://www.blogjava.net/dingfirst/archive/2006/11/27/83859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>也看Dynamic Proxy</title><link>http://www.blogjava.net/dingfirst/archive/2006/07/26/60215.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Wed, 26 Jul 2006 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2006/07/26/60215.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/60215.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2006/07/26/60215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/60215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/60215.html</trackback:ping><description><![CDATA[
		<p>先看一下Proxy的两种用法：</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 id="Codehighlighter1_21_45_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_45_Open_Text.style.display='none'; Codehighlighter1_21_45_Closed_Image.style.display='inline'; Codehighlighter1_21_45_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_21_45_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_45_Closed_Text.style.display='none'; Codehighlighter1_21_45_Open_Image.style.display='inline'; Codehighlighter1_21_45_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"> </span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> Foo </span>
				<span id="Codehighlighter1_21_45_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_21_45_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> doSomthing();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>   一个基本的实现：<br /><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_36_181_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_181_Open_Text.style.display='none'; Codehighlighter1_36_181_Closed_Image.style.display='inline'; Codehighlighter1_36_181_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_36_181_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_181_Closed_Text.style.display='none'; Codehighlighter1_36_181_Open_Image.style.display='inline'; Codehighlighter1_36_181_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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> FooImpl </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Foo </span><span id="Codehighlighter1_36_181_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_36_181_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_59_65_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_65_Open_Text.style.display='none'; Codehighlighter1_59_65_Closed_Image.style.display='inline'; Codehighlighter1_59_65_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_59_65_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_59_65_Closed_Text.style.display='none'; Codehighlighter1_59_65_Open_Image.style.display='inline'; Codehighlighter1_59_65_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"> FooImpl() </span><span id="Codehighlighter1_59_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_59_65_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_96_174_Open_Image" onclick="this.style.display='none'; Codehighlighter1_96_174_Open_Text.style.display='none'; Codehighlighter1_96_174_Closed_Image.style.display='inline'; Codehighlighter1_96_174_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_96_174_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_174_Closed_Text.style.display='none'; Codehighlighter1_96_174_Open_Image.style.display='inline'; Codehighlighter1_96_174_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">int</span><span style="COLOR: #000000"> doSomthing() </span><span id="Codehighlighter1_96_174_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_96_174_Open_Text"><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">FooImpl doSomthing<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/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</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/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>   调用处理类，这也是aop的一种实现方式，呵呵。<br /><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_61_386_Open_Image" onclick="this.style.display='none'; Codehighlighter1_61_386_Open_Text.style.display='none'; Codehighlighter1_61_386_Closed_Image.style.display='inline'; Codehighlighter1_61_386_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_61_386_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_61_386_Closed_Text.style.display='none'; Codehighlighter1_61_386_Open_Image.style.display='inline'; Codehighlighter1_61_386_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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MyInvocationHandler </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> InvocationHandler</span><span id="Codehighlighter1_61_386_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_61_386_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Object proxyObject;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_144_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_144_189_Open_Text.style.display='none'; Codehighlighter1_144_189_Closed_Image.style.display='inline'; Codehighlighter1_144_189_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_144_189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_144_189_Closed_Text.style.display='none'; Codehighlighter1_144_189_Open_Image.style.display='inline'; Codehighlighter1_144_189_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"> MyInvocationHandler(Object _proxyObject) </span><span id="Codehighlighter1_144_189_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_144_189_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">.proxyObject</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">_proxyObject;<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_278_384_Open_Image" onclick="this.style.display='none'; Codehighlighter1_278_384_Open_Text.style.display='none'; Codehighlighter1_278_384_Closed_Image.style.display='inline'; Codehighlighter1_278_384_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_278_384_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_278_384_Closed_Text.style.display='none'; Codehighlighter1_278_384_Open_Image.style.display='inline'; Codehighlighter1_278_384_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"> Object invoke(Object proxy, Method method, Object[] args) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Throwable </span><span id="Codehighlighter1_278_384_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_278_384_Open_Text"><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">in proxy instance<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/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> method.invoke(proxyObject,args);<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>   两种实现方式：<br /><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_22_1423_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_1423_Open_Text.style.display='none'; Codehighlighter1_22_1423_Closed_Image.style.display='inline'; Codehighlighter1_22_1423_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_1423_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_22_1423_Closed_Text.style.display='none'; Codehighlighter1_22_1423_Open_Image.style.display='inline'; Codehighlighter1_22_1423_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"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ProxyUse </span><span id="Codehighlighter1_22_1423_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_22_1423_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_46_52_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_52_Open_Text.style.display='none'; Codehighlighter1_46_52_Closed_Image.style.display='inline'; Codehighlighter1_46_52_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_46_52_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_52_Closed_Text.style.display='none'; Codehighlighter1_46_52_Open_Image.style.display='inline'; Codehighlighter1_46_52_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"> ProxyUse() </span><span id="Codehighlighter1_46_52_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_46_52_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 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"> useProxy1() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> SecurityException, NoSuchMethodException, InvocationTargetException,<br /><img id="Codehighlighter1_244_673_Open_Image" onclick="this.style.display='none'; Codehighlighter1_244_673_Open_Text.style.display='none'; Codehighlighter1_244_673_Closed_Image.style.display='inline'; Codehighlighter1_244_673_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_244_673_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_244_673_Closed_Text.style.display='none'; Codehighlighter1_244_673_Open_Image.style.display='inline'; Codehighlighter1_244_673_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            IllegalArgumentException, IllegalAccessException, InstantiationException </span><span id="Codehighlighter1_244_673_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_244_673_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        FooImpl obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FooImpl();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        InvocationHandler handler </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> MyInvocationHandler(obj);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Class proxyClass </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Proxy.getProxyClass(<br /><img id="Codehighlighter1_453_463_Open_Image" onclick="this.style.display='none'; Codehighlighter1_453_463_Open_Text.style.display='none'; Codehighlighter1_453_463_Closed_Image.style.display='inline'; Codehighlighter1_453_463_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_453_463_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_453_463_Closed_Text.style.display='none'; Codehighlighter1_453_463_Open_Image.style.display='inline'; Codehighlighter1_453_463_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                Foo.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getClassLoader(), </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Class[] </span><span id="Codehighlighter1_453_463_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_453_463_Open_Text"><span style="COLOR: #000000">{Foo.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Foo f </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Foo) proxyClass.<br /><img id="Codehighlighter1_544_568_Open_Image" onclick="this.style.display='none'; Codehighlighter1_544_568_Open_Text.style.display='none'; Codehighlighter1_544_568_Closed_Image.style.display='inline'; Codehighlighter1_544_568_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_544_568_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_544_568_Closed_Text.style.display='none'; Codehighlighter1_544_568_Open_Image.style.display='inline'; Codehighlighter1_544_568_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                getConstructor(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Class[] </span><span id="Codehighlighter1_544_568_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_544_568_Open_Text"><span style="COLOR: #000000">{InvocationHandler.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">).<br /><img id="Codehighlighter1_613_621_Open_Image" onclick="this.style.display='none'; Codehighlighter1_613_621_Open_Text.style.display='none'; Codehighlighter1_613_621_Closed_Image.style.display='inline'; Codehighlighter1_613_621_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_613_621_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_613_621_Closed_Text.style.display='none'; Codehighlighter1_613_621_Open_Image.style.display='inline'; Codehighlighter1_613_621_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                newInstance(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Object[] </span><span id="Codehighlighter1_613_621_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_613_621_Open_Text"><span style="COLOR: #000000">{handler}</span></span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(f.doSomthing());<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 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"> useProxy2() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> SecurityException, NoSuchMethodException, InvocationTargetException,<br /><img id="Codehighlighter1_869_1182_Open_Image" onclick="this.style.display='none'; Codehighlighter1_869_1182_Open_Text.style.display='none'; Codehighlighter1_869_1182_Closed_Image.style.display='inline'; Codehighlighter1_869_1182_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_869_1182_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_869_1182_Closed_Text.style.display='none'; Codehighlighter1_869_1182_Open_Image.style.display='inline'; Codehighlighter1_869_1182_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            IllegalArgumentException, IllegalAccessException, InstantiationException </span><span id="Codehighlighter1_869_1182_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_869_1182_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        FooImpl obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FooImpl();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        InvocationHandler handler </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> MyInvocationHandler(obj);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Foo f </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Foo) Proxy.newProxyInstance(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            Foo.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getClassLoader(),<br /><img id="Codehighlighter1_1084_1096_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1084_1096_Open_Text.style.display='none'; Codehighlighter1_1084_1096_Closed_Image.style.display='inline'; Codehighlighter1_1084_1096_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1084_1096_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1084_1096_Closed_Text.style.display='none'; Codehighlighter1_1084_1096_Open_Image.style.display='inline'; Codehighlighter1_1084_1096_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Class[] </span><span id="Codehighlighter1_1084_1096_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_1084_1096_Open_Text"><span style="COLOR: #000000">{ Foo.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> }</span></span><span style="COLOR: #000000">,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            handler<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(f.doSomthing());<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_1232_1420_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1232_1420_Open_Text.style.display='none'; Codehighlighter1_1232_1420_Closed_Image.style.display='inline'; Codehighlighter1_1232_1420_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1232_1420_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1232_1420_Closed_Text.style.display='none'; Codehighlighter1_1232_1420_Open_Image.style.display='inline'; Codehighlighter1_1232_1420_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_1232_1420_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_1232_1420_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ProxyUse use</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ProxyUse();<br /><img id="Codehighlighter1_1282_1350_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1282_1350_Open_Text.style.display='none'; Codehighlighter1_1282_1350_Closed_Image.style.display='inline'; Codehighlighter1_1282_1350_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1282_1350_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1282_1350_Closed_Text.style.display='none'; Codehighlighter1_1282_1350_Open_Image.style.display='inline'; Codehighlighter1_1282_1350_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span id="Codehighlighter1_1282_1350_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_1282_1350_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            use.useProxy1();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            use.useProxy2();<br /><img id="Codehighlighter1_1370_1414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1370_1414_Open_Text.style.display='none'; Codehighlighter1_1370_1414_Closed_Image.style.display='inline'; Codehighlighter1_1370_1414_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1370_1414_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1370_1414_Closed_Text.style.display='none'; Codehighlighter1_1370_1414_Open_Image.style.display='inline'; Codehighlighter1_1370_1414_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception ex)</span><span id="Codehighlighter1_1370_1414_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_1370_1414_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ex.printStackTrace();<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/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 src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />看一下java api doc<br /><br /><table cellspacing="0" cellpadding="3" width="100%" summary="" border="1"><tbody><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code>static <a title="java.lang.reflect 中的接口" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/reflect/InvocationHandler.html">InvocationHandler</a></code></font></td><td><code><b><a href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/reflect/Proxy.html#getInvocationHandler(java.lang.Object)">getInvocationHandler</a></b>(<a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/Object.html">Object</a> proxy)</code><br />          返回指定代理实例的调用处理程序。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code>static <a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/Class.html">Class</a>&lt;?&gt;</code></font></td><td><code><b><a href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/reflect/Proxy.html#getProxyClass(java.lang.ClassLoader, java.lang.Class...)">getProxyClass</a></b>(<a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/ClassLoader.html">ClassLoader</a> loader, <a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/Class.html">Class</a>&lt;?&gt;... interfaces)</code><br />          返回代理类的 <code>java.lang.Class</code> 对象，并向其提供类加载器和接口数组。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code>static boolean</code></font></td><td><code><b><a href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/reflect/Proxy.html#isProxyClass(java.lang.Class)">isProxyClass</a></b>(<a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/Class.html">Class</a>&lt;?&gt; cl)</code><br />          当且仅当指定的类通过 <code>getProxyClass</code> 方法或 <code>newProxyInstance</code> 方法动态生成为代理类时，返回 true。</td></tr><tr class="TableRowColor" bgcolor="white"><td valign="top" align="right" width="1%"><font size="-1"><code>static <a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/Object.html">Object</a></code></font></td><td><code><b><a href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/reflect/Proxy.html#newProxyInstance(java.lang.ClassLoader, java.lang.Class[], java.lang.reflect.InvocationHandler)">newProxyInstance</a></b>(<a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/ClassLoader.html">ClassLoader</a> loader, <a title="java.lang 中的类" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/Class.html">Class</a>&lt;?&gt;[] interfaces, <a title="java.lang.reflect 中的接口" href="file:///D:/doc_j2se_cn/html/zh_CN/api/java/lang/reflect/InvocationHandler.html">InvocationHandler</a> h)</code><br />          返回一个指定接口的代理类实例，该接口可以将方法调用指派到指定的调用处理程序。</td></tr></tbody></table><p>没时间了，先这样吧。<br /></p><p><br /> </p><img src ="http://www.blogjava.net/dingfirst/aggbug/60215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2006-07-26 17:48 <a href="http://www.blogjava.net/dingfirst/archive/2006/07/26/60215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Peter Haggar对Singleton 的分析</title><link>http://www.blogjava.net/dingfirst/archive/2006/07/18/58834.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Tue, 18 Jul 2006 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2006/07/18/58834.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/58834.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2006/07/18/58834.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/58834.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/58834.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文名称：Double-checked locking and the Singleton pattern						                           A comprehensive look at this broken programming idiom								1，请首先看一下下面的这个类，只有第一个getInstance（）方法是正确的。其中get...&nbsp;&nbsp;<a href='http://www.blogjava.net/dingfirst/archive/2006/07/18/58834.html'>阅读全文</a><img src ="http://www.blogjava.net/dingfirst/aggbug/58834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2006-07-18 19:17 <a href="http://www.blogjava.net/dingfirst/archive/2006/07/18/58834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程设计要点（转载)</title><link>http://www.blogjava.net/dingfirst/archive/2006/07/14/58160.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Fri, 14 Jul 2006 05:06:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2006/07/14/58160.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/58160.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2006/07/14/58160.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/58160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/58160.html</trackback:ping><description><![CDATA[
		<p>
				<font size="4">
						<b>1</b>
				</font>
				<b>.</b>多线程中有主内存和工作内存之分， 在JVM中，有一个主内存，专门负责所有线程共享数据；而每个线程都有他自己私有的工作内存， 主内存和工作内存分贝在JVM的stack区和heap区。</p>
		<p>
				<b>
						<font size="4">2.</font>
				</b>线程的状态有'Ready', 'Running', 'Sleeping', 'Blocked', 和 'Waiting'几个状态，<br />'Ready' 表示线程正在等待CPU分配允许运行的时间。</p>
		<p>
		</p>
		<p>
				<font size="4">
						<b>3.</b>
				</font>线程运行次序并不是按照我们创建他们时的顺序来运行的，CPU处理线程的顺序是不确定的，如果需要确定，那么必须手工介入，使用setPriority()方法设置优先级。</p>
		<p>
				<b>
						<font size="4">4.</font>
				</b>我们无从知道一个线程什么时候运行，两个或多个线程在访问同一个资源时，需要synchronized</p>
		<p>
				<b>
						<font size="4">5.</font>
				</b>每个线程会注册自己，实际某处存在着对它的引用，因此，垃圾回收机制对它就“束手无策”了。</p>
		<p>
				<b>
						<font size="4">6.</font>
				</b>Daemon线程区别一般线程之处是：主程序一旦结束，Daemon线程就会结束。</p>
		<p>
				<b>
						<font size="4">7.</font>
				</b>一个对象中的所有synchronized方法都共享一把锁，这把锁能够防止多个方法对通用内存同时进行的写操作。synchronized static方法可在一个类范围内被相互间锁定起来。</p>
		<p>
				<b>
						<font size="4">8.</font>
				</b>对于访问某个关键共享资源的所有方法，都必须把它们设为synchronized，否则就不能正常工作。</p>
		<p>
				<font size="4">
						<b>9.</b>
				</font>假设已知一个方法不会造成冲突，最明智的方法是不要使用synchronized，能提高些性能。</p>
		<p>
				<b>
						<font size="4">10</font>
				</b>. 如果一个"同步"方法修改了一个变量，而我们的方法要用到这个变量(可能是只读),最好将自己的这个方法也设为 synchronized。</p>
		<p>
				<b>
						<font size="4">11.</font>
				</b>synchronized不能继承，　父类的方法是synchronized，那么其子类重载方法中就不会继承“同步”。</p>
		<p>
				<b>
						<font size="4">12.</font>
				</b>线程堵塞Blocked有几个原因造成：</p>
		<p>(1)线程在等候一些IO操作 <br />(2)线程试图调用另外一个对象的“同步”方法，但那个对象处于锁定状态，暂时无法使用。</p>
		<p>
				<b>
						<font size="4">13.</font>
				</b>原子型操作(atomic), 对原始型变量(primitive)的操作是原子型的atomic. 意味着这些操作是线程安全的， 但是大部分情况下，我们并不能正确使用，来看看 i = i + 1 , i是int型，属于原始型变量：<br /><br />(1)从主内存中读取i值到本地内存. <br />(2)将值从本地内存装载到线程工作拷贝中. <br />(3)装载变量1. <br />(4)将i 加 1. <br />(5)将结果给变量i. <br />(6)将i保存到线程本地工作拷贝中. <br />(7)写回主内存. </p>
		<p>注意原子型操作只限于第1步到第2步的读取以及第6到第7步的写, i的值还是可能被同时执行i=i+1的多线程中断打扰(在第4步)。</p>
		<p>double 和long 变量是非原子型的(non-atomic)。数组是object 非原子型。<br /></p>
		<p>
		</p>
		<p>
				<font size="4">
						<b>14.</b>
				</font>由于13条的原因，我们解决办法是：</p>
		<p>class xxx extends Thread{</p>
		<p>//i会被经常修改<br />private int i;<br /><br />public synchronized int read(){ return i;}</p>
		<p>public synchronized void update(){ i = i + 1;}</p>
		<p>..........</p>
		<p>}</p>
		<p>
				<b>
						<font size="4">15.</font>
				</b>Volatile变量， volatile变量表示保证它必须是与主内存保持一致，它实际是"变量的同步", 也就是说对于volatile变量的操作是原子型的，如用在long 或 double变量前。<br /></p>
		<p>
				<b>
						<font size="4">16.</font>
				</b>使用yield()会自动放弃CPU，有时比sleep更能提升性能。</p>
		<p>
				<b>
						<font size="4">17.</font>
				</b>sleep()和wait()的区别是：wait()方法被调用时会解除锁定，但是我们能使用它的地方只是在一个同步的方法或代码块内。</p>
		<p>
				<b>
						<font size="4">18.</font>
				</b>通过制造缩小同步范围，尽可能的实现代码块同步，wait(毫秒数)可在指定的毫秒数可退出wait；对于wait()需要被notisfy()或notifyAll()踢醒。</p>
		<p>
				<b>
						<font size="4">19.</font>
				</b>构造两个线程之间实时通信的方法分几步：<br />(1). 创建一个PipedWriter和一个PipedReader和它们之间的管道;<br />PipedReader in = new PipedReader(new PipedWriter())<br />(2). 在需要发送信息的线程开始之前，将外部的PipedWriter导向给其内部的Writer实例out<br />(3). 在需要接受信息的线程开始之前，将外部的PipedReader导向给其内部的Reader实例in<br />(4). 这样放入out的所有东西度可从in中提取出来。</p>
		<p>
				<b>
						<font size="4">20.</font>
				</b>synchronized带来的问题除性能有所下降外，最大的缺点是会带来死锁DeadLock，只有通过谨慎设计来防止死锁，其他毫无办法，这也是线程难以驯服的一个原因。不要再使用stop() suspend() resume()和destory()方法</p>
		<p>
				<b>
						<font size="4">21.</font>
				</b>在大量线程被堵塞时，最高优先级的线程先运行。但是不表示低级别线程不会运行，运行概率小而已。</p>
		<p>
				<b>
						<font size="4">22.</font>
				</b>线程组的主要优点是：使用单个命令可完成对整个线程组的操作。很少需要用到线程组。</p>
		<p>
				<b>
						<font size="4">23.</font>
				</b>从以下几个方面提升多线程的性能：</p>
		<p>检查所有可能Block的地方，尽可能的多的使用sleep或yield()以及wait();</p>
		<p>尽可能延长sleep(毫秒数)的时间;</p>
		<p>运行的线程不用超过100个，不能太多；</p>
		<p>不同平台linux或windows以及不同JVM运行性能差别很大。</p>
		<p>
				<font size="4">
						<strong>24</strong>.</font> 推荐几篇相关英文文章:</p>
		<p>
				<a href="http://www.fawcette.com/javapro/2003_03/magazine/features/odoerderlein/default_pf.asp" target="_blank">Use Threading Tricks to Improve Programs</a>
				<br />
				<br />
				<br />
				<br />原文：多线程设计要点  板桥里人 <a href="http://www.jdon.com/concurrent/thread.htm">http://www.jdon.com/concurrent/thread.htm</a></p>
<img src ="http://www.blogjava.net/dingfirst/aggbug/58160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2006-07-14 13:06 <a href="http://www.blogjava.net/dingfirst/archive/2006/07/14/58160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XA和两阶段提交</title><link>http://www.blogjava.net/dingfirst/archive/2006/07/11/57703.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Tue, 11 Jul 2006 11:44:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2006/07/11/57703.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/57703.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2006/07/11/57703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/57703.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/57703.html</trackback:ping><description><![CDATA[　   分布式事务处理是指一个事务可能涉及多个数据库操作，分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作，提交或回滚事务的决定必须产生统一的结果（全部提交或全部回滚）。 <br />　   <br />      X/Open组织（即现在的Open Group）定义了分布式事务处理模型。X/Open DTP模型（1994）包括应用程序（AP）、事务管理器（TM）、资源管理器（RM）、通信资源管理器（CRM）四部分。一般，常见的事务管理器（TM）是交易中间件，常见的资源管理器（RM）是数据库，常见的通信资源管理器（CRM）是消息中间件。为表述方便起见，在本文中直接以其常见表现形式进行描述。<br /><br /><p align="left"><img src="C:\Documents and Settings\dingfirst\桌面\tu32.gif" /><br />      一般情况下，某一数据库无法知道其它数据库在做什么，因此，在一个DTP环境中，交易中间件是必需的，由它通知和协调相关数据库的提交或回滚。而一个数据库只将其自己所做的操作（可恢复）影射到全局事务中。 <br />      <br />      XA就是X/Open DTP定义的交易中间件与数据库之间的接口规范（即接口函数），交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA接口函数由数据库厂商提供。 <br /><br /></p><p align="left">      通常情况下，交易中间件与数据库通过XA 接口规范，使用两阶段提交来完成一个全局事务，XA规范的基础是两阶段提交协议。 <br /><br />      在第一阶段，交易中间件请求所有相关数据库准备提交（预提交）各自的事务分支，以确认是否所有相关数据库都可以提交各自的事务分支。当某一数据库收到预提交后，如果可以提交属于自己的事务分支，则将自己在该事务分支中所做的操作固定记录下来，并给交易中间件一个同意提交的应答，此时数据库将不能再在该事务分支中加入任何操作，但此时数据库并没有真正提交该事务，数据库对共享资源的操作还未释放（处于上锁状态）。如果由于某种原因数据库无法提交属于自己的事务分支，它将回滚自己的所有操作，释放对共享资源上的锁，并返回给交易中间件失败应答。 <br /><br />　　在第二阶段，交易中间件审查所有数据库返回的预提交结果，如所有数据库都可以提交，交易中间件将要求所有数据库做正式提交，这样该全局事务被提交。而如果有任一数据库预提交返回失败，交易中间件将要求所有其它数据库回滚其操作，这样该全局事务被回滚。<br /> <br /><br />      摘自<a href="http://www.huihoo.com/middleware/trade_middleware.html">http://www.huihoo.com/middleware/trade_middleware.html</a>    交易中间件与XA规范</p><p align="left"> </p><img src ="http://www.blogjava.net/dingfirst/aggbug/57703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2006-07-11 19:44 <a href="http://www.blogjava.net/dingfirst/archive/2006/07/11/57703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中文排序</title><link>http://www.blogjava.net/dingfirst/archive/2006/07/11/57654.html</link><dc:creator>dingfirst</dc:creator><author>dingfirst</author><pubDate>Tue, 11 Jul 2006 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/dingfirst/archive/2006/07/11/57654.html</guid><wfw:comment>http://www.blogjava.net/dingfirst/comments/57654.html</wfw:comment><comments>http://www.blogjava.net/dingfirst/archive/2006/07/11/57654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dingfirst/comments/commentRss/57654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dingfirst/services/trackbacks/57654.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    <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">int</span><span style="COLOR: #000000"> compare(String str1, String str2)<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img id="Codehighlighter1_57_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_492_Open_Text.style.display='none'; Codehighlighter1_57_492_Closed_Image.style.display='inline'; Codehighlighter1_57_492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_57_492_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_57_492_Closed_Text.style.display='none'; Codehighlighter1_57_492_Open_Image.style.display='inline'; Codehighlighter1_57_492_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />     </span><span id="Codehighlighter1_57_492_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_57_492_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         String m_s1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         String m_s2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img id="Codehighlighter1_164_321_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_321_Open_Text.style.display='none'; Codehighlighter1_164_321_Closed_Image.style.display='inline'; Codehighlighter1_164_321_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_164_321_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_321_Closed_Text.style.display='none'; Codehighlighter1_164_321_Open_Image.style.display='inline'; Codehighlighter1_164_321_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />         </span><span id="Codehighlighter1_164_321_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_164_321_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             m_s1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(str1.getBytes(_FromEncode_), _ToEncode_);<br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             m_s2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(str2.getBytes(_FromEncode_), _ToEncode_);<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />         }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception e)<br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id="Codehighlighter1_360_413_Open_Image" onclick="this.style.display='none'; Codehighlighter1_360_413_Open_Text.style.display='none'; Codehighlighter1_360_413_Closed_Image.style.display='inline'; Codehighlighter1_360_413_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_360_413_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_360_413_Closed_Text.style.display='none'; Codehighlighter1_360_413_Open_Image.style.display='inline'; Codehighlighter1_360_413_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />         </span><span id="Codehighlighter1_360_413_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_360_413_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> str1.compareTo(str2);<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />         }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> chineseCompareTo(m_s1, m_s2);<br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> result;<br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />     }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.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">int</span><span style="COLOR: #000000"> getCharCode(String s)<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id="Codehighlighter1_545_791_Open_Image" onclick="this.style.display='none'; Codehighlighter1_545_791_Open_Text.style.display='none'; Codehighlighter1_545_791_Closed_Image.style.display='inline'; Codehighlighter1_545_791_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_545_791_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_545_791_Closed_Text.style.display='none'; Codehighlighter1_545_791_Open_Image.style.display='inline'; Codehighlighter1_545_791_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />     </span><span id="Codehighlighter1_545_791_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_791_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> s.equals(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">))<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000"> b[] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> s.getBytes();<br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> b.length </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> value </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">100</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> b[i];<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> value;<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />     }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.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">int</span><span style="COLOR: #000000"> chineseCompareTo(String s1, String s2)<br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img id="Codehighlighter1_861_1349_Open_Image" onclick="this.style.display='none'; Codehighlighter1_861_1349_Open_Text.style.display='none'; Codehighlighter1_861_1349_Closed_Image.style.display='inline'; Codehighlighter1_861_1349_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_861_1349_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_861_1349_Closed_Text.style.display='none'; Codehighlighter1_861_1349_Open_Image.style.display='inline'; Codehighlighter1_861_1349_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />     </span><span id="Codehighlighter1_861_1349_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_1349_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> s1.length();<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> len2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> s2.length();<br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> n </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Math.min(len1, len2);<br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> n; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img id="Codehighlighter1_1013_1312_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1013_1312_Open_Text.style.display='none'; Codehighlighter1_1013_1312_Closed_Image.style.display='inline'; Codehighlighter1_1013_1312_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1013_1312_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1013_1312_Closed_Text.style.display='none'; Codehighlighter1_1013_1312_Open_Image.style.display='inline'; Codehighlighter1_1013_1312_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />         </span><span id="Codehighlighter1_1013_1312_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_1013_1312_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> s1_code </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> getCharCode(s1.charAt(i) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> s2_code </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> getCharCode(s2.charAt(i) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s1_code </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> s2_code </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Math.min(s1_code, s2_code);<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s1_code </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> s2_code)<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> s1_code </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> s2_code;<br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />         }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> len1 </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> len2;<br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />     }</span></span></div>
		<br />算是比较准的了，但还是有错误，而且性能比较差。<br /><br />算法最初是谁写的也忘了。呵呵，拿来用一下.<br /><img src ="http://www.blogjava.net/dingfirst/aggbug/57654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dingfirst/" target="_blank">dingfirst</a> 2006-07-11 15:18 <a href="http://www.blogjava.net/dingfirst/archive/2006/07/11/57654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>