??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美久久视频,久久精品无码一区二区三区,日韩一区二区三区在线视频http://www.aygfsteel.com/henry1451/articles/202538.htmlhenry1451henry1451Sat, 24 May 2008 01:48:00 GMThttp://www.aygfsteel.com/henry1451/articles/202538.htmlhttp://www.aygfsteel.com/henry1451/comments/202538.htmlhttp://www.aygfsteel.com/henry1451/articles/202538.html#Feedback0http://www.aygfsteel.com/henry1451/comments/commentRss/202538.htmlhttp://www.aygfsteel.com/henry1451/services/trackbacks/202538.html阅读全文

henry1451 2008-05-24 09:48 发表评论
]]>
replace和replaceAllҎ(gu)的区?/title><link>http://www.aygfsteel.com/henry1451/articles/202367.html</link><dc:creator>henry1451</dc:creator><author>henry1451</author><pubDate>Fri, 23 May 2008 04:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/henry1451/articles/202367.html</guid><wfw:comment>http://www.aygfsteel.com/henry1451/comments/202367.html</wfw:comment><comments>http://www.aygfsteel.com/henry1451/articles/202367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/henry1451/comments/commentRss/202367.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/henry1451/services/trackbacks/202367.html</trackback:ping><description><![CDATA[<p><span id="wmqeeuq" class="titlefont">replace和replaceAll是JAVA中常用的替换字符的方?它们的区别是:<br /> 1)replace的参数是char和CharSequence,卛_以支持字W的替换,也支持字W串的替?CharSequence卛_W串序列的意?说白了也是字符?;<br /> 2)replaceAll的参数是regex,卛_于规则表辑ּ的替?比如,可以通过replaceAll("\\d", "*")把一个字W串所有的数字字符都换成星?<br /> 相同Ҏ(gu)都是全部替换,x源字W串中的某一字符或字W串全部换成指定的字W或字符?如果只想替换W一ơ出现的,可以使用<br /> <font style="background-color: #c4ecc9">replaceFirst()</font>,q个Ҏ(gu)也是Z规则表达式的替换,但与replaceAll()不同的时,只替换第一ơ出现的字符?<br /> 另外,如果replaceAll()?font style="background-color: #c4ecc9">replaceFirst</font>()所用的参数据不是基于规则表辑ּ?则与<span id="wmqeeuq" class="titlefont">replace</span>()替换字符串的效果是一L(fng),卌两者也支持字符串的操作;<br /> q有一Ҏ(gu)?执行了替换操作后,源字W串的内Ҏ(gu)没有发生改变?<br /> <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.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">        String src </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> String(</span><span style="color: #000000">"</span><span style="color: #000000">ab43a2c43d</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        System.out.println(src.replace(</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">f</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #000000">=></span><span style="color: #000000">ab4f2c4fd.<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        System.out.println(src.replace(</span><span style="color: #000000">'</span><span style="color: #000000">3</span><span style="color: #000000">'</span><span style="color: #000000">,</span><span style="color: #000000">'</span><span style="color: #000000">f</span><span style="color: #000000">'</span><span style="color: #000000">));</span><span style="color: #000000">=></span><span style="color: #000000">ab4f2c4fd.<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        System.out.println(src.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">\\d</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">f</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #000000">=></span><span style="color: #000000">abffafcffd.<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        System.out.println(src.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">f</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #000000">=></span><span style="color: #000000">fb43fc23d.<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        System.out.println(src.replaceFirst(</span><span style="color: #000000">"</span><span style="color: #000000">\\d,</span><span style="color: #000000">"</span><span style="color: #000000">f</span><span style="color: #000000">"</span><span style="color: #000000">));=>abf32c43d</span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #000000">        System.out.println(src.replaceFirst(</span><span style="color: #000000">"</span><span style="color: #000000">4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">h</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #000000">=></span><span style="color: #000000">abh32c43d.</span></div> <p></span> </p> <img src ="http://www.aygfsteel.com/henry1451/aggbug/202367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/henry1451/" target="_blank">henry1451</a> 2008-05-23 12:05 <a href="http://www.aygfsteel.com/henry1451/articles/202367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于String字符串的一些常用工h?/title><link>http://www.aygfsteel.com/henry1451/articles/202328.html</link><dc:creator>henry1451</dc:creator><author>henry1451</author><pubDate>Fri, 23 May 2008 02:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/henry1451/articles/202328.html</guid><wfw:comment>http://www.aygfsteel.com/henry1451/comments/202328.html</wfw:comment><comments>http://www.aygfsteel.com/henry1451/articles/202328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/henry1451/comments/commentRss/202328.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/henry1451/services/trackbacks/202328.html</trackback:ping><description><![CDATA[1.支持NULL的Split划分数组的方?<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 alt="" src="http://www.aygfsteel.com/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"> String[] Split(String s, String delim)<br /> <img id="Codehighlighter1_54_595_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_595_Open_Text.style.display='none'; Codehighlighter1_54_595_Closed_Image.style.display='inline'; Codehighlighter1_54_595_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_54_595_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_54_595_Closed_Text.style.display='none'; Codehighlighter1_54_595_Open_Image.style.display='inline'; Codehighlighter1_54_595_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_54_595_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 alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_54_595_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/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: #0000ff">null</span><span style="color: #000000"> </span><span style="color: #000000">||</span><span style="color: #000000"> s.equals(</span><span style="color: #000000">""</span><span style="color: #000000">)) </span><span style="color: #008000"><br /> <img id="Codehighlighter1_133_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_133_248_Open_Text.style.display='none'; Codehighlighter1_133_248_Closed_Image.style.display='inline'; Codehighlighter1_133_248_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_133_248_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_133_248_Closed_Text.style.display='none'; Codehighlighter1_133_248_Open_Image.style.display='inline'; Codehighlighter1_133_248_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">          </span><span id="Codehighlighter1_133_248_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 alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_133_248_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />              String empty[] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> String[</span><span style="color: #000000">1</span><span style="color: #000000">];<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />              empty[</span><span style="color: #000000">0</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">""</span><span style="color: #000000">;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />              </span><span style="color: #0000ff">return</span><span style="color: #000000"> empty;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />          }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        Vector vStrArray </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Vector();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        StringTokenizer stk </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> StringTokenizer(s, delim);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        String strTemp;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">while</span><span style="color: #000000">(stk.hasMoreTokens())<br /> <img id="Codehighlighter1_390_451_Open_Image" onclick="this.style.display='none'; Codehighlighter1_390_451_Open_Text.style.display='none'; Codehighlighter1_390_451_Closed_Image.style.display='inline'; Codehighlighter1_390_451_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_390_451_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_390_451_Closed_Text.style.display='none'; Codehighlighter1_390_451_Open_Image.style.display='inline'; Codehighlighter1_390_451_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_390_451_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 alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_390_451_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            strTemp </span><span style="color: #000000">=</span><span style="color: #000000"> stk.nextToken();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            vStrArray.add(strTemp);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        String as[] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> String[vStrArray.size()];<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/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"> n</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">; n </span><span style="color: #000000"><</span><span style="color: #000000"> vStrArray.size(); n</span><span style="color: #000000">++</span><span style="color: #000000">)<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            as[n] </span><span style="color: #000000">=</span><span style="color: #000000"> (String)vStrArray.get(n);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> as;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div> <br /> 2.指定替换范围内的字符?<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 alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> String replaceAll(String strSource, String strFrom, String strTo)<br /> <img id="Codehighlighter1_82_479_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_479_Open_Text.style.display='none'; Codehighlighter1_82_479_Closed_Image.style.display='inline'; Codehighlighter1_82_479_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_479_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_82_479_Closed_Text.style.display='none'; Codehighlighter1_82_479_Open_Image.style.display='inline'; Codehighlighter1_82_479_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_82_479_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 alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_82_479_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">if</span><span style="color: #000000">(strFrom </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">||</span><span style="color: #000000"> strFrom.equals(</span><span style="color: #000000">""</span><span style="color: #000000">))<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> strSource;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        String strDest </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">""</span><span style="color: #000000">;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">int</span><span style="color: #000000"> intFromLen </span><span style="color: #000000">=</span><span style="color: #000000"> strFrom.length();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">int</span><span style="color: #000000"> intPos;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">while</span><span style="color: #000000">((intPos </span><span style="color: #000000">=</span><span style="color: #000000"> strSource.indexOf(strFrom)) </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 /> <img id="Codehighlighter1_279_424_Open_Image" onclick="this.style.display='none'; Codehighlighter1_279_424_Open_Text.style.display='none'; Codehighlighter1_279_424_Closed_Image.style.display='inline'; Codehighlighter1_279_424_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_279_424_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_279_424_Closed_Text.style.display='none'; Codehighlighter1_279_424_Open_Image.style.display='inline'; Codehighlighter1_279_424_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_279_424_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 alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_279_424_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            strDest </span><span style="color: #000000">=</span><span style="color: #000000"> strDest </span><span style="color: #000000">+</span><span style="color: #000000"> strSource.substring(</span><span style="color: #000000">0</span><span style="color: #000000">,intPos);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            strDest </span><span style="color: #000000">=</span><span style="color: #000000"> strDest </span><span style="color: #000000">+</span><span style="color: #000000"> strTo;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            strSource </span><span style="color: #000000">=</span><span style="color: #000000"> strSource.substring(intPos </span><span style="color: #000000">+</span><span style="color: #000000"> intFromLen);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        strDest </span><span style="color: #000000">=</span><span style="color: #000000"> strDest </span><span style="color: #000000">+</span><span style="color: #000000"> strSource;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> strDest;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div> <br /> 3.<font style="background-color: #c4ecc9">以支持回车的昄</font>:<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_47_343_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_343_Open_Text.style.display='none'; Codehighlighter1_47_343_Closed_Image.style.display='inline'; Codehighlighter1_47_343_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_47_343_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_47_343_Closed_Text.style.display='none'; Codehighlighter1_47_343_Open_Image.style.display='inline'; Codehighlighter1_47_343_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> String addBr(String Content) </span><span id="Codehighlighter1_47_343_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 alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_47_343_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_78_108_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_108_Open_Text.style.display='none'; Codehighlighter1_78_108_Closed_Image.style.display='inline'; Codehighlighter1_78_108_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_78_108_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_78_108_Closed_Text.style.display='none'; Codehighlighter1_78_108_Open_Image.style.display='inline'; Codehighlighter1_78_108_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (Content </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_78_108_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 alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_78_108_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">""</span><span style="color: #000000">;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        String makeContent </span><span style="color: #000000">=</span><span style="color: #000000"> Content;        <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        makeContent </span><span style="color: #000000">=</span><span style="color: #000000"> StringUtils.replace(makeContent, </span><span style="color: #000000">"</span><span style="color: #000000">\r</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: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        makeContent </span><span style="color: #000000">=</span><span style="color: #000000"> StringUtils.replace(makeContent, </span><span style="color: #000000">"</span><span style="color: #000000">\n</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">""</span><span style="color: #000000">);        <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> makeContent;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div> <br /> 4.防SQL注入:<font style="background-color: #c4ecc9">  <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_0_94_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_94_Open_Text.style.display='none'; Codehighlighter1_0_94_Closed_Image.style.display='inline'; Codehighlighter1_0_94_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_0_94_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_94_Closed_Text.style.display='none'; Codehighlighter1_0_94_Open_Image.style.display='inline'; Codehighlighter1_0_94_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span id="Codehighlighter1_0_94_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">/** */</span><span id="Codehighlighter1_0_94_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  * "'" - > "''" "aaa'a" -> "aaa''a" "a''" -> "a''''"<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  * <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  * </span><span style="color: #808080">@param</span><span style="color: #008000"> cond<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  * </span><span style="color: #808080">@return</span><span style="color: #008000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />  </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /> <img id="Codehighlighter1_155_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_155_418_Open_Text.style.display='none'; Codehighlighter1_155_418_Closed_Image.style.display='inline'; Codehighlighter1_155_418_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_155_418_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_155_418_Closed_Text.style.display='none'; Codehighlighter1_155_418_Open_Image.style.display='inline'; Codehighlighter1_155_418_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> String toDoubleChar(String cond, </span><span style="color: #0000ff">char</span><span style="color: #000000"> todc) </span><span id="Codehighlighter1_155_418_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_155_418_Open_Text"><span style="color: #000000">{<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  </span><span style="color: #0000ff">if</span><span style="color: #000000"> (StringUtil.isEmpty(cond))<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />   </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">""</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  StringBuffer sb </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> StringBuffer();<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  </span><span style="color: #008000">//</span><span style="color: #008000"> "'" -> "''"</span><span style="color: #008000"><br /> <img id="Codehighlighter1_302_390_Open_Image" onclick="this.style.display='none'; Codehighlighter1_302_390_Open_Text.style.display='none'; Codehighlighter1_302_390_Closed_Image.style.display='inline'; Codehighlighter1_302_390_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_302_390_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_302_390_Closed_Text.style.display='none'; Codehighlighter1_302_390_Open_Image.style.display='inline'; Codehighlighter1_302_390_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" /></span><span style="color: #000000">  </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"><</span><span style="color: #000000"> cond.length(); i</span><span style="color: #000000">++</span><span style="color: #000000">) </span><span id="Codehighlighter1_302_390_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_302_390_Open_Text"><span style="color: #000000">{<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />   </span><span style="color: #0000ff">char</span><span style="color: #000000"> c </span><span style="color: #000000">=</span><span style="color: #000000"> cond.charAt(i);<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />   sb.append(c);<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />   </span><span style="color: #0000ff">if</span><span style="color: #000000"> (c </span><span style="color: #000000">==</span><span style="color: #000000"> todc)<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    sb.append(todc);<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />  }</span></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />  </span><span style="color: #0000ff">return</span><span style="color: #000000"> sb.toString();<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" /> }</span></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <p></font><br /> 5.是否为整?<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 id="Codehighlighter1_45_145_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_145_Open_Text.style.display='none'; Codehighlighter1_45_145_Closed_Image.style.display='inline'; Codehighlighter1_45_145_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_45_145_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_45_145_Closed_Text.style.display='none'; Codehighlighter1_45_145_Open_Image.style.display='inline'; Codehighlighter1_45_145_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #000000">    </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">boolean</span><span style="color: #000000"> isInteger(String str) </span><span id="Codehighlighter1_45_145_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_45_145_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_53_99_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_99_Open_Text.style.display='none'; Codehighlighter1_53_99_Closed_Image.style.display='inline'; Codehighlighter1_53_99_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_53_99_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_99_Closed_Text.style.display='none'; Codehighlighter1_53_99_Open_Image.style.display='inline'; Codehighlighter1_53_99_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_53_99_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_53_99_Open_Text"><span style="color: #000000">{<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            Integer.parseInt(str);<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /> <img id="Codehighlighter1_121_142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_142_Open_Text.style.display='none'; Codehighlighter1_121_142_Closed_Image.style.display='inline'; Codehighlighter1_121_142_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_121_142_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_121_142_Closed_Text.style.display='none'; Codehighlighter1_121_142_Open_Image.style.display='inline'; Codehighlighter1_121_142_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (Throwable e) </span><span id="Codehighlighter1_121_142_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_121_142_Open_Text"><span style="color: #000000">{<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />        }</span></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />    }</span></span></div> <p><br /> 6.转换为Int ?<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 id="Codehighlighter1_55_203_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_203_Open_Text.style.display='none'; Codehighlighter1_55_203_Closed_Image.style.display='inline'; Codehighlighter1_55_203_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_55_203_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_203_Closed_Text.style.display='none'; Codehighlighter1_55_203_Open_Image.style.display='inline'; Codehighlighter1_55_203_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #000000">    </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"> toInt(String str, </span><span style="color: #0000ff">int</span><span style="color: #000000"> defaultValue) </span><span id="Codehighlighter1_55_203_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_55_203_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_77_105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_105_Open_Text.style.display='none'; Codehighlighter1_77_105_Closed_Image.style.display='inline'; Codehighlighter1_77_105_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_77_105_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_77_105_Closed_Text.style.display='none'; Codehighlighter1_77_105_Open_Image.style.display='inline'; Codehighlighter1_77_105_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (isEmpty(str)) </span><span id="Codehighlighter1_77_105_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_77_105_Open_Text"><span style="color: #000000">{<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> defaultValue;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />        }</span></span><span style="color: #000000"><br /> <img id="Codehighlighter1_113_150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_150_Open_Text.style.display='none'; Codehighlighter1_113_150_Closed_Image.style.display='inline'; Codehighlighter1_113_150_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_113_150_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_113_150_Closed_Text.style.display='none'; Codehighlighter1_113_150_Open_Image.style.display='inline'; Codehighlighter1_113_150_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_113_150_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_113_150_Open_Text"><span style="color: #000000">{<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> Integer.parseInt(str);<br /> <img id="Codehighlighter1_172_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_172_200_Open_Text.style.display='none'; Codehighlighter1_172_200_Closed_Image.style.display='inline'; Codehighlighter1_172_200_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_172_200_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_172_200_Closed_Text.style.display='none'; Codehighlighter1_172_200_Open_Image.style.display='inline'; Codehighlighter1_172_200_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (Throwable e) </span><span id="Codehighlighter1_172_200_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_172_200_Open_Text"><span style="color: #000000">{<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> defaultValue;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />        }</span></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />    }</span></span></div> <p><br /> 不断更新?..... </p> <img src ="http://www.aygfsteel.com/henry1451/aggbug/202328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/henry1451/" target="_blank">henry1451</a> 2008-05-23 10:24 <a href="http://www.aygfsteel.com/henry1451/articles/202328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.bat批处理文件格式运行JAVA应用E序http://www.aygfsteel.com/henry1451/articles/200830.htmlhenry1451henry1451Fri, 16 May 2008 03:18:00 GMThttp://www.aygfsteel.com/henry1451/articles/200830.htmlhttp://www.aygfsteel.com/henry1451/comments/200830.htmlhttp://www.aygfsteel.com/henry1451/articles/200830.html#Feedback0http://www.aygfsteel.com/henry1451/comments/commentRss/200830.htmlhttp://www.aygfsteel.com/henry1451/services/trackbacks/200830.html
 当我们以q行JAVAq行E序?含用MAIN()Ҏ(gu)的类),可以写一..bat格式的批处理文g,以便双击该文件即可运行JAVA应用E序,

主要是在文g中编?java 你的ȝ(含用MAIN()Ҏ(gu)的类,带完整的包名),当然后如果主cd用到其他c?则需讄CLASSPATH变量,提向你的

其他cȝ路径,如果其他cL成了JAR?则应该同时指向JAR包的文g路径,q样ȝ可以找到要q行时的相关引用c?

.bat文g格式:

@echo off
set classpath=.;./lib/mysql-connector-java-3.0.10-stable-bin.jar
java bat.test.BatTest
pause

.bat文g格式的编写可以从|上扄x?主要是一些命今的~写.
在设|classpath 属性时要注? . q个?意思是先从当前 .bat 所以的目录以准,按包名去查找对应的类文g,而且cL以目录的形式存在时一定要讄
否则?x)提C找不到cL?如果全部打成了JAR文g的Ş?则只需指定LIB(JAR文g一般放在此目录?目录可以了.

当然q是在WINDOWS的系l中~写的方?如果是在LINUX{系l中,只需更改?bat 中的命今卛_.
另外如果是一个比较完整的q行E序,如要d配置文g,输出日志,{?可以用ANT来编?打包,试{?使发?ULq行E序更加方便.



henry1451 2008-05-16 11:18 发表评论
]]>
关于StringBuffer的?/title><link>http://www.aygfsteel.com/henry1451/articles/200794.html</link><dc:creator>henry1451</dc:creator><author>henry1451</author><pubDate>Fri, 16 May 2008 02:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/henry1451/articles/200794.html</guid><wfw:comment>http://www.aygfsteel.com/henry1451/comments/200794.html</wfw:comment><comments>http://www.aygfsteel.com/henry1451/articles/200794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/henry1451/comments/commentRss/200794.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/henry1451/services/trackbacks/200794.html</trackback:ping><description><![CDATA[关于StringBuffer,在定义StringBuffer变量时一定要初始?如下定义方式生错?<br /> <br /> 1) StringBuffer  bf;//生没有初始化的错?不能通过~译<br /> 2) StringBuffer bff = null;//生异?报空指针错误<br /> <br /> 卛_使用 bf.append("ss");?生对应的错误,应当用以下方式进行初始化:<br /> StringBuffer bfu = new StringBuffer();或StringBuffer bfu = new StringBuffer("");<br /> q样可以正?bfu.append("str");<br /> <br /> 对于W一点程序不能通过~译(如果IDE用的是Eclipse的话)?x)出现红色提C线,q给出错误提C?而对于第二点,<br /> ׃要运行时才报发生I指针异帔R?问题比较难找,所以正初始化StringBuffer变量,能减一些不必要的麻? <img src ="http://www.aygfsteel.com/henry1451/aggbug/200794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/henry1451/" target="_blank">henry1451</a> 2008-05-16 10:09 <a href="http://www.aygfsteel.com/henry1451/articles/200794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个奇怪的问题http://www.aygfsteel.com/henry1451/articles/200422.htmlhenry1451henry1451Wed, 14 May 2008 08:35:00 GMThttp://www.aygfsteel.com/henry1451/articles/200422.htmlhttp://www.aygfsteel.com/henry1451/comments/200422.htmlhttp://www.aygfsteel.com/henry1451/articles/200422.html#Feedback0http://www.aygfsteel.com/henry1451/comments/commentRss/200422.htmlhttp://www.aygfsteel.com/henry1451/services/trackbacks/200422.html

public class test
{
int i = 0;

public test()
{
          i=i ++; 
         System.out.println(i);
}

public static void main(String argsp[]) {
new test();
}
}

l果?,Z么呢 ?

java的编译器搞的?在遇?+?-操作W的时候会(x)重新为原变量分配一块内存空_(d)以存攑֎始的|而在完成了赋D之后,将q块内存释放掉。由于i的原始值存攑֜后开辟的内存中,q样i=i++后,׃是先赋?i׃(x)得到i的原始?存放在新内存中的数椐)Q而原来内存位|的i自加后只保留在原来的位置,׃此时i指向已经是新开辟出来的内存地址Q所以i的值没有发送变?
换句话说,
while(true){
   i=i++;
}
永远执行i的值恒{于i的初始?即不是0也一?下面我把q程写一?

i=0;//假设此时内存地址?x12345678
i=i++;//pȝ新开内存地址0x99999999,存放i原始?,然后0x12345678的存放数?1操作
      //此时0x12345678=1,0x99999999=0,但是上一步是先给?所以i的内存地址?x99999999=0;

所以i=0,

但是,如果?br /> i=0;
i++;
此时i=1,因ؓ(f)0x99999999处新开辟的内存地址没有lQ何引?所以被丢弃?il箋使用0x12345678处?br />
你在栈上没有计算Q正的q程?/p>

你把i的?攑ֈ栈上
然后把i变成1Q但是栈上还?
最后把栈上?弹出来赋值给i,l果把刚才iinc的结果给冲掉?i又变成了0




henry1451 2008-05-14 16:35 发表评论
]]>
如何?bat批处理文?http://www.aygfsteel.com/henry1451/articles/199879.htmlhenry1451henry1451Sun, 11 May 2008 13:12:00 GMThttp://www.aygfsteel.com/henry1451/articles/199879.htmlhttp://www.aygfsteel.com/henry1451/comments/199879.htmlhttp://www.aygfsteel.com/henry1451/articles/199879.html#Feedback0http://www.aygfsteel.com/henry1451/comments/commentRss/199879.htmlhttp://www.aygfsteel.com/henry1451/services/trackbacks/199879.html  1.教教你如何写.bat批处理文?nbsp;
扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文g?

首先批处理文件是一个文本文Ӟq个文g的每一行都是一条DOS命o(h)Q大部分时候就好象我们在DOS提示

W下执行的命令行一PQ你可以使用DOS下的Edit或者Windows的记事本(notepad){Q何文本文件编辑工

具创建和修改批处理文件?

其次Q批处理文g是一U简单的E序Q可以通过条g语句(if)和流E控制语?goto)来控制命令运行的?br />
E,在批处理中也可以使用循环语句(for) 来@环执行一条命令。当Ӟ批处理文件的~程能力与C语言{?br />
~程语句比v来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命o(h)Q包括内部命

令和外部命o(h)Q,而批处理的能力主要取决于你所使用的命令?

W三Q每个编写好的批处理文g都相当于一个DOS的外部命令,你可以把它所在的目录攑ֈ你的DOS搜烦?br />
?path)中来使得它可以在L位置q行。一个良好的?fn)惯是在盘上徏立一个bat或者batch目录Q例?br />
C:\BATCHQ,然后所有你~写的批处理文g攑ֈ该目录中Q这样只要在path中设|上c:\batchQ你可

以在L位置q行所有你~写的批处理E序?

W四Q在DOS和W(xu)in9x/Mepȝ下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动q行批处理文Ӟ每次p?br />
l启动时?x)自动运行该文gQ你可以系l每ơ启动时都要q行的命令放入该文g中,例如讄搜烦路径

Q调入鼠标驱动和盘~存Q设|系l环境变量等。下面是一个运行于 Windows 98下的autoexec.bat的示

例:(x)
@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY.COM /INSERT
LH CTMOUSE.EXE
SET TEMP=D:\TEMP
SET TMP=D:\TEMP


批处理的作用
单的_(d)批处理的作用是自动的连l执行多条命令?

q里先讲一个最单的应用Q在启动wps软gӞ每次都必L行(>前面内容表示DOS提示W)Q?nbsp;
C:\>cd wps 
C:\WPS>spdos
C:\WPS>py 
C:\WPS>wbx 
C:\WPS>wps 
如果每次用WPS之前都这h行一遍,(zhn)是不是觉得很麻烦呢Q?

好了Q用批处理,可以实现将q些ȝ的操作简单化Q首先我们编写一个runwps.bat批处理文Ӟ内容

如下Q?
@echo off
c:
cd\wps
spdos
py
wbx
wps
cd\

以后Q我们每ơ进入wpsQ只需要运行runwpsq个批处理文件即可?

常用命o(h)

echo、@、call、pause、rem(技巧:(x)?:代替rem)是批处理文g最常用的几个命令,我们׃他们开?br />
学v?nbsp;
echo 表示昄此命令后的字W?nbsp;
echo off 表示在此语句后所有运行的命o(h)都不昄命o(h)行本w?nbsp;
@与echo off相象Q但它是加在每个命o(h)行的最前面Q表C行时不显C一行的命o(h)行(只能影响当前?br />
Q?nbsp;
call 调用另一个批处理文gQ如果不用call而直接调用别的批处理文gQ那么执行完那个批处理文件后?br />
无法q回当前文gq执行当前文件的后箋命o(h)Q?nbsp;
pause q行此句?x)暂停批处理的执行ƈ在屏q上昄Press any key to continue...的提C,{待用户?br />
L键后l箋 
rem 表示此命令后的字Wؓ(f)解释行(注释Q,不执行,只是l自׃后参考用的(相当于程序中的注释)

?nbsp;

?Q用edit~辑a.bat文gQ输入下列内容后存盘为c:\a.batQ执行该批处理文件后可实玎ͼ(x)根目录?br />
所有文件写?a.txt中,启动UCDOSQ进入WPS{功能?nbsp;

  批处理文件的内容?         命o(h)注释Q?nbsp;

    @echo off           不显C后l命令行?qing)当前命令?
    dir c:\*.* >a.txt       c盘文件列表写入a.txt 
    call c:\ucdos\ucdos.bat    调用ucdos 
    echo 你好            昄"你好" 
    pause              暂停,{待按键l箋 
    rem 准备q行wps         注释Q准备运行wps 
 
 
2 教教你如何写.bat批处理文?nbsp;
     cd ucdos            q入ucdos目录 
    wps               q行wps   

批处理文件的参数

批处理文件还可以像C语言的函C样用参敎ͼ相当于DOS命o(h)的命令行参数Q,q需要用C个参数表

C符“%”?nbsp;

%[1-9]表示参数Q参数是指在q行批处理文件时在文件名后加的以I格Q或者TabQ分隔的字符丌Ӏ变量可

以从%0?9Q?0表示批处理命令本w,其它参数字符串用%1?9序表示?nbsp;

?QC:根目录下有一批处理文件名为f.batQ内容ؓ(f)Q?
@echo off
format %1

如果执行C:\>f a:
那么在执行f.batӞ%1pCa:Q这样format %1q当于format a:Q于是上面的命o(h)q行时实际执行的

是format a:

?QC:根目录下一批处理文件名为t.batQ内容ؓ(f):
@echo off
type %1 
type %2 

那么q行C:\>t a.txt b.txt 
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令将序地显Ca.txt和b.txt文g的内宏V?


Ҏ(gu)命o(h)

if goto choice for是批处理文g中比较高U的命o(h)Q如果这几个你用得很熟练Q你是批处理文件的?br />
家啦?nbsp;

一、if 是条件语句,用来判断是否W合规定的条Ӟ从而决定执行不同的命o(h)?有三U格? 

1、if [not] "参数" == "字符? 待执行的命o(h) 

参数如果{于(not表示不等Q下?指定的字W串Q则条g成立Q运行命令,否则q行下一句?

例:(x)if "%1"=="a" format a:

2、if [not] exist [路径\]文g?待执行的命o(h) 
如果有指定的文gQ则条g成立Q运行命令,否则q行下一句?

? if exist c:\config.sys type c:\config.sys 
表示如果存在c:\config.sys文gQ则昄它的内容?

3、if errorlevel <数字> 待执行的命o(h) 

很多DOSE序在运行结束后?x)返回一个数字值用来表C程序运行的l果(或者状?Q通过if errorlevel?br />
令可以判断程序的q回|Ҏ(gu)不同的返回值来军_执行不同的命?q回值必L照从大到的序排列

)。如果返回值等于指定的数字Q则条g成立Q运行命令,否则q行下一句?

如if errorlevel 2 goto x2

二、goto 批处理文件运行到q里蟩到goto所指定的标?标号即labelQ标L(fng):后跟标准字符串来定义)

处,goto语句一般与if配合使用Q根据不同的条g来执行不同的命o(h)l?nbsp;

?

goto end 

:end 
echo this is the end 

标号?#8220;:字符?#8221;来定义,标号所在行不被执行?nbsp;

三、choice 使用此命令可以让用户输入一个字W(用于选择Q,从而根据用L(fng)选择q回不同?br />
errorlevelQ然后于if errorlevel配合Q根据用L(fng)选择q行不同的命令?

注意Qchoice命o(h)为DOS或者Windowspȝ提供的外部命令,不同版本的choice命o(h)语法?x)稍有不同,L(fng)

choice /?查看用法?

choice的命令语法(该语法ؓ(f)Windows 2003中choice命o(h)的语法,其它版本的choice的命令语法与此大?br />
异Q:(x)

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
    该工具允许用户从选择列表选择一个项目ƈq回所选项目的索引?

参数列表:
   /C    choices       指定要创建的选项列表。默认列表是 "YN"?

   /N                  在提C符中隐藏选项列表。提C前面的消息得到昄Q?
                       选项依旧处于启用状态?

   /CS                 允许选择分大写的选项。在默认情况下,q个工具
                       是不分大写的?

   /T    timeout       做出默认选择之前Q暂停的U数。可接受的值是?0
                       ?9999。如果指定了 0Q就不会(x)有暂停,默认选项
                       ?x)得到选择?

   /D    choice        ?nnnn U之后指定默认选项。字W必d?/C ?
                       Ҏ(gu)定的一l选择? 同时Q必ȝ /T 指定 nnnn?
 
 

 
3 教教你如何写.bat批处理文?nbsp;
 
   /M    text          指定提示之前要显C的消息。如果没有指定,工具?
                       昄提示?

   /?                  昄帮助消息?

   注意:
   ERRORLEVEL 环境变量被设|ؓ(f)从选择集选择的键索引。列出的W一个?
   择返?1Q第二个选择q回 2Q等{。如果用h的键不是有效的选择Q?
   该工具会(x)发出警告响声。如果该工具(g)到错误状态,它会(x)q回 255 ?
   ERRORLEVEL 倹{如果用h Ctrl+Break ?Ctrl+C 键,该工具会(x)q回 0
   ?ERRORLEVEL 倹{在一个批E序中?ERRORLEVEL 参数Ӟ参数降
   序排列?

CZ:
   CHOICE /? 
   CHOICE /C YNC /M "认h YQ否h NQ或者取消请?C?
   CHOICE /T 10 /C ync /CS /D y
   CHOICE /C ab /M "选项 1 请选择 aQ选项 2 请选择 b?
   CHOICE /C ab /N /M "选项 1 请选择 aQ选项 2 请选择 b?
   
如果我运行命令:(x)CHOICE /C YNC /M "认h YQ否h NQ或者取消请?C?
屏幕上会(x)昄Q?
认h YQ否h NQ或者取消请?C?[Y,N,C]?
   
   
例:(x)test.bat的内容如下(注意Q用if errorlevel判断q回值时Q要按返回g高到低排列): 
@echo off 
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem 
if errotlevel 1 goto defrag 

:defrag 
c:\dos\defrag 
goto end 

:mem 
mem 
goto end 

:end 
echo good bye 

此批处理q行后,显C?#8220;defrag,mem,end[D,M,E]?” Q用户可选择d m e Q然后if语句Ҏ(gu)用户的选择

作出判断Qd表示执行标号为defrag的程序段Qm表示执行标号为mem的程序段Qe表示执行标号为end的程?br />
D,每个E序D|后都以goto end程序蟩到end标号处,然后E序显Cgood byeQ批处理q行l束?nbsp;

四、for 循环命o(h)Q只要条件符合,它将多次执行同一命o(h)?nbsp;

语法Q?
对一l文件中的每一个文件执行某个特定命令?

FOR %%variable IN (set) DO command [command-parameters]

  %%variable  指定一个单一字母可替换的参数?
  (set)      指定一个或一l文件。可以用通配W?
  command    指定Ҏ(gu)个文件执行的命o(h)?
  command-parameters
             为特定命令指定参数或命o(h)行开兟?

例如一个批处理文g中有一? 
for %%c in (*.bat *.txt) do type %%c 

则该命o(h)行会(x)昄当前目录下所有以bat和txt为扩展名的文件的内容?


批处理示?

1. IF-EXIST

1)

首先用记事本在C:\建立一个test1.bat批处理文Ӟ文g内容如下Q?nbsp;
@echo off 
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT 
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist 

然后q行它:(x)
C:\>TEST1.BAT 

如果C:\存在AUTOEXEC.BAT文gQ那么它的内容就?x)被昄出来Q如果不存在Q批处理׃(x)提示你该文g?br />
存在?

2)

接着再徏立一个test2.bat文gQ内容如下:(x) 
@ECHO OFF 
IF EXIST \%1 TYPE \%1 
IF NOT EXIST \%1 ECHO \%1 does not exist 

执行: 
C:\>TEST2 AUTOEXEC.BAT 
该命令运行结果同上?

说明Q?nbsp;
(1) IF EXIST 是用来测试文件是否存在的Q格式ؓ(f) 
IF EXIST [路径+文g名] 命o(h) 
(2) test2.bat文g中的%1是参敎ͼDOS允许传?个批参数信息l批处理文gQ分别ؓ(f)%1~%9(%0表示test2

命o(h)本n) Q这有点象编E中的实参和形参的关p,%1是Ş参,AUTOEXEC.BAT是实参?nbsp;

3) 更进一步的Q徏立一个名为TEST3.BAT的文Ӟ内容如下Q?nbsp;
@echo off
IF "%1" == "A" ECHO XIAO 
IF "%2" == "B" ECHO TIAN 
IF "%3" == "C" ECHO XIN 

如果q行Q?
C:\>TEST3 A B C 
屏幕上会(x)昄:
XIAO
TIAN
XIN

如果q行Q?
C:\>TEST3 A B 
屏幕上会(x)昄
 
 

 
4 教教你如何写.bat批处理文?nbsp;
 XIAO
TIAN 

在这个命令执行过E中QDOS?x)将一个空字符串指定给参数%3?nbsp;

2、IF-ERRORLEVEL

建立TEST4.BATQ内容如下:(x)
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文g拯p| 
IF ERRORLEVEL 0 ECHO 成功拯文g 

然后执行文g:
C:\>TEST4

如果文g拯成功Q屏q就?x)显C?#8220;成功拯文g”Q否则就?x)显C?#8220;文g拯p|”?nbsp;

IF ERRORLEVEL 是用来测试它的上一个DOS命o(h)的返回值的Q注意只是上一个命令的q回|而且q回值必

M照从大到次序顺序判断?
因此下面的批处理文g是错误的Q?
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:\ 
IF ERRORLEVEL 0 ECHO 成功拯文g 
IF ERRORLEVEL 1 ECHO 未找到拷贝文?nbsp;
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拯操作 
IF ERRORLEVEL 3 ECHO 预置错误L文g拯操作 
IF ERRORLEVEL 4 ECHO 拯q程中写盘错?nbsp;

无论拯是否成功Q后面的Q?nbsp;

未找到拷贝文?nbsp;
用户通过ctrl-c中止拯操作 
预置错误L文g拯操作 
拯q程中写盘错?

都将昄出来?nbsp;

以下是几个常用命o(h)的返回值及(qing)其代表的意义Q?nbsp;
backup 
0 备䆾成功 
1 未找到备份文?nbsp;
2 文g׃n冲突L备䆾完成 
3 用户用ctrl-c中止备䆾 
4 ׃致命的错误备䆾操作中止 

diskcomp 
0 盘比较相?nbsp;
1 盘比较不?nbsp;
2 用户通过ctrl-c中止比较操作 
3 ׃致命的错误比较操作中止 
4 预置错误中止比较 

diskcopy 
0 盘拷贝操作成?nbsp;
1 非致命盘?写错 
2 用户通过ctrl-cl束拯操作 
3 因致命的处理错误使盘拯中止 
4 预置错误L拯操作 

format 
0 格式化成?nbsp;
3 用户通过ctrl-c中止格式化处?nbsp;
4 因致命的处理错误使格式化中止 
5 在提C?#8220;proceed with formatQy/nQ?”下用户键入nl束 

xcopy 
0 成功拯文g 
1 未找到拷贝文?nbsp;
2 用户通过ctrl-c中止拯操作 
4 预置错误L文g拯操作 
5 拯q程中写盘错?nbsp;

3、IF STRING1 == STRING2

建立TEST5.BATQ文件内容如下:(x) 
@echo off 
IF "%1" == "A" FORMAT A: 

执行Q?nbsp;
C:\>TEST5 A 
屏幕上就出现是否A:盘格式化的内宏V?nbsp;

注意Qؓ(f)了防止参Cؓ(f)I的情况Q一般会(x)字W串用双引号Q或者其它符P注意不能使用保留W号Q括

h?
如:(x)if [%1]==[A] 或?if %1*==A*
5、GOTO

建立TEST6.BATQ文件内容如下:(x) 
@ECHO OFF 
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY 
GOTO _DONE
:_COPY 
COPY C:\AUTOEXEC.BAT D:\ 
:_DONE 
注意Q?nbsp;
(1) 标号前是ASCII字符的冒?:"Q冒号与标号之间不能有空根{?nbsp;
(2) 标号的命名规则与文g名的命名规则相同?
(3) DOS支持最长八位字W的标号Q当无法区别两个标号Ӟ蟩转至最q的一个标受?
6、FOR
建立C:\TEST7.BATQ文件内容如下:(x) 
@ECHO OFF 
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C 
q行Q?nbsp;
C:>TEST7
执行以后Q屏q上?x)将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内Ҏ(gu)C出来(不包括隐藏文?br /> Q?nbsp;

henry1451 2008-05-11 21:12 发表评论
]]>
23U设计模式的代码?Java) http://www.aygfsteel.com/henry1451/articles/198546.htmlhenry1451henry1451Mon, 05 May 2008 11:55:00 GMThttp://www.aygfsteel.com/henry1451/articles/198546.htmlhttp://www.aygfsteel.com/henry1451/comments/198546.htmlhttp://www.aygfsteel.com/henry1451/articles/198546.html#Feedback0http://www.aygfsteel.com/henry1451/comments/commentRss/198546.htmlhttp://www.aygfsteel.com/henry1451/services/trackbacks/198546.html package   lq.test;  
   
  import   java.io.*;  
  import   java.util.*;  
   
  //*********创徏型模?**************  
   
  //factory   method   1  
  //1具体的构造算法,?构造出的具体品由子类实现  

  interface   Product   {  
  }  
   
  //或者我也提供一个工厂的接口Q由q个抽象cLl承? 
   
  abstract   class   Factory   {  
      abstract   public   Product   fmd();  
   
      //我认个方Ҏ(gu)的存在是Q是对FactoryMethodҎ(gu)的补? 
      //例如可以为生成的对象赋|计算为生成对象应付何|前后的日? 
      //且这些都是公用的Q生成品的最主要法q是在FactoryMethod中,  
      //q个Ҏ(gu)只是赯助作用,q也是一U思维Ҏ(gu)Q将具体的算法实现在一个方法中  
      //而我不直接调用此Ҏ(gu)Q而用另外的一个方法封装它Q等C更灵zȝ效果Q? 
      //子类需实现的内Ҏ(gu)FactoryMethod  
      //此方法是一个TemplateMethod  

      public   Product   creat()   {  
          Product   pd   =   null;  
          System.out.println("before   operation");  
          pd   =   fmd();  
          System.out.println("end   operation");  
          return   pd;  
      }  
  }  
   
  class   Product1   implements   Product   {  
  }  
   
  class   Factory1   extends   Factory   {  
  public   Product   fmd()   {  
  Product   pd   =   new   Product1();  
  return   pd;  
  }  
  }  
   
  //FactroyMethod   2  
  //q种方式单实? 
  interface   Producta   {  
  }  
   
  interface   Factorya   {  
  Producta   create();  
  }  
   
  class   Producta1   implements   Producta   {}  
   
  class   Factorya1   implements   Factorya   {  
      public   Producta   create()   {  
          Producta   pda   =   null;  
          pda   =   new   Producta1();  
          return   pda;  
      }    
  }  
   
  //AbstractFactory  
  //AbstractFactory与FactoryMethod的不同在于AbstractFactory创徏多个产品  
  //感觉此模式没有什么大?
 
   
  //当然可以q有更多的接? 
  interface   Apda   {}  
  interface   Apdb   {}    
  interface   Afactory   {  
      Apda   createA();  
      Apdb   createB();  
  }  
   
  class   Apda1   implements   Apda   {}  
  class   Apdb1   implements   Apdb   {}  
   
  //有几个接口就有几个对应的Ҏ(gu)  
  class   Afactory1   implements   Afactory   {  
      public   Apda   createA()   {  
          Apda   apda   =   null;  
          apda   =   new   Apda1();  
          return   apda;  
      }  
   
      public   Apdb   createB()   {  
          Apdb   apdb   =   null;  
          apdb   =   new   Apdb1();  
          return   apdb;  
      }  
  }  
   
  //Builder  
  //一个品的生成分ؓ(f)生成部g和组装部Ӟ不同的品每个部件生成的方式不同  
  //而组装的方式相同Q部件的生成抽象成接口方法,而组装的Ҏ(gu)使用一个TemplateMethodҎ(gu)  

  interface   Cpda   {}  
  class   Cpda1   implements   Cpda   {}  
 
  interface   BuilderI   {  
      void   buildPart1();  
      void   buildPart2();  
 
      void   initPd();  
      Cpda   getPd();  
  }  
   
  abstract   class   BuilderA   implements   BuilderI   {  
      Cpda   cpda;  
   
      public   Cpda   getPd()   {  
      initPd();  
   
      //对对象的内容q行讄  
      buildPart1();  
      buildPart2();  
   
      return   cpda;  
      }  
  }  
   
  class   Builder   extends   BuilderA   {  
      public   void   buildPart1()   {  
      System.out.println(cpda);  
      }  
   
      public   void   buildPart2()   {  
      System.out.println(cpda);  
      }  
   
      public   void   initPd()   {  
          cpda   =   new   Cpda1();  
      }  
  }  
   
  //一个简单的生成产品的实? 
  //1  

  abstract   class   Fy   {  
      public   abstract   void   med1();    
   
      static   class   Fy1   extends   Fy   {  
          public   void   med1()   {  
          }  
      }  
   
      public   static   Fy   getInstance()   {  
          Fy   fy   =   new   Fy1();  
          return   fy;  
   
          // Fy   fy   =   new   Fy1()   {//q种匿名内部cL静态的Q!  
  // public   void   med1()   {  
  // }  
  // };  
  // return   fy
}  
      }  
   
      //2  
      interface   Pdd   {}  
   
      class   Pdd1   implements   Pdd   {}  
   
      abstract   class   Fya   {  
          public   static   Pdd   getPd()   {  
          Pdd   pdd   =   new   Pdd1();  
          return   pdd;  
      }  
  }  
   
  //Prototype   在java中就是cloneQ又包含深拷贝和拷?/span>  
  class   CloneObja   {  
      public   CloneObja   MyClone()   {  
              return   new   CloneObja();  
      }  
  }  
   
  class   CloneObjb   {  
      public   CloneObjb   MyClone()   throws   Throwable   {  
          CloneObjb   cobj   =   null;  
          cobj   =   (CloneObjb)   pcl(this);  
          return   cobj;  
      }  
   
      /深度拯法  
      private   Object   pcl(Object   obj)   throws   Throwable   {  
      ByteArrayOutputStream   bao   =   new   ByteArrayOutputStream(1000);  
      ObjectOutputStream   objo   =   new   ObjectOutputStream(bao);  
      objo.writeObject(obj);  
   
      ByteArrayInputStream   bai   =   new   ByteArrayInputStream(bao.toByteArray());  
      ObjectInputStream   obji   =   new   ObjectInputStream(bai);  
   
      Object   objr   =   obji.readObject();  
      return   objr;  
      }    
  }  
   
  //Singleton  
  //一个类只有一个对象,例如一个线E池Q一个cache
 
  class   Singleton1   {  
      public   static   Singleton1   instance   =   new   Singleton1();  
   
     private   Singleton1()   {  
      }  
   
      public   static   Singleton1   getInstance()   {  
          return   instance;  
      }  
  }  
   
  class   Singleton2   {  
      public   static   Singleton2   instance;  
   
      private   Singleton2()   {  
      }  
   
  // public   static   Singleton2   getInstance()   {  
  // if   (instance   ==   null)   {  
  // instance   =   new   Singleton2();  
  // }  
  //  
  // return   instance;  
  // }  

   
      public   static   Singleton2   getInstance()   {  
          synchronized(Singleton2.class)   {  
              if   (instance   ==   null)   {  
              instance   =   new   Singleton2();  
              }  
          }  
   
           return   instance;  
      }  
  }

Feedback

#1?/a> [g]   回复  引用  查看    

2008-01-17 10:07 by 落花人独?/a>      
//**********l构型模?*********  
   
  //Adapter  
  //基本Ҏ(gu)有两U,一U是使用引用一U用? 
  //不W合标准的接口{成符合标准的接口Q接口的修改主要是参数的增减Q? 
  //q回值类?当然q有Ҏ(gu)? 
  //感觉q就是封装的另一U表CŞ式,装有用Ҏ(gu)装(在方法中调用功能Ҏ(gu))Q? 
  //用类装(先传入功能方法所在的cȝ对象Q通过调用此对象的功能Ҏ(gu))  
   
  //使用引用的Ş? 

  class   Adapteea   {  
  public   void   kk()   {}  
  }  
   
  interface   Targeta   {  
  String   vv(int   i,   int   k);  
  }  
   
  class   Adaptera   implements   Targeta{  
  Adapteea   ade;  
   
  public   Adaptera(Adapteea   ade)   {  
  this.ade   =   ade;  
  }  
   
  public   String   vv(int   i,   int   k)   {  
  //具体的业务方法实现在Adaptee中,q个Ҏ(gu)  
  //只vC接口转换的作? 
  //调用此方法是通过引用  

  ade.kk();  
  return   null;  
  }  
  }  
   
  //使用l承形式?/span>  
  class   Adapteeb   {  
  public   void   kk()   {}  
  }  
   
  interface   Targetb   {  
  String   vv(int   i,   int   k);  
  }  
   
  class   Adapterb   extends   Adapteeb   implements   Targetb   {  
  public   String   vv(int   i,   int   k)   {  
  //调用此方法是通过l承  
  kk();  
  return   null;  
  }  
  }  
   
  //Proxy  
  interface   Subject   {  
  void   request();  
  }    
   
  class   realSubject   implements   Subject   {  
  public   void   request()   {  
  //do   the   real   business  
  }  
  }  
   
  class   Proxy   implements   Subject   {  
  Subject   subject;  
   
  public   Proxy(Subject   subject)   {  
  this.subject   =   subject;  
  }  
   
  public   void   request()   {  
  System.out.println("do   something");  
   
  subject.request();  
   
  System.out.println("do   something");  
  }  
  }  
   
  //Bridge  
  //感觉是多态的实现
 
   
  interface   Imp   {  
  void   operation();  
  }  
   
  class   Cimp1   implements   Imp   {  
  public   void   operation()   {  
  System.out.println("1");  
  }  
  }  
   
  class   Cimp2   implements   Imp   {  
  public   void   operation()   {  
  System.out.println("2");  
  }  
  }  
   
  class   Invoker   {  
  Imp   imp   =   new   Cimp1();  
   
  public   void   invoke()   {  
  imp.operation();  
  }  
  }  
   
  //Composite  
   
  interface   Component   {  
  void   operation();  
   
  void   add(Component   component);  
   
  void   remove(Component   component);  
  }  
   
  class   Leaf   implements   Component   {  
  public   void   operation()   {  
  System.out.println("an   operation");  
  }  
   
  public   void   add(Component   component)   {  
  throw   new   UnsupportedOperationException();  
  }  
   
  public   void   remove(Component   component)   {  
  throw   new   UnsupportedOperationException();  
  }  
  }  
   
  class   Composite   implements   Component   {  
  List   components   =   new   ArrayList();  
   
  public   void   operation()   {  
  Component   component   =   null;  
   
  Iterator   it   =   components.iterator();  
  while   (it.hasNext())   {  
  //不知道此component对象是leafq是compositeQ? 
  //如果是leaf则直接实现操作,如果是composite则l递归调用
 
  component   =   (Component)   it.next();  
  component.operation();  
  }  
  }  
   
  public   void   add(Component   component)   {  
  components.add(component);  
  }  
   
  public   void   remove(Component   component)   {  
  components.remove(component);  
  }  
  }  
   
  //Decorator  
  //对一个类的功能进行扩展时Q我可以使用l承Q但是不够灵z,所以选用? 
  //另外的一UŞ?引用与扉K可活得对对象的一定的使用能力Q而用引用将更灵z? 
  //我们要保证是对原功能的追加而不是修改,否则只能重写Ҏ(gu)Q或使用新的Ҏ(gu)  
  //注意concrete的可以直接new出来Q? 
  //而decorator的则需要用一个另外的decorator对象才能生成对象  
  //使用对象装Q和公用接口  
  //Decorator链上可以有多个元?/span>  
   
  interface   Componenta   {  
  void   operation();  
  }  
   
  class   ConcreteComponent   implements   Componenta   {  
  public   void   operation()   {  
  System.out.println("do   something");  
  }  
  }  
   
  class   Decorator   implements   Componenta   {  
  private   Componenta   component;  
   
  public   Decorator(Componenta   component)   {  
  this.component   =   component;  
  }  
   
  public   void   operation()   {  
  //do   something   before  
   
  component.operation();  
   
  //do   something   after  
  }  
  }  
   
  //Facade  
  //非常实用的一U设计模式,我可以ؓ(f)外部提供感兴的接口  

   
  class   Obj1   {  
  public   void   ope1()   {}  
  public   void   ope2()   {}  
  }  
   
  class   Obj2   {  
  public   void   ope1()   {}  
  public   void   ope2()   {}  
  }  
   
  class   Facade   {  
  //我得C一个简z清晰的接口  
  public   void   fdMethod()   {  
  Obj1   obj1   =   new   Obj1();  
  Obj2   obj2   =   new   Obj2();  
   
  obj1.ope1();  
  obj2.ope2();  
    }  
  }  
   
  //Flyweight  
  //I?/span>


//**********行ؓ(f)型模?************  
   
  //Chain   of   Responsibility  
  //与Decorator的实现Ş式相cMQ? 
  //Decorator是在原来的方法之上进行添加功能,? 
  //Chain则是判断信号如果不是当前处理的则转交个下一个节点处? 
  //我可以用if分支来实现相同的效果Q但是不够灵z,链上的每个节Ҏ(gu)可以替换增加的,相对  
  //比较灉|Q我们可以设计接口实现对节点的增删操作,而实现更方便的效? 
  //q个是一个链状的l构Q有没有惌使用环状l构  

   
  interface   Handler   {  
  void   handRequest(int   signal);  
  }  
   
  class   CHandler1   implements   Handler   {  
  private   Handler   handler;  
   
  public   CHandler1(Handler   handler)   {  
  this.handler   =   handler;  
  }  
   
  public   void   handRequest(int   signal)   {  
  if   (signal   ==   1)   {  
  System.out.println("handle   signal   1");  
  }  
  else   {  
  handler.handRequest(signal);  
  }  
  }    
  }  
   
  class   CHandler2   implements   Handler   {  
  private   Handler   handler;  
   
  public   CHandler2(Handler   handler)   {  
  this.handler   =   handler;  
  }  
   
  public   void   handRequest(int   signal)   {  
  if   (signal   ==   2)   {  
  System.out.println("handle   signal   2");  
  }  
  else   {  
  handler.handRequest(signal);  
  }  
  }    
  }  
   
  class   CHandler3   implements   Handler   {  
  public   void   handRequest(int   signal)   {  
  if   (signal   ==   3)   {  
  System.out.println("handle   signal   3");  
  }  
  else   {  
  throw   new   Error("can't   handle   signal");  
  }  
  }    
  }  
   
  class   ChainClient   {  
  public   static   void   main(String[]   args)   {  
  Handler   h3   =   new   CHandler3();  
  Handler   h2   =   new   CHandler2(h3);  
  Handler   h1   =   new   CHandler1(h2);  
   
  h1.handRequest(2);  
  }  
  }  
   
  //Interpreter  
  //感觉跟Composite很类|只不q他分文l结W和非终l符  
   
  //Template   Method
 
   
  abstract   class   TemplateMethod   {  
  abstract   void   amd1();  
   
  abstract   void   amd2();  
   
  //此方法ؓ(f)一个Template   MethodҎ(gu)  
  public   void   tmd()   {  
  amd1();  
  amd2();  
  }  
  }  
   
  //State  
   
  //标准? 
  //状态和操作不应该耦合在一?/span>  
  class   Contexta   {  
  private   State   st;  
   
  public   Contexta(int   nst)   {  
  changeStfromNum(nst);  
  }  
   
  public   void   changeStfromNum(int   nst)   {  
  if   (nst   ==   1)   {  
  st   =   new   CStatea1();  
  }  
  else   if   (nst   ==   2)   {  
  st   =   new   CStatea2();  
  }  
   
  throw   new   Error("bad   state");  
  }  
   
  void   request()   {  
  st.handle(this);  
  }  
  }  
   
  interface   State   {  
  void   handle(Contexta   context);  
  }  
   
  class   CStatea1   implements   State   {  
  public   void   handle(Contexta   context)   {  
  System.out.println("state   1");  
  //也许在一个状态的处理q程中要改变状态,例如打开之后立即关闭q种效果  
  //context.changeStfromNum(2);
 
  }  
  }  
   
  class   CStatea2   implements   State   {  
  public   void   handle(Contexta   context)   {  
  System.out.println("state   2");  
  }  
  }  
   
  //工厂? 
  //Ҏ(gu)状态不通生成不同的state  
   
  //class   StateFactory   {  
  // public   static   State   getStateInstance(int   num)   {  
  // State   st   =   null;  
  //  
  // if   (num   ==   1)   {  
  // st   =   new   CStatea1();  
  // }  

  // else   if   (num   ==   2)   {  
  // st   =   new   CStatea2();  
  // }  
  //  
  // return   st;  
  // }  
  //}  

   
  //Strategy  
  //跟Bridge相类|是一U多态的表示  
   
  //Visitor  
  //双向引用Q用另外的一个类调用自己的方?讉K自己的数据结?
 
  interface   Visitor   {  
  void   visitElement(Elementd   element);  
  }  
   
  class   CVisitor   implements   Visitor   {  
  public   void   visitElement(Elementd   element)   {  
  element.operation();  
  }  
  }  
   
  interface   Elementd   {  
  void   accept(Visitor   visitor);  
   
  void   operation();  
  }  
   
  class   CElementd   implements   Elementd   {  
  public   void   accept(Visitor   visitor)   {  
  visitor.visitElement(this);  
  }  
   
  public   void   operation()   {  
  //实际的操作在q里  
  }  
  }  
   
  class   Clientd   {  
  public   static   void   main()   {  
  Elementd   elm   =   new   CElementd();  
  Visitor   vis   =   new   CVisitor();  
   
  vis.visitElement(elm);  
  }  
  }  
   
  //Iteraotr  
  //使用q代器对一个类的数据结构进行顺序P? 

   
  interface   Structure   {  
  interface   Iteratora   {  
  void   first();  
   
  boolean   hasElement();  
   
  Object   next();  
   
  }  
  }  
   
  class   Structure1   implements   Structure   {  
  Object[]   objs   =   new   Object[100];  
   
  //使用内部cLZ对Struture1的数据结构有完全的访问权  
  class   Iteratora1   implements   Iteratora   {  
  int   index   =   0;  
   
  public   void   first()   {  
  index   =   0;  
  }  
   
  public   boolean   hasElement()   {  
  return   index   <   100;  
  }    
   
  public   Object   next()   {  
  Object   obj   =   null;  
   
  if   (hasElement())   {  
  obj   =   objs[index];  
  index++;  
  }  
   
  return   obj;  
  }  
  }  
  }  
   
  //Meditor  
   
  class   A1   {  
  public   void   operation1()   {}  
  public   void   operation2()   {}  
  }  
   
  class   A2   {  
  public   void   operation1()   {}  
  public   void   operation2()   {}  
  }  
   
  class   Mediator   {  
  A1   a1;  
  A2   a2;  
   
  public   Mediator(A1   a1,   A2   a2)   {  
  this.a1   =   a1;  
  this.a2   =   a2;  
   
  }  
   
  //如果我想实现q个功能我可能会(x)把他攑֜A1? 
  //但是q样耦合大,我不惛_A1中出现A2对象的引用,  
  //所以我使用了Mediator作ؓ(f)中介  

  public   void   mmed1()   {  
  a1.operation1();  
  a2.operation2();  
  }  
   
  public   void   mmed2()   {  
  a2.operation1();  
  a1.operation2();  
  }  
  }  
   
  //Command  
  //我认为就是将Ҏ(gu)转换成了c?
 
   
  class   Receiver   {  
  public   void   action1()   {}  
   
  public   void   action2()   {}  
  }  
   
  interface   Command   {  
  void   Execute();  
  }  
   
  class   CCommand1   implements   Command   {  
  private   Receiver   receiver;  
   
  public   CCommand1(Receiver   receiver)   {  
  this.receiver   =   receiver;  
  }  
   
  public   void   Execute()   {  
  receiver.action1();  
  }  
  }  
   
  class   CCommand2   implements   Command   {  
  private   Receiver   receiver;  
   
  public   CCommand2(Receiver   receiver)   {  
  this.receiver   =   receiver;  
  }  
   
  public   void   Execute()   {  
  receiver.action2();  
  }  
  }  
   
  //Observer  
  //在这里看gq个模式没有什么用  
  //但是如果我有一个线E监控SubjectQ如果Subject的状? 
  //发生了变化,则更改Observer的状态,q出发一些操作,q样有实际的意义了  
  //Observer与Visitor有相似的地方Q都存在双向引用  
  //Subject可以注册很多Observer  

   
  interface   Subjectb   {  
  void   attach(Observer   observer);  
   
  void   detach(Observer   observer);  
   
  void   mynotify();  
   
  int   getState();  
   
  void   setState(int   state);  
  }  
   
  class   Subjectb1   implements   Subjectb   {  
  List   observers   =   new   ArrayList();  
  int   state;  
   
  public   void   attach(Observer   observer)   {  
  observers.add(observer);  
  }  
   
  public   void   detach(Observer   observer)   {  
  observers.remove(observer);  
  }  
   
  public   void   mynotify()   {  
  Observer   observer   =   null;  
  Iterator   it   =   observers.iterator();  
   
  while   (it.hasNext())   {  
  observer   =   (Observer)   it.next();  
  observer.Update();  
  }  
  }  
   
  public   int   getState()   {  
  return   state;  
  }  
   
  public   void   setState(int   state)   {  
  this.state   =   state;  
  }  
  }  
   
  interface   Observer   {  
  void   Update();  
  }  
   
  class   Observer1   implements   Observer   {  
  Subjectb   subject;  
  int   state;  
   
  public   Observer1(Subjectb   subject)   {  
  this.subject   =   subject;  
  }  
   
  public   void   Update()   {  
  this.state   =   subject.getState();  
  }  
   
  public   void   operation()   {  
  //一些基于state的操? 
  }  
  }  
   
  //Memento  
  //感觉此模式没有什么大?/span>  
   
  class   Memento   {  
  int   state;  
   
  public   int   getState()   {  
  return   state;  
  }  
   
  public   void   setState(int   state)   {  
  this.state   =   state;  
  }  
  }  
   
  class   Originator   {  
  int   state;  
   
  public   void   setMemento(Memento   memento)   {  
  state   =   memento.getState();  
  }  
   
  public   Memento   createMemento()   {  
  Memento   memento   =   new   Memento();  
  memento.setState(1);  
  return   memento;  
  }  
   
  public   int   getState()   {  
  return   state;  
  }  
   
  public   void   setState(int   state)   {  
  this.state   =   state;  
  }  
  }  
   
  class   careTaker   {  
  Memento   memento;  
   
  public   void   saverMemento(Memento   memento)   {  
  this.memento   =   memento;  
  }  
   
  public   Memento   retrieveMemento()   {  
  return   memento;  
  }  
  }  
   
  //E序最l还是顺序执行的Q是׃通部分的操作拼接h? 
  //不同类的代码拼接v来是通过引用实现的,有了引用我就  
  //相当于有了一定访问数据结构和Ҏ(gu)的能力,q与写在cd? 
  //差不多,例如我想一个类中的一个方法抽d去,因ؓ(f)q个Ҏ(gu)依赖与此cȝ数据和其他方? 
  //直接代码移走是不行的,但如果我们拥有了此类对象的引用,则与写在此类  
  //内部无异Q所以我们拥有了引用可以将此方法移?
 
  public   class   tt1   {  
  public   static   void   main(String[]   args)   {  
  }  
  }


里面有很多不错的设计思想.


henry1451 2008-05-05 19:55 发表评论
]]>
资源文g的{?/title><link>http://www.aygfsteel.com/henry1451/articles/198249.html</link><dc:creator>henry1451</dc:creator><author>henry1451</author><pubDate>Sun, 04 May 2008 12:43:00 GMT</pubDate><guid>http://www.aygfsteel.com/henry1451/articles/198249.html</guid><wfw:comment>http://www.aygfsteel.com/henry1451/comments/198249.html</wfw:comment><comments>http://www.aygfsteel.com/henry1451/articles/198249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/henry1451/comments/commentRss/198249.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/henry1451/services/trackbacks/198249.html</trackback:ping><description><![CDATA[在JDK自带的工具中有一个native2asciiE序专门用来q行资源文g的{?该工具位于JDK安装目录下的bin目录中。例如,当需要把一个名为a.txt的文件{为ApplicationResource_zh_CN.propertiesq样的资源文件时Q可以采用下面的命o(h)Q?br /> <div id="wmqeeuq" class="UBBPanel"> <div id="wmqeeuq" class="UBBTitle"><img style="margin: 0px 2px -3px 0px" alt="E序代码" src="http://xhl.cqwu.net/images/code.gif" /> E序代码</div> <div id="wmqeeuq" class="UBBContent">native2ascii -encoding GB2312 a.txt ApplicationResource_zh_CN.properties</div> </div> <img src ="http://www.aygfsteel.com/henry1451/aggbug/198249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/henry1451/" target="_blank">henry1451</a> 2008-05-04 20:43 <a href="http://www.aygfsteel.com/henry1451/articles/198249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ThreadLocal介与使用http://www.aygfsteel.com/henry1451/articles/198248.htmlhenry1451henry1451Sun, 04 May 2008 12:37:00 GMThttp://www.aygfsteel.com/henry1451/articles/198248.htmlhttp://www.aygfsteel.com/henry1451/comments/198248.htmlhttp://www.aygfsteel.com/henry1451/articles/198248.html#Feedback0http://www.aygfsteel.com/henry1451/comments/commentRss/198248.htmlhttp://www.aygfsteel.com/henry1451/services/trackbacks/198248.html
什么是ThreadLocal
ThreadLocalq不能从字面上理解ؓ(f)U程的本地实现版本,因ؓ(f)它ƈ不是一个线E,而是ThreadLocal VariableQ线E局部变量)。它的功能非常简单,是为每一个用该变量的线E都提供一个变量值的副本Q得每一个线E都可以独立地改变自q副本Q而不?x)和其他U程珠副本冲H。从U程的角度看Q就好像每一个线E都完全拥有该变量?br /> 首先看看ThreadLocal的方法:(x)
1、get()
  q回当前U程的线E局部变量的副本Q当W一ơ调用这个方法时?x)自动创建ƈ且初始化一个线E局部变量的副本?br /> 2、initialValue()
  q回该线E的U程局部变量的当前U程的初始|q个Ҏ(gu)只在W一ơ调用get()Ҏ(gu)的时候被调用一ơ。如果在调用get()Ҏ(gu)之前已经调用了set()Ҏ(gu)Q那么这个方法将不会(x)被调用?br /> q个Ҏ(gu)是一个protected的方法,不能直接调用该方法,只有在其子类中将该方法重写才能改变它的行为。在默认情况下,该方法的q回gؓ(f)null?br /> 3、set()
  讄当前U程的线E局部变量副本的倹{大多数的应用程序都不需要调用这个方法,可以通过initialValue()Ҏ(gu)来设|当前线E局部变量的倹{?br /> 4、remove()
  U除当前U程局部变量的倹{这样做的目的是可以降低当前U程的存储空间的使用量,q是Java1.5的新增方法?br />
ThreadLocal的?/strong>
ThreadLocal的用方法有两种Q一U方法是自己实现ThreadLocal的子c,q写initialValue()Ҏ(gu)。另一U方法是定义一个表态的ThreadLocal实例Q通过使用set()Ҏ(gu)来初始化q个U程局部变量的倹{?br />   如果希望U程局部变量初始化的时候就h|那么需要自己实现ThreadLocal的子cdƈ重写该方法,通常使用一个内部匿名类对ThreadLocalq行子类化。例如在下面的例子中QSerialNumcMؓ(f)每一个类分配一个序P(x)
E序代码 E序代码
public class SerialNum
{
 private static int nextSerialNum=0;
 private static ThreadLocal serialNum=new ThreadLocal()
 {
  protected synchronized Object initialValue()
  {
   return new Integer(nextSerialNum++);
  }
 };
 public static int get()
 {
  return ((Integer)(serialNum.get())).intValue();
 }
}

同样Q也可以不采用实现ThreadLocal子类的方法来实现同样的功能,如下所C:(x)
E序代码 E序代码
public class SerialNum1
{
 private static int nextSerialNum=0;
 private static ThreadLocal serialNum=new ThreadLocal();
 public static int get()
 {
  if(serialNum.get()==null)
   serialNum.set(new Integer(nextSerialNum++));
  return ((Integer)(serialNum.get())).intValue();
 }

}

  SerialNumcȝ使用非常单,因ؓ(f)get()Ҏ(gu)是static的,所以在需要获取当前线E的序号Ӟ单地调用int serial=SerialNum.get();卛_?br />   在线E是zdq且ThreadLocal对象是可讉KӞ该线E就持有一个到该线E局部变量副本的隐含引用。当该线E运行结束后Q该U程拥有的所有线E局部变量的副本都将失效Qƈ{待垃圾攉器收集?

  ThreadLocal 几点作用:
1)可以启到cM单态类的作?实际上是要某变量达到线E安全时,可以使用q种方式;
2)可以l合HttpServletRequest,HttpServletResponse,ServletContext{来实现使用q行时数?

在用ThreadLocal 时一般是使用get()Ҏ(gu),但在使用q个Ҏ(gu)??x)先调用set()Ҏ(gu),具体的用途可以在创徏ThreadLocal 变量时指?也可?br />
重写set()Ҏ(gu),如果不想讑֮set()Ҏ(gu),可以在创建ThreadLocal 变量时指?如下:

private static ThreadLocal currentUser = new ThreadLocal(){
         
protected synchronized Object initialValue() {
                 
return new User();
         }

     }
;

或者?public static void setCurrentUser(User user) { currentUser.set(user); }手工lThreadLocal 变量赋?user),
要获得User对象?可以使用 User u = (User)currentUser.get();即直接调用get()Ҏ(gu),来返回set()Ҏ(gu)所讄的?也可以不?br /> 此方?而直接在定义变量?重写initialValue()Ҏ(gu),此方法返回所要设|的值或对象),q里是User对象,然后调用Usercȝ其他Ҏ(gu).


 

henry1451 2008-05-04 20:37 发表评论
]]>
վ֩ģ壺 | ½| | ɶ| | | | | | | ͸| ԭ| ³ľ| | | | ɽ| Դ| ʡ| | | ͨ| ˫| | ½| ʷ| | Ͽ| Դ| ƽ| | ʻ| ͬ| ӻ| ˶| ʡ| | ¤| | ݰ| |