﻿<?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-我的漫漫程序之旅-文章分类-J2SE</title><link>http://www.blogjava.net/supercrsky/category/27532.html</link><description>专注于JavaWeb开发</description><language>zh-cn</language><lastBuildDate>Fri, 13 Jan 2012 14:25:42 GMT</lastBuildDate><pubDate>Fri, 13 Jan 2012 14:25:42 GMT</pubDate><ttl>60</ttl><item><title>利用jSMSEngine开源包进行短信的收发</title><link>http://www.blogjava.net/supercrsky/articles/368452.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 13 Jan 2012 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/368452.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/368452.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/368452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/368452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/368452.html</trackback:ping><description><![CDATA[<div><span style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; text-indent: 28px; "><span style="font-family: 'Times New Roman'; ">公司项目中要用到短信猫进行收发短信，在网上找到一个开源的jSMSEngine。经测试jSMSEngine<br />可以实现项目需求。<br /><br />jSMSEngine</span></span><span style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; text-indent: 28px; ">开源包可以利用</span><span style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; text-indent: 28px; "><span style="font-family: 'Times New Roman'; ">GSM&nbsp;Modem</span></span><span style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; text-indent: 28px; ">或带有红外线、蓝牙、数据线的手机与电脑连通，收发短信。<br />相应的类库下载我已经打包好了<br /><br /><span style="font-family: 'Times New Roman'; ">jSMSEngine开源项目主页<br /></span>http://sourceforge.net/projects/jsmsengine/<br /><br /><a href="https://skydrive.live.com/redir.aspx?cid=39cce615c2e5d86b&amp;resid=39CCE615C2E5D86B!353&amp;parid=39CCE615C2E5D86B!352&amp;authkey=!AFRK1a1wurf9mXU" style="color: #333333; text-decoration: none; ">相关类库下载</a><br /><br />让我们先来配置开发环境环境。<br /><br /><span style="color: #3333ff; "><strong>1． &nbsp; &nbsp;复制comm.jar、jSMSEngine.jar到jre\lib\ext文件夹下，或把开发包添加到开发环境中。<br />2． &nbsp; &nbsp;复制javax.comm.properties到\jre\lib目录下。<br />3． &nbsp; &nbsp;复制win32com.dll到\jre\bin目录下。</strong><br /></span><br />用如果是用Eclipse开发的话看看Install JRE里面的JRE路径，用那个就可以了。<br /><br /><strong>如果不用开发工具的话jre就是你在系统环境里配置的JAVA_HOME 的路径。<br /></strong><br />以上工作是必须的，很重要。到这时环境已经准备好了。<br /><br /><br />在设备管理器下，看看手机占用的哪个com端口，更改程序里面的com端口和比特率两个参数，找一台带数据线的手机试试，最好不带内存卡的那种。<br /><br />发送短信代码:<br /></span><div bg_java"="" style="background-color: #ffffff; width: 687px; color: #333333; line-height: 26px; text-align: left; "><div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.LinkedList;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.jsmsengine.CIncomingMessage;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.jsmsengine.CMessage;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.jsmsengine.COutgoingMessage;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.jsmsengine.CService;<br /><br />@SuppressWarnings(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">unchecked</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; ">**<br />&nbsp;*&nbsp;收发短信的服务类<br />&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MsgService<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;CService&nbsp;cs&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init(String&nbsp;port,&nbsp;Integer&nbsp;fm)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;指定端口号和频率</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;CService(port,&nbsp;fm);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;发送短信<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;phone<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;手机号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;info<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;短信内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;sendmsg(String&nbsp;phone,&nbsp;String&nbsp;info)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">正在发送短信</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化连接</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.initialize();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置jSMSEngine服务的缓存</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.setCacheDir(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;连接</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;status&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cs.connect();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;连接成功(可以是GSM&nbsp;Modem、带有红外线、蓝牙、数据线的手机)</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(status&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;CService.ERR_OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.setOperationMode(CService.MODE_PDU);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.setSmscNumber(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COutgoingMessage&nbsp;msg&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;COutgoingMessage(phone,&nbsp;info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.setMessageEncoding(CMessage.MESSAGE_ENCODING_UNICODE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(cs.sendMessage(msg)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;CService.ERR_OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">给</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;phone&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">发送短信成功!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">给</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;phone&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">发送短信失败!</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;断开连接</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.disconnect();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">连接设备失败,&nbsp;异常:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;status);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; ">*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;读取短信内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;readmsg()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">存入短信集合</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedList&nbsp;msgList&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;LinkedList();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">读取短信中。。。。</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.initialize();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.setCacheDir(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;连接设备</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;status&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cs.connect();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(status&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;CService.ERR_OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.setOperationMode(CService.MODE_PDU);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(cs.readMessages(msgList,&nbsp;CIncomingMessage.CLASS_ALL)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;CService.ERR_OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;msgList.size();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CIncomingMessage&nbsp;msg&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(CIncomingMessage)&nbsp;msgList.get(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">输出短信文本</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(msg.getText());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">删除短信</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.deleteMessage(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;断开连接</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.disconnect();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">设备连接失败：</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;status);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">com4</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">9600</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendmsg(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">15800000000</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">这是一个测试程序</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readmsg();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div></div></div></div><br style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; " /><span style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; background-color: #ffffff; ">ok，测试成功！</span></div><img src ="http://www.blogjava.net/supercrsky/aggbug/368452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2012-01-13 13:40 <a href="http://www.blogjava.net/supercrsky/articles/368452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK中的URLConnection参数详解</title><link>http://www.blogjava.net/supercrsky/articles/247449.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 20 Dec 2008 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/247449.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/247449.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/247449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/247449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/247449.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS">针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题，是以FAQ的方式来解决的，而且比较零散，现在对这个类的使用就本人在项目中的使用经验做如下总结： <br />
1:&gt; URL请求的类别: <br />
分为二类,GET与POST请求。二者的区别在于： <br />
&nbsp;&nbsp;&nbsp;&nbsp; a:) get请求可以获取静态页面，也可以把参数放在URL字串后面，传递给servlet， <br />
&nbsp;&nbsp;&nbsp;&nbsp; b:) post与get的不同之处在于post的参数不是放在URL字串里面，而是放在http请求的正文内。 <br />
2:&gt; URLConnection的对象问题: <br />
URLConnection的对象,如下代码示例: <br />
<br />
// 下面的index.jsp由&lt;servlet-mapping&gt;映射到 <br />
// 一个Servlet(com.quantanetwork.getClientDataServlet) <br />
// 该Servlet的注意点下边会提到 <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">URL&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;URL(</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8080/TestHttpURLConnectionPro/index.jsp</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />URLConnection&nbsp;rulConnection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;url.openConnection();</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;此处的urlConnection对象实际上是根据URL的&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;请求协议(此处是http)生成的URLConnection类&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;的子类HttpURLConnection,故此处最好将其转化&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;为HttpURLConnection类型的对象,以便用到&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;HttpURLConnection更多的API.如下:&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />HttpURLConnection&nbsp;httpUrlConnection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HttpURLConnection)&nbsp;rulConnection;&nbsp;</span></div>
<br />
<br />
3:&gt; HttpURLConnection对象参数问题 <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设置是否向httpUrlConnection输出，因为这个是post请求，参数要放在&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;http正文内，因此需要设为true,&nbsp;默认情况下是false;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">httpUrlConnection.setDoOutput(</span><span style="color: #0000ff">true</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设置是否从httpUrlConnection读入，默认情况下是true;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">httpUrlConnection.setDoInput(</span><span style="color: #0000ff">true</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Post&nbsp;请求不能使用缓存&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">httpUrlConnection.setUseCaches(</span><span style="color: #0000ff">false</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设定传送的内容类型是可序列化的java对象&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;(如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">httpUrlConnection.setRequestProperty(</span><span style="color: #000000">"</span><span style="color: #000000">Content-type</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">application/x-java-serialized-object</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设定请求的方法为"POST"，默认是GET&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">httpUrlConnection.setRequestMethod(</span><span style="color: #000000">"</span><span style="color: #000000">POST</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;连接，从上述第2条中url.openConnection()至此的配置必须要在connect之前完成，&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpUrlConnection.connect();&nbsp;</span></div>
<br />
<br />
4:&gt;&nbsp; HttpURLConnection连接问题： <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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;此处getOutputStream会隐含的进行connect(即：如同调用上面的connect()方法，&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;所以在开发中不调用上述的connect()也可以)。&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">OutputStream&nbsp;outStrm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;httpUrlConnection.getOutputStream();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
5:&gt; HttpURLConnection写数据与发送数据问题： <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;现在通过输出流对象构建对象输出流对象，以实现输出可序列化的对象。&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">ObjectOutputStream&nbsp;objOutputStrm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObjectOutputStream(outStrm);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;向对象输出流写出数据，这些数据将存到内存缓冲区中&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">objOutputStrm.writeObject(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(</span><span style="color: #000000">"</span><span style="color: #000000">我是测试数据</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;刷新对象输出流，将任何字节都写入潜在的流中（些处为ObjectOutputStream）&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">objOutputStm.flush();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;关闭流对象。此时，不能再向对象输出流写入任何数据，先前写入的数据存在于内存缓冲区中,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">objOutputStm.close();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;调用HttpURLConnection连接对象的getInputStream()函数,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">InputStream&nbsp;inStrm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;httpConn.getInputStream();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&lt;===注意，实际发送请求的代码段就在这里&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;上边的httpConn.getInputStream()方法已调用,本次HTTP请求已结束,下边向对象输出流的输出已无意义，&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;既使对象输出流没有调用close()方法，下边的操作也不会向对象输出流写入任何数据.&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;因此，要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;重新发送数据(至于是否不用重新这些操作需要再研究)&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">objOutputStm.writeObject(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(</span><span style="color: #000000">""</span><span style="color: #000000">));&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />httpConn.getInputStream();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
总结：a:) HttpURLConnection的connect()函数，实际上只是建立了一个与服务器的tcp连接，并没有实际发送http请求。 <br />
&nbsp;&nbsp;&nbsp; 无论是post还是get，http请求实际上直到HttpURLConnection的getInputStream()这个函数里面才正式发送出去。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b:) 在用POST方式发送URL请求时，URL请求参数的设定顺序是重中之重， <br />
&nbsp;&nbsp;&nbsp; 对connection对象的一切配置（那一堆set函数） <br />
&nbsp;&nbsp;&nbsp; 都必须要在connect()函数执行之前完成。而对outputStream的写操作，又必须要在inputStream的读操作之前。 <br />
&nbsp;&nbsp;&nbsp; 这些顺序实际上是由http请求的格式决定的。 <br />
&nbsp;&nbsp;&nbsp; 如果inputStream读操作在outputStream的写操作之前，会抛出例外： <br />
&nbsp;&nbsp;&nbsp; java.net.ProtocolException: Cannot write output after reading input....... <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c:) http请求实际上由两部分组成， <br />
&nbsp;&nbsp;&nbsp; 一个是http头，所有关于此次http请求的配置都在http头里面定义， <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个是正文content。 <br />
&nbsp;&nbsp;&nbsp; connect()函数会根据HttpURLConnection对象的配置值生成http头部信息，因此在调用connect函数之前， <br />
&nbsp;&nbsp;&nbsp; 就必须把所有的配置准备好。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d:) 在http头后面紧跟着的是http请求的正文，正文的内容是通过outputStream流写入的， <br />
&nbsp;&nbsp;&nbsp; 实际上outputStream不是一个网络流，充其量是个字符串流，往里面写入的东西不会立即发送到网络， <br />
&nbsp;&nbsp;&nbsp; 而是存在于内存缓冲区中，待outputStream流关闭时，根据输入的内容生成http正文。 <br />
&nbsp;&nbsp;&nbsp; 至此，http请求的东西已经全部准备就绪。在getInputStream()函数调用的时候，就会把准备好的http请求 <br />
&nbsp;&nbsp;&nbsp; 正式发送到服务器了，然后返回一个输入流，用于读取服务器对于此次http请求的返回信息。由于http <br />
&nbsp;&nbsp;&nbsp; 请求在getInputStream的时候已经发送出去了（包括http头和正文），因此在getInputStream()函数 <br />
&nbsp;&nbsp;&nbsp; 之后对connection对象进行设置（对http头的信息进行修改）或者写入outputStream（对正文进行修改） <br />
&nbsp;&nbsp;&nbsp; 都是没有意义的了，执行这些操作会导致异常的发生。 <br />
<br />
6:&gt; Servlet端的开发注意点： <br />
a:) 对于客户端发送的POST类型的HTTP请求，Servlet必须实现doPost方法，而不能用doGet方法。 <br />
b:) 用HttpServletRequest的getInputStream()方法取得InputStream的对象，比如： <br />
&nbsp;&nbsp;&nbsp;&nbsp; InputStream inStream = httpRequest.getInputStream(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; 现在调用inStream.available()（该方法用于&#8220;返回此输入流下一个方法调用可以不受阻塞地 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 从此输入流读取（或跳过）的估计字节数&#8221;）时，永远都反回0。试图使用此方法的返回值分配缓冲区， <br />
&nbsp;&nbsp;&nbsp;&nbsp; 以保存此流所有数据的做法是不正确的。那么，现在的解决办法是 <br />
&nbsp;&nbsp;&nbsp;&nbsp; Servlet这一端用如下实现： <br />
&nbsp;&nbsp;&nbsp;&nbsp; InputStream inStream = httpRequest.getInputStream(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; ObjectInputStream objInStream = new ObjectInputStream(inStream); <br />
&nbsp;&nbsp;&nbsp;&nbsp; Object obj = objInStream.readObject(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; // 做后续的处理 <br />
&nbsp;&nbsp;&nbsp;&nbsp; // 。。。。。。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; // 。。。 。。。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 而客户端，无论是否发送实际数据都要写入一个对象（那怕这个对象不用），如： <br />
&nbsp;&nbsp;&nbsp;&nbsp; ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); <br />
&nbsp;&nbsp;&nbsp;&nbsp; objOutputStrm.writeObject(new String("")); // 这里发送一个空数据 <br />
&nbsp;&nbsp;&nbsp;&nbsp; // 甚至可以发一个null对象，服务端取到后再做判断处理。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; objOutputStrm.writeObject(null); <br />
&nbsp;&nbsp;&nbsp;&nbsp; objOutputStrm.flush(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; objOutputStrm.close(); <br />
<br />
注意:上述在创建对象输出流ObjectOutputStream时,如果将从HttpServletRequest取得的输入流 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (即:new ObjectOutputStream(outStrm)中的outStrm)包装在BufferedOutputStream流里面, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 则必须有objOutputStrm.flush();这一句,以便将流信息刷入缓冲输出流.如下: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectOutputStream objOutputStrm = new ObjectOutputStream(new BufferedOutputStream(outStrm)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objOutputStrm.writeObject(null); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objOutputStrm.flush(); // &lt;======此处必须要有. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objOutputStrm.close(); <br />
<br />
<br />
<br />
</span>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">HttpURLConnection是基于HTTP协议的，其底层通过socket通信实现。如果不设置超时（timeout），在网络异常的情况下，可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时：<br />
System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);<br />
System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);<br />
</span></p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">其中： sun.net.client.defaultConnectTimeout：连接主机的超时时间（单位：毫秒）<br />
sun.net.client.defaultReadTimeout：从主机读取数据的超时时间（单位：毫秒） </span></p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">例如：<br />
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");<br />
System.setProperty("sun.net.client.defaultReadTime </span></p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">Java中可以使用HttpURLConnection来请求WEB资源。<br />
HttpURLConnection对象不能直接构造，需要通过URL.openConnection()来获得HttpURLConnection对象，示例代码如下：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">String&nbsp;szUrl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://www.ee2ee.com/</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />URL&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;URL(szUrl);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />HttpURLConnection&nbsp;urlCon&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HttpURLConnection)url.openConnection();&nbsp;</span></div>
<p style="line-height: 150%"></span>&nbsp;</p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">HttpURLConnection是基于HTTP协议的，其底层通过socket通信实现。如果不设置超时（timeout），在网络异常的情况下，可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时：<br />
System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);<br />
System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);<br />
</span></p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">其中： sun.net.client.defaultConnectTimeout：连接主机的超时时间（单位：毫秒）<br />
sun.net.client.defaultReadTimeout：从主机读取数据的超时时间（单位：毫秒） </span></p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">例如：<br />
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");<br />
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); </span></p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">JDK 1.5以前的版本，只能通过设置这两个系统属性来控制网络超时。在1.5中，还可以使用HttpURLConnection的父类URLConnection的以下两个方法：<br />
setConnectTimeout：设置连接主机超时（单位：毫秒）<br />
setReadTimeout：设置从主机读取数据超时（单位：毫秒） </span></p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">例如：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">HttpURLConnection&nbsp;urlCon&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HttpURLConnection)url.openConnection();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />urlCon.setConnectTimeout(</span><span style="color: #000000">30000</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />urlCon.setReadTimeout(</span><span style="color: #000000">30000</span><span style="color: #000000">);&nbsp;</span></div>
<p style="line-height: 150%"></span>&nbsp;</p>
<p style="line-height: 150%"><span style="font-family: Comic Sans MS">需要注意的是，笔者在JDK1.4.2环境下，发现在设置了defaultReadTimeout的情况下，如果发生网络超时，HttpURLConnection会自动重新提交一次请求，出现一次请求调用，请求服务器两次的问题（Trouble）。我认为这是JDK1.4.2的一个bug。在JDK1.5.0中，此问题已得到解决，不存在自动重发现象。out", "30000"); </span></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/247449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-12-20 11:28 <a href="http://www.blogjava.net/supercrsky/articles/247449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络数据流的java处理</title><link>http://www.blogjava.net/supercrsky/articles/247447.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 20 Dec 2008 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/247447.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/247447.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/247447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/247447.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/247447.html</trackback:ping><description><![CDATA[<p><span style="font-family: Comic Sans MS">前言：java程序要处理很多的网络数据，网络数据发送和接收以及数据流的处理是java程序要特别关注的方面，随着java的发展，这些方法也越来越得到重视和加强。本文从几个方面解释了java正确处理网络数据流的要素，这些也是java程序员必须了解的基本的知识。</span></p>
<p><a name="1"><span class="atitle"><span style="font-family: Comic Sans MS">1：庞大的java流处理</span></span></a></p>
<p><span style="font-family: Comic Sans MS">首先，之所以说java流的庞大，是因为java中的流处理比其他语言的流处理在内容上多的多。</span></p>
<p><span style="font-family: Comic Sans MS">java流在处理上分为字符流和字节流。字符流处理的单元为2个字节的Unicode字符，分别操作字符、字符数组或字符串，而字节流处理单元为1个字节，操作字节和字节数组。</span></p>
<p><span style="font-family: Comic Sans MS">Java内用Unicode编码存储字符，字符流处理类负责将外部的其他编码的字符流和java内Unicode字符流之间的转换。而类InputStreamReader和OutputStreamWriter处理字符流和字节流的转换。字符流（一次可以处理一个缓冲区）一次操作比字节流（一次一个字节）效率高。</span></p>
<p><span style="font-family: Comic Sans MS">对应不同的流，需要不同的流构建器或流过滤实现。java目前依然在逐渐增加其流处理方法，虽然java类库的创作人员可以列举出很多理由来说明这要做的优点，但我还是觉得java开始变得向其他语言一样复杂起来。</span></p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><br />
            <span style="font-family: Comic Sans MS"><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></span></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><span style="font-family: Comic Sans MS"><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            </span></td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="2"><span class="atitle"><span style="font-family: Comic Sans MS">2：网络数据流的收发</span></span></a></p>
<p><span style="font-family: Comic Sans MS">java对网络数据的发送和接收处理，也借用了一般流处理的方法。我们知道，在几乎其他所有语言中，网络数据的收发在利用类似send（或write）和recv（或read）的方法时并没有明显的流处理。但是java和这些语言的收发方法有较大区别，要借助流才可以完成：</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"><span style="font-family: Comic Sans MS">.......
            sock = new Socket(addr, port);
            OutputStream os = sock.getOutputStream();
            InputStream is = sock.getInputStream();
            os.write(byte[] b);
            is.read(byte[] b);</span></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><span style="font-family: Comic Sans MS">这些方法总给人一种不太舒服的感觉。不过从Jdk1.4开始弥补了这一点。JDK1.4中新增加了新的I/O流处理，在缓冲区管理、可伸缩网络和文件IO、字符集支持、正规表达式匹配方面做了新的处理。其中缓冲区管理和通道（Channel）概念则是对网络数据流的收发处理支持的强化。缓冲区管理中ByteBuffer类更好的支持了网络数据流处理。在网络连接中，通道代表了sockets的连接。基于这些新的IO处理，以上代码可以改写为：</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"><span style="font-family: Comic Sans MS">......
            ByteBuffer bytebuf = ByteBuffer.allocate(2048); // 创建一个指定大小的缓冲区
            InetSocketAddress isa = new InetSocketAddress(hostname,port);
            sc = SocketChannel.open(); // 建立一个socket通道
            sc.connect( isa);  // 建立一个socket连接
            &#8230;
            sc.write(bytebuf); // 发送数据
            &#8230;
            sc.read(bytebuf); // 接收数据
            这样的程序似乎要流畅的多。</span></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><span style="font-family: Comic Sans MS"><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br />
            <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></span></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><span style="font-family: Comic Sans MS"><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            </span>
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><span style="font-family: Comic Sans MS"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br />
                        </span></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/l-datanet/#main" cmimpressionsent="1"><strong><span style="font-family: Comic Sans MS">回页首</span></strong></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="3"><span class="atitle"><span style="font-family: Comic Sans MS">3：java对网络数据流的处理</span></span></a></p>
<p><span style="font-family: Comic Sans MS">java程序对网络数据流的处理要关注四个基本方面：数据流的编码，字节顺序，数据格式对应和取数。这是四个不同的问题，但是都影响到网络数据的正确接收。</span></p>
<p><a name="N10065"><span class="smalltitle"><span style="font-family: Comic Sans MS">3.1 网络数据流的解码和编码</span></span></a></p>
<p><span style="font-family: Comic Sans MS">网络数据流的编码和解码主要针对流中出现的字符串。网络数据流中的字符串均为原始的字节流形式。</span></p>
<p><span style="font-family: Comic Sans MS">要正确接收网络数据流中的字符串，首先要知道该字符串的编码方案。然后才可以调用解码的方法获得java能够认识的Unicode编码字符串。可以用如下代码处理网络数据流中字符串的编码和解码：</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"><span style="font-family: Comic Sans MS">// 获得编码对象，即网络对等方的认识的字符串编码。
            Charset charset = Charset.forName("--?"); // --?为对等方的编码名，java必须支持。
            // 生成编码器和解码器对象。
            CharsetDecoder decoder = charset.newDecoder();
            CharsetEncoder encoder = charset.newEncoder();
            .......
            // 对从网络数据流中获得的字节流解码取得java字符串
            CharBuffer charbuf = decoder.decode(bytebuff);
            .......
            // 将java字符串编码成指定编码的字节流，以便网络发送
            Bytebuff  bytebuff = encoder.encode(CharBuffer.wrap("Test String");
            .......
            </span></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><a name="N10075"><span class="smalltitle"><span style="font-family: Comic Sans MS">3.2 网络数据流的字节顺序</span></span></a></p>
<p><span style="font-family: Comic Sans MS">目前的字节顺序有两类：BIG_ENGIAN和LITTLE_ENDIAN。各个平台所支持的字节序不同，例如AIX、Tru64Unix、Windows等操作系统平台采用LITTLE_ENDIAN字节序，Solaris等操作系统平台采用BIG_ENGIAN。Java自身采用的是BIG_ENGIAN字节序，当java和运行在其他平台上的其他语言编写的通信程序通信时，则必须考虑到数据的字节序。</span></p>
<p><span style="font-family: Comic Sans MS">Jkd1.4新增加的包NIO中的类ByteOrder则带来了一定的方便。针对从网络数据流的字节序，我们只要增加一行就可以轻松的处理字节序了： <br />
</span><code><span style="font-family: Comic Sans MS"><span class="boldcode">bytebuf.order(ByteOrder.LITTLE_ENDIAN); //按照LITTLE_ENDIAN字节序收发数据</span> <br />
sc.read(bytebuf); // 接收数据 </span></code></p>
<p><span style="font-family: Comic Sans MS">上面的方法虽然简化了我们的编程，但没有真正处理好分布式应用的网络数据字节序问题。例如，java同时和在Tru64Unix、Solaris平台上的应用通信时，上述方法就不能解决问题。因为同一数据包，可能无法判断其字节序是那一种。此时要求网络数据包内携带附加的字节序信息显然是不现实的。这种情况下，java语言需要提供对XDR（外部数据表达）的支持，目前XDR已经为事实上的网络数据流的标准格式，分布式应用的网络数据流基本都遵循了这种格式，如果java语言提供了对XDR的支持，就可以解决通用性的问题。对于分布式应用中的网络数据流的处理就无需再根据其平台判断其字节序，只要按照XDR格式进行处理就可以了。</span></p>
<p><a name="N1008F"><span class="smalltitle"><span style="font-family: Comic Sans MS">3.3 网络数据流中数据格式的对应</span></span></a></p>
<p><span style="font-family: Comic Sans MS">C/C++语言编写的网络程序中一般采用数据结构的缓冲区发送数据，在java端接收数据时，会出现一些因数据组织引起的问题：</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"><span style="font-family: Comic Sans MS">如结构 typedef struct {
            int   id;
            char  name[32];
            short  val;
            float  fval;
            } SendData</span></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><span style="font-family: Comic Sans MS">在32位操作系统中，它的大小并不是42，而是44！数据的组织如下图所示：</span></p>
<br />
<span style="font-family: Comic Sans MS"><img height="140" alt="" src="http://www.ibm.com/developerworks/cn/java/l-datanet/image002.jpg" width="250" /> <br />
</span>
<p><span style="font-family: Comic Sans MS">当通过网络发送到客户端时，客户端也接收到44个字节，如果按照顺序依次取相应的值，则会发现最后取得的浮点值不正确。这是因为把短整型数据后没有意义的两位作为了浮点数中的其中两位。如果想正确接收该数据，则必须跳过短整型数据后没有意义的两位，再取浮点值。</span></p>
<p><span style="font-family: Comic Sans MS">而如果以上的结构变为：</span></p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"><span style="font-family: Comic Sans MS">typedef struct {
            int   id;
            char  name[32];
            float  fval;
            short  val;
            }</span></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<span style="font-family: Comic Sans MS">则java端按照顺序依次接收数据就不会发生问题。 </span>
<p><span style="font-family: Comic Sans MS">所以，在编写程序时，对数据的正确组织也是非常重要的。</span></p>
<p><a name="N100BC"><span class="smalltitle"><span style="font-family: Comic Sans MS">3.4从网络数据流中取得需要的数据</span></span></a></p>
<p><span style="font-family: Comic Sans MS">在C/C++的Socket编程时，采用数据结构收发数据很方便，特别是接收数据时，可以由数据结构的数据类型自动获得网络数据流相应的数据。但是在java中，目前我们必须对流进行分析，逐一的取得自己所需要的数据，并且由于网络数据流是原始的数据流，还要根据程序所需要的数据类型对网络数据流进行解码处理。发送网络数据时同样需要对数据进行封装。这个过程也增加了java程序的烦琐性。例如上述结构，要用如下代码获取相应数据：</span></p>
<ol>
    <li><span style="font-family: Comic Sans MS">int id = bytebuf.getInt(); // 获得整数型值 </span>
    <li><span style="font-family: Comic Sans MS">int limit = bytebuf.limit(); // 获得字节缓冲区的限值 </span>
    <li><span style="font-family: Comic Sans MS">bytebuf.limit(36); // 设置字节缓冲区的限值，为字符串后面的第一个字节位置 </span>
    <li><span style="font-family: Comic Sans MS">CharBuffer charbuf = decoder.decode(bytebuf); // 解码获得字符串 </span>
    <li><span style="font-family: Comic Sans MS">Bytebuf.limit(limit); // 恢复字节缓冲区原来的限值 </span>
    <li><span style="font-family: Comic Sans MS">float fval = bytebuf.getfloat(); // 获得浮点型值 </span>
    <li><span style="font-family: Comic Sans MS">short val = bytebuf.getshort(); // 获得短整型数值 </span></li>
</ol>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><span style="font-family: Comic Sans MS"><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br />
            <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></span></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><span style="font-family: Comic Sans MS"><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            </span></td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="4"><span class="atitle"><span style="font-family: Comic Sans MS">4：结束语</span></span></a></p>
<p><span style="font-family: Comic Sans MS">从上面的介绍可以看出，java程序中对网络数据流的处理涉及的问题较多。在编写网络程序时，必须注意这些问题，以使得程序正确的处理通信的内容。</span></p>
<br />
<br />
<p><a name="resources"><span class="atitle"><span style="font-family: Comic Sans MS">参考资料 </span></span></a></p>
<ul>
    <li><a href="http://java.sun.com/j2se/1.4/docs/api/index.html" cmimpressionsent="1"><span style="font-family: Comic Sans MS">http://java.sun.com/j2se/1.4/docs/api/index.html</span></a><span style="font-family: Comic Sans MS"> <br />
    </span></li>
</ul>
<img src ="http://www.blogjava.net/supercrsky/aggbug/247447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-12-20 11:21 <a href="http://www.blogjava.net/supercrsky/articles/247447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jad反编译工具详解</title><link>http://www.blogjava.net/supercrsky/articles/244416.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Thu, 04 Dec 2008 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/244416.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/244416.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/244416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/244416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/244416.html</trackback:ping><description><![CDATA[jad简单用法(以下假设jad.exe在D:\JDK\jad目录下)<br />
一、基本用法&nbsp; Usage: jad[option(s)]<br />
&nbsp;直接输入类文件名，且支持通配符，如下所示。<br />
&nbsp;D:\JDK\jad&gt;jadabc.class<br />
&nbsp;D:\JDK\jad&gt;jad *.class 结果是将abc.class反编译为abc.jad。将abc.jad改为abc.java即得源文件。<br />
二、Option-o 不提示，覆盖源文件<br />
三、 Option-s D:\JDK\jad&gt;jad-s javaabc.class 反编译结果以.java为扩展名。<br />
四、 Option-p 将反编译结果输出到屏幕<br />
&nbsp;D:\JDK\jad&gt;jad-pabc.class 将反编译结果重定向到文件 D:\JDK\jad&gt;jad-pabc.class&gt;abc.java<br />
五、 Option-d 指定反编译的输出文件目录 D:\JDK\jad&gt;jad-o-dtest-sjava*.class<br />
&nbsp;命令行选择的列表<br />
-a&nbsp;&nbsp;-用JVM字节格式来注解输出<br />
-af&nbsp;&nbsp;-同&nbsp;&nbsp;-a,但是注解的时候用全名称<br />
-clear&nbsp;&nbsp;-清除所有的前缀<br />
-b&nbsp;&nbsp;-输出多于的括号 (e.g., if(a) { b(); }, default: no)<br />
-d &nbsp;&nbsp;-指定输出文件的文件目录<br />
-dead&nbsp;&nbsp;-试图反编译代码的dead 部分(default: no)<br />
-disass&nbsp;&nbsp;-不用用字节码的方式反编译 (no JAVA source generated)<br />
-f&nbsp;&nbsp;-输出整个的名字,无论是类还是方法<br />
-ff&nbsp;&nbsp;-输出类的成员在方法之前 (default: after methods)<br />
-i&nbsp;&nbsp;-输出所有的变量的缺省的最初值<br />
-l&nbsp;&nbsp;-将strings分割成指定数目的块的字符 (default: no)<br />
-lnc&nbsp;&nbsp;-将输出文件用行号来注解 (default: no)<br />
-nl&nbsp;&nbsp;-分割strings用新行字符 newline character (default: no)<br />
-nodos&nbsp;&nbsp;-不要去检查class文件是否以dos方式写 (CR before NL, default: check)<br />
-nocast&nbsp;&nbsp;-不要生成辅助文件<br />
-nocode&nbsp;&nbsp;-不要生成方法的源代码<br />
-noconv&nbsp;&nbsp;-不要转换java的定义符 (default: do)<br />
-noctor&nbsp;&nbsp;-不允许空的构造器存在<br />
-noinner&nbsp;&nbsp;-关掉对内部类的支持 (default: turn on)<br />
-nolvt&nbsp;&nbsp;-忽略局部变量的表信息<br />
-nonlb&nbsp;&nbsp;-不要输出一个新行在打开一个括号之前 (default: do)<br />
-o&nbsp;&nbsp;- 无需确认直接覆盖输出 (default: no)<br />
-p&nbsp;&nbsp;-发送反编译代码到标准输出 STDOUT (e.g., for piping)<br />
<br />
<br />
jadclipse的配置<br />
安装好之后，只要双击.class文件，就能直接看源文件，<br />
包括jar包中的class文件，也可以直接反编译。<br />
<br />
1.下载jad1.2.8<br />
<a href="http://www.kpdus.com/jad.html#download" target="_blank"><font color="#663366" size="2">http://www.kpdus.com/jad.html#download</font></a><br />
<font size="2">下载后解压。只用过最新版1.2.8能够成功，1.2.7都不行。<br />
<br />
2.下载 jadclipse2.06beta<br />
</font><a href="http://sourceforge.net/projects/jadclipse/" target="_blank"><font color="#663366" size="2">http://sourceforge.net/projects/jadclipse/</font></a><br />
<font size="2">按eclipse的plguin进行安装，将jadclipse目录解压到eclipse/plugin目录下。<br />
<br />
3.配置jadclipse：<br />
window&gt;preferences&gt;java&gt;JadClipse中，<br />
设置path to decompiler为jad.exe的全路径，如：d:jadjad.exe<br />
在Directory for temporary files中指定临时文件的路径。<br />
<br />
在workbench&gt;file associations中，<br />
将*.class的编辑器，设为JacClipse。<br />
<br />
4.反编译<br />
找到一个class文件，双击打开，能看到编译后的源文件。<br />
<br />
您也可以在此下载完整包。<br />
<a title="jad反编译专用包" href="http://qt6dkw.bay.livefilestore.com/y1pU6DwlFHumFNaC_ySZVAdIFkKJLT9IWCvp0qs6CGQ1YnTF4faeJBX09tQYCeI-Hq0_Hr0uxahSTZZFfb_cJWiCg/Jad%E5%8F%8D%E7%BC%96%E8%AF%91%E4%B8%93%E7%94%A8.rar?download">jad反编译专用包</a><br />
<br />
</font>
<img src ="http://www.blogjava.net/supercrsky/aggbug/244416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-12-04 17:28 <a href="http://www.blogjava.net/supercrsky/articles/244416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>统计一个字符串的重复字符出现的字数</title><link>http://www.blogjava.net/supercrsky/articles/236195.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Thu, 23 Oct 2008 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/236195.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/236195.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/236195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/236195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/236195.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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.junit.Test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_38_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_88_Open_Text.style.display='none'; Codehighlighter1_38_88_Closed_Image.style.display='inline'; Codehighlighter1_38_88_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_38_88_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_38_88_Closed_Text.style.display='none'; Codehighlighter1_38_88_Open_Image.style.display='inline'; Codehighlighter1_38_88_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_38_88_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">/**&nbsp;*/</span><span id="Codehighlighter1_38_88_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;统计一个字符串的重复字符出现的字数<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;zdw<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;StringTest<br />
<img id="Codehighlighter1_114_592_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_592_Open_Text.style.display='none'; Codehighlighter1_114_592_Closed_Image.style.display='inline'; Codehighlighter1_114_592_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_114_592_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_114_592_Closed_Text.style.display='none'; Codehighlighter1_114_592_Open_Image.style.display='inline'; Codehighlighter1_114_592_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_114_592_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"  alt="" /></span><span id="Codehighlighter1_114_592_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;test()<br />
<img id="Codehighlighter1_145_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_145_209_Open_Text.style.display='none'; Codehighlighter1_145_209_Closed_Image.style.display='inline'; Codehighlighter1_145_209_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_145_209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_145_209_Closed_Text.style.display='none'; Codehighlighter1_145_209_Open_Image.style.display='inline'; Codehighlighter1_145_209_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_145_209_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"  alt="" /></span><span id="Codehighlighter1_145_209_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">fdfaacceeeeeeeeeeeegghikkkkkoooo</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count(s);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;count(String&nbsp;str)<br />
<img id="Codehighlighter1_251_590_Open_Image" onclick="this.style.display='none'; Codehighlighter1_251_590_Open_Text.style.display='none'; Codehighlighter1_251_590_Closed_Image.style.display='inline'; Codehighlighter1_251_590_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_251_590_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_251_590_Closed_Text.style.display='none'; Codehighlighter1_251_590_Open_Image.style.display='inline'; Codehighlighter1_251_590_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_251_590_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"  alt="" /></span><span id="Codehighlighter1_251_590_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;用于存储a-z出现的次数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;nums&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[</span><span style="color: #000000">26</span><span style="color: #000000">];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;i&nbsp;:&nbsp;str.toCharArray())<br />
<img id="Codehighlighter1_336_437_Open_Image" onclick="this.style.display='none'; Codehighlighter1_336_437_Open_Text.style.display='none'; Codehighlighter1_336_437_Closed_Image.style.display='inline'; Codehighlighter1_336_437_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_336_437_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_336_437_Closed_Text.style.display='none'; Codehighlighter1_336_437_Open_Image.style.display='inline'; Codehighlighter1_336_437_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_336_437_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"  alt="" /></span><span id="Codehighlighter1_336_437_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;在字母的范围内</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(i&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">97</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">123</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_383_432_Open_Image" onclick="this.style.display='none'; Codehighlighter1_383_432_Open_Text.style.display='none'; Codehighlighter1_383_432_Closed_Image.style.display='inline'; Codehighlighter1_383_432_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_383_432_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_383_432_Closed_Text.style.display='none'; Codehighlighter1_383_432_Open_Image.style.display='inline'; Codehighlighter1_383_432_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_383_432_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"  alt="" /></span><span id="Codehighlighter1_383_432_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;在其对应的索引位进行累加就可以了</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nums[i&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">97</span><span style="color: #000000">]</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;nums.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_482_587_Open_Image" onclick="this.style.display='none'; Codehighlighter1_482_587_Open_Text.style.display='none'; Codehighlighter1_482_587_Closed_Image.style.display='inline'; Codehighlighter1_482_587_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_482_587_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_482_587_Closed_Text.style.display='none'; Codehighlighter1_482_587_Open_Image.style.display='inline'; Codehighlighter1_482_587_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_482_587_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"  alt="" /></span><span id="Codehighlighter1_482_587_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;只显示出现的</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(nums[i]&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_521_583_Open_Image" onclick="this.style.display='none'; Codehighlighter1_521_583_Open_Text.style.display='none'; Codehighlighter1_521_583_Closed_Image.style.display='inline'; Codehighlighter1_521_583_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_521_583_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_521_583_Closed_Text.style.display='none'; Codehighlighter1_521_583_Open_Image.style.display='inline'; Codehighlighter1_521_583_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_521_583_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"  alt="" /></span><span id="Codehighlighter1_521_583_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println((</span><span style="color: #0000ff">char</span><span style="color: #000000">)&nbsp;(</span><span style="color: #000000">97</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;i)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;nums[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/236195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-10-23 16:03 <a href="http://www.blogjava.net/supercrsky/articles/236195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>删除指定目录下的所有空文件夹</title><link>http://www.blogjava.net/supercrsky/articles/234216.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Tue, 14 Oct 2008 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/234216.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/234216.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/234216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/234216.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/234216.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.func;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.File;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_92_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_139_Open_Text.style.display='none'; Codehighlighter1_92_139_Closed_Image.style.display='inline'; Codehighlighter1_92_139_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_92_139_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_92_139_Closed_Text.style.display='none'; Codehighlighter1_92_139_Open_Image.style.display='inline'; Codehighlighter1_92_139_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_92_139_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">/**&nbsp;*/</span><span id="Codehighlighter1_92_139_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;删除指定目录下的所有空文件夹<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;zdw<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FileUtils<br />
<img id="Codehighlighter1_164_1153_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_1153_Open_Text.style.display='none'; Codehighlighter1_164_1153_Closed_Image.style.display='inline'; Codehighlighter1_164_1153_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_164_1153_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_164_1153_Closed_Text.style.display='none'; Codehighlighter1_164_1153_Open_Image.style.display='inline'; Codehighlighter1_164_1153_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_164_1153_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"  alt="" /></span><span id="Codehighlighter1_164_1153_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">File</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">File</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;得到某一目录下的所有文件夹</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">File</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;visitAll(File&nbsp;root)<br />
<img id="Codehighlighter1_267_542_Open_Image" onclick="this.style.display='none'; Codehighlighter1_267_542_Open_Text.style.display='none'; Codehighlighter1_267_542_Closed_Image.style.display='inline'; Codehighlighter1_267_542_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_267_542_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_267_542_Closed_Text.style.display='none'; Codehighlighter1_267_542_Open_Image.style.display='inline'; Codehighlighter1_267_542_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_267_542_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"  alt="" /></span><span id="Codehighlighter1_267_542_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File[]&nbsp;dirs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root.listFiles();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dirs&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_325_524_Open_Image" onclick="this.style.display='none'; Codehighlighter1_325_524_Open_Text.style.display='none'; Codehighlighter1_325_524_Closed_Image.style.display='inline'; Codehighlighter1_325_524_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_325_524_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_325_524_Closed_Text.style.display='none'; Codehighlighter1_325_524_Open_Image.style.display='inline'; Codehighlighter1_325_524_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_325_524_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_325_524_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;dirs.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_371_520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_371_520_Open_Text.style.display='none'; Codehighlighter1_371_520_Closed_Image.style.display='inline'; Codehighlighter1_371_520_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_371_520_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_371_520_Closed_Text.style.display='none'; Codehighlighter1_371_520_Open_Image.style.display='inline'; Codehighlighter1_371_520_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_371_520_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"  alt="" /></span><span id="Codehighlighter1_371_520_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dirs[i].isDirectory())<br />
<img id="Codehighlighter1_408_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_408_492_Open_Text.style.display='none'; Codehighlighter1_408_492_Closed_Image.style.display='inline'; Codehighlighter1_408_492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_408_492_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_408_492_Closed_Text.style.display='none'; Codehighlighter1_408_492_Open_Image.style.display='inline'; Codehighlighter1_408_492_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_408_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"  alt="" /></span><span id="Codehighlighter1_408_492_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">name:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;dirs[i].getPath());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(dirs[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visitAll(dirs[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;list;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_545_580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_545_580_Open_Text.style.display='none'; Codehighlighter1_545_580_Closed_Image.style.display='inline'; Codehighlighter1_545_580_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_545_580_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_545_580_Closed_Text.style.display='none'; Codehighlighter1_545_580_Open_Image.style.display='inline'; Codehighlighter1_545_580_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_545_580_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">/**&nbsp;*/</span><span id="Codehighlighter1_545_580_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;删除空的文件夹<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;list<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;removeNullFile(List</span><span style="color: #000000">&lt;</span><span style="color: #000000">File</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list)<br />
<img id="Codehighlighter1_628_808_Open_Image" onclick="this.style.display='none'; Codehighlighter1_628_808_Open_Text.style.display='none'; Codehighlighter1_628_808_Closed_Image.style.display='inline'; Codehighlighter1_628_808_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_628_808_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_628_808_Closed_Text.style.display='none'; Codehighlighter1_628_808_Open_Image.style.display='inline'; Codehighlighter1_628_808_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_628_808_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"  alt="" /></span><span id="Codehighlighter1_628_808_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;list.size();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_672_805_Open_Image" onclick="this.style.display='none'; Codehighlighter1_672_805_Open_Text.style.display='none'; Codehighlighter1_672_805_Closed_Image.style.display='inline'; Codehighlighter1_672_805_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_672_805_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_672_805_Closed_Text.style.display='none'; Codehighlighter1_672_805_Open_Image.style.display='inline'; Codehighlighter1_672_805_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_672_805_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"  alt="" /></span><span id="Codehighlighter1_672_805_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;list.get(i);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;是目录且为空</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(temp.isDirectory()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;temp.listFiles().length&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_777_801_Open_Image" onclick="this.style.display='none'; Codehighlighter1_777_801_Open_Text.style.display='none'; Codehighlighter1_777_801_Closed_Image.style.display='inline'; Codehighlighter1_777_801_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_777_801_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_777_801_Closed_Text.style.display='none'; Codehighlighter1_777_801_Open_Image.style.display='inline'; Codehighlighter1_777_801_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_777_801_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"  alt="" /></span><span id="Codehighlighter1_777_801_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.delete();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_813_836_Open_Image" onclick="this.style.display='none'; Codehighlighter1_813_836_Open_Text.style.display='none'; Codehighlighter1_813_836_Closed_Image.style.display='inline'; Codehighlighter1_813_836_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_813_836_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_813_836_Closed_Text.style.display='none'; Codehighlighter1_813_836_Open_Image.style.display='inline'; Codehighlighter1_813_836_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_813_836_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">/**&nbsp;*/</span><span id="Codehighlighter1_813_836_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_879_1150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_879_1150_Open_Text.style.display='none'; Codehighlighter1_879_1150_Closed_Image.style.display='inline'; Codehighlighter1_879_1150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_879_1150_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_879_1150_Closed_Text.style.display='none'; Codehighlighter1_879_1150_Open_Image.style.display='inline'; Codehighlighter1_879_1150_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_879_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"  alt="" /></span><span id="Codehighlighter1_879_1150_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileUtils&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileUtils();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">File</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m.visitAll(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(</span><span style="color: #000000">"</span><span style="color: #000000">e:/aaa</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(list.size());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;list.size();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_1043_1093_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1043_1093_Open_Text.style.display='none'; Codehighlighter1_1043_1093_Closed_Image.style.display='inline'; Codehighlighter1_1043_1093_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1043_1093_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1043_1093_Closed_Text.style.display='none'; Codehighlighter1_1043_1093_Open_Image.style.display='inline'; Codehighlighter1_1043_1093_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1043_1093_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"  alt="" /></span><span id="Codehighlighter1_1043_1093_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(list.get(i).getPath());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.removeNullFile(list);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">ok</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/234216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-10-14 13:47 <a href="http://www.blogjava.net/supercrsky/articles/234216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改MyEclipse or Eclipse的启动画面</title><link>http://www.blogjava.net/supercrsky/articles/222651.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sun, 17 Aug 2008 17:14:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/222651.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/222651.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/222651.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/222651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/222651.html</trackback:ping><description><![CDATA[打开eclipse.ini文件 加上此命令:<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">-</span><span style="color: #000000">Dosgi.splashLocation</span><span style="color: #000000">=</span><span style="color: #000000">E:\program\myeclipse\myeclipse\eclipse\splash.bmp</span></div>
把后面的图片地址换成你自己的就行了。<br />
<br />
<br />
<br />
<strong>其实，Eclipse是一个可以进行非常灵活配置的系统，除了以缺省的方式启动以外，还可以指定各种参数来定制启动方式。在参考了一些资料之后，我总结了一些比较常用的启动时Command Arguments，如果有不正确的地方希望大家予以指出。 </strong>
<p><strong>-arch [processor architecture]<br />
描述：指定所使用的处理器的类别<br />
举例：eclipse -arch x86或eclipse -arch sparc</strong></p>
<p><strong>-application [id]<br />
描述：指定要运行的应用，id为扩展org.eclipse.core.applications扩展点的插件id加扩展id<br />
举例：例如有个插件id为edu.sdu.app，扩展id为myapp，则eclipse -application edu.sdu.app.myapp，就会执行你的扩展应用</strong></p>
<p><strong>-clean<br />
描述：清空插件缓存内容<br />
举例：eclipse -clean，有时插件显示不出来是因为Eclipse将插件进行了缓存以加速启动过程，若指定此参数则会清空缓存，从头加载</strong></p>
<p><strong>-configuration [cofigfile location]<br />
描述：指定配置文件的位置，在启动时使用此目录下的配置文件config.ini来启动<br />
举例：eclipse -configuration d:/eclipse/configuration</strong></p>
<p><strong>-data [workspace location]<br />
描述：指定启动时的Workspace位置<br />
举例：例如Workspace位置设在D:/myworkspace，则eclipse -data D:/myworkspace</strong></p>
<p><strong>-debug [option file]<br />
描述：以Debug状态启动Eclipse，所有的Debug开关在.options文件中指定<br />
举例：eclipse -debug d:/eclipse/.options</strong></p>
<p><strong>-dev [classpath entry]<br />
描述：以开发状态启动Eclipse，这会添加所有指定的路径作为每个插件的Classpath<br />
举例：例如eclipse -dev bin，会将产生在bin目录下的所有类加载到类路径中，这在开发插件时非常有用</strong></p>
<p><strong>-nosplash<br />
描述：指定启动时不显示闪屏<br />
举例：eclipse -nosplash</strong></p>
<p><strong>-vm [jre path]<br />
描述：指定启动时所使用的Java虚拟机<br />
举例：例如要使用自己的Java虚拟机，则eclipse -vm D:/j2sdk1.4.2_04/jre/bin/java.exe，这样还有一个好处，就是可以开启一个Console，能够显示控制台信息，当然若使用eclipse -vm D:/j2sdk1.4.2_04/jre/bin/javaw.exe则不会再显示控制台</strong></p>
<p><strong>-vmargs [Java VM arguments]<br />
描述：指定启动时要使用的Java虚拟机参数<br />
举例：例如要指定使用的内存容量，则eclipse -vmargs "-Xms256m -Xmx1024m"<br />
注：此参数一定要放在所有参数变量的最后面</strong></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/222651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-08-18 01:14 <a href="http://www.blogjava.net/supercrsky/articles/222651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC利用游标分页查询</title><link>http://www.blogjava.net/supercrsky/articles/221755.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Wed, 13 Aug 2008 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/221755.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/221755.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/221755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/221755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/221755.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"><img id="Codehighlighter1_0_116_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_116_Open_Text.style.display='none'; Codehighlighter1_0_116_Closed_Image.style.display='inline'; Codehighlighter1_0_116_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_116_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_116_Closed_Text.style.display='none'; Codehighlighter1_0_116_Open_Image.style.display='inline'; Codehighlighter1_0_116_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_116_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">/**&nbsp;*/</span><span id="Codehighlighter1_0_116_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;一次只从数据库中查询最大maxCount条记录<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;sql&nbsp;传入的sql语句<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;startNo&nbsp;从哪一条记录开始<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;maxCount&nbsp;总共取多少条记录<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_175_975_Open_Image" onclick="this.style.display='none'; Codehighlighter1_175_975_Open_Text.style.display='none'; Codehighlighter1_175_975_Closed_Image.style.display='inline'; Codehighlighter1_175_975_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_175_975_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_175_975_Closed_Text.style.display='none'; Codehighlighter1_175_975_Open_Image.style.display='inline'; Codehighlighter1_175_975_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getData(String&nbsp;sql,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;startNo,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;maxCount)</span><span id="Codehighlighter1_175_975_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"  alt="" /></span><span id="Codehighlighter1_175_975_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;Connection&nbsp;conn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ConnectionUtil.getConnection();<br />
<img id="Codehighlighter1_235_919_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_919_Open_Text.style.display='none'; Codehighlighter1_235_919_Closed_Image.style.display='inline'; Codehighlighter1_235_919_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_235_919_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_235_919_Closed_Text.style.display='none'; Codehighlighter1_235_919_Open_Image.style.display='inline'; Codehighlighter1_235_919_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_235_919_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"  alt="" /></span><span id="Codehighlighter1_235_919_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;conn.prepareStatement(sql,游标类型,能否更新记录);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;游标类型：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet.TYPE_FORWORD_ONLY:只进游标<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet.TYPE_SCROLL_INSENSITIVE:可滚动。但是不受其他用户对数据库更改的影响。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet.TYPE_SCROLL_SENSITIVE:可滚动。当其他用户更改数据库时这个记录也会改变。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;能否更新记录：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet.CONCUR_READ_ONLY,只读<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet.CONCUR_UPDATABLE,可更新</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;pstat&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">最大查询到第几条记录</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;pstat.setMaxRows(startNo</span><span style="color: #000000">+</span><span style="color: #000000">maxCount</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pstat.executeQuery();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将游标移动到第一条记录</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;rs.first();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;游标移动到要输出的第一条记录</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;rs.relative(startNo</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(rs.next())<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getInt(</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
<img id="Codehighlighter1_944_972_Open_Image" onclick="this.style.display='none'; Codehighlighter1_944_972_Open_Text.style.display='none'; Codehighlighter1_944_972_Closed_Image.style.display='inline'; Codehighlighter1_944_972_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_944_972_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_944_972_Closed_Text.style.display='none'; Codehighlighter1_944_972_Open_Image.style.display='inline'; Codehighlighter1_944_972_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(SQLException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_944_972_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"  alt="" /></span><span id="Codehighlighter1_944_972_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img id="Codehighlighter1_980_1107_Open_Image" onclick="this.style.display='none'; Codehighlighter1_980_1107_Open_Text.style.display='none'; Codehighlighter1_980_1107_Closed_Image.style.display='inline'; Codehighlighter1_980_1107_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_980_1107_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_980_1107_Closed_Text.style.display='none'; Codehighlighter1_980_1107_Open_Image.style.display='inline'; Codehighlighter1_980_1107_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_980_1107_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">/**&nbsp;*/</span><span id="Codehighlighter1_980_1107_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;从数据库中查询所有记录，然后通过游标来获取所需maxCount条记录<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;sql&nbsp;传入的sql语句<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;startNo&nbsp;从哪一条记录开始<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;maxCount&nbsp;总共取多少条记录<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1173_1639_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1173_1639_Open_Text.style.display='none'; Codehighlighter1_1173_1639_Closed_Image.style.display='inline'; Codehighlighter1_1173_1639_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1173_1639_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1173_1639_Closed_Text.style.display='none'; Codehighlighter1_1173_1639_Open_Image.style.display='inline'; Codehighlighter1_1173_1639_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getDataFromAll(String&nbsp;sql,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;startNo,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;maxCount)</span><span id="Codehighlighter1_1173_1639_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"  alt="" /></span><span id="Codehighlighter1_1173_1639_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;Connection&nbsp;conn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ConnectionUtil.getConnection();<br />
<img id="Codehighlighter1_1233_1583_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1233_1583_Open_Text.style.display='none'; Codehighlighter1_1233_1583_Closed_Image.style.display='inline'; Codehighlighter1_1233_1583_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1233_1583_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1233_1583_Closed_Text.style.display='none'; Codehighlighter1_1233_1583_Open_Image.style.display='inline'; Codehighlighter1_1233_1583_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1233_1583_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"  alt="" /></span><span id="Codehighlighter1_1233_1583_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;pstat&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pstat.executeQuery();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;rs.first();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;rs.relative(startNo</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;startNo</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_1512_1579_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1512_1579_Open_Text.style.display='none'; Codehighlighter1_1512_1579_Closed_Image.style.display='inline'; Codehighlighter1_1512_1579_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1512_1579_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1512_1579_Closed_Text.style.display='none'; Codehighlighter1_1512_1579_Open_Image.style.display='inline'; Codehighlighter1_1512_1579_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;startNo&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;maxCount</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">rs.isAfterLast())</span><span id="Codehighlighter1_1512_1579_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"  alt="" /></span><span id="Codehighlighter1_1512_1579_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getInt(</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;rs.next();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1608_1636_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1608_1636_Open_Text.style.display='none'; Codehighlighter1_1608_1636_Closed_Image.style.display='inline'; Codehighlighter1_1608_1636_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1608_1636_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1608_1636_Closed_Text.style.display='none'; Codehighlighter1_1608_1636_Open_Image.style.display='inline'; Codehighlighter1_1608_1636_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(SQLException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_1608_1636_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"  alt="" /></span><span id="Codehighlighter1_1608_1636_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000">&nbsp;</span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/221755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-08-13 16:39 <a href="http://www.blogjava.net/supercrsky/articles/221755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取昨天的日期字符串</title><link>http://www.blogjava.net/supercrsky/articles/214186.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 11 Jul 2008 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/214186.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/214186.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/214186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/214186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/214186.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: import&nbsp;java.text.SimpleDateFormat;import&nbsp;java.util.Date;public&nbsp;class&nbsp;Test{&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取昨天的日期字符串&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/214186.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/214186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-07-11 10:19 <a href="http://www.blogjava.net/supercrsky/articles/214186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的第一个J2ME 程序</title><link>http://www.blogjava.net/supercrsky/articles/210027.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 23 Jun 2008 04:55:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/210027.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/210027.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/210027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/210027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/210027.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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.Alert;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.AlertType;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.Command;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.CommandListener;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.Display;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.Displayable;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.TextBox;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.TextField;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.lcdui.Ticker;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.midlet.MIDlet;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.microedition.midlet.MIDletStateChangeException;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_499_605_Open_Image" onclick="this.style.display='none'; Codehighlighter1_499_605_Open_Text.style.display='none'; Codehighlighter1_499_605_Closed_Image.style.display='inline'; Codehighlighter1_499_605_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_499_605_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_499_605_Closed_Text.style.display='none'; Codehighlighter1_499_605_Open_Image.style.display='inline'; Codehighlighter1_499_605_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_499_605_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">/**&nbsp;*/</span><span id="Codehighlighter1_499_605_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">*****************************************************************************<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;zdw<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TextTest&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;MIDlet&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;CommandListener<br />
<img id="Codehighlighter1_671_2741_Open_Image" onclick="this.style.display='none'; Codehighlighter1_671_2741_Open_Text.style.display='none'; Codehighlighter1_671_2741_Closed_Image.style.display='inline'; Codehighlighter1_671_2741_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_671_2741_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_671_2741_Closed_Text.style.display='none'; Codehighlighter1_671_2741_Open_Image.style.display='inline'; Codehighlighter1_671_2741_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_671_2741_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"  alt="" /></span><span id="Codehighlighter1_671_2741_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;文本框</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;TextBox&nbsp;tbx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;控制输入输出的类</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Display&nbsp;display&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Display.getDisplay(</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;命令菜单(清除)</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Command&nbsp;clear;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;得到鼠标位置</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Command&nbsp;getCursorPos;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;输入限制</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Command&nbsp;astrict;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;发送</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Command&nbsp;send;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;退出</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Command&nbsp;exit;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TextTest()<br />
<img id="Codehighlighter1_971_1636_Open_Image" onclick="this.style.display='none'; Codehighlighter1_971_1636_Open_Text.style.display='none'; Codehighlighter1_971_1636_Closed_Image.style.display='inline'; Codehighlighter1_971_1636_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_971_1636_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_971_1636_Closed_Text.style.display='none'; Codehighlighter1_971_1636_Open_Image.style.display='inline'; Codehighlighter1_971_1636_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_971_1636_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"  alt="" /></span><span id="Codehighlighter1_971_1636_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;初始化textBox</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TextBox(</span><span style="color: #000000">"</span><span style="color: #000000">测试标题</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">测试内容</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">200</span><span style="color: #000000">,&nbsp;TextField.ANY);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设置为当前显示</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display.setCurrent(tbx);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;清除菜单</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Command(</span><span style="color: #000000">"</span><span style="color: #000000">清空</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Command.SCREEN,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;光标位置菜单</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getCursorPos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Command(</span><span style="color: #000000">"</span><span style="color: #000000">光标位置</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Command.SCREEN,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;输入限制菜单</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;astrict&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Command(</span><span style="color: #000000">"</span><span style="color: #000000">只能输入数字</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Command.SCREEN,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;发送菜单</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Command(</span><span style="color: #000000">"</span><span style="color: #000000">发送</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Command.SCREEN,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;退出菜单</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Command(</span><span style="color: #000000">"</span><span style="color: #000000">退出</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Command.EXIT,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.addCommand(clear);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.addCommand(getCursorPos);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.addCommand(astrict);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.addCommand(send);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.addCommand(exit);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;添加Ticker(显示在TextBox上方)</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.setTicker(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Ticker(</span><span style="color: #000000">"</span><span style="color: #000000">短信编辑器</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;添加事件监听器</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.setCommandListener(</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Alert的初始函数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initAlert()<br />
<img id="Codehighlighter1_1680_1810_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1680_1810_Open_Text.style.display='none'; Codehighlighter1_1680_1810_Closed_Image.style.display='inline'; Codehighlighter1_1680_1810_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1680_1810_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1680_1810_Closed_Text.style.display='none'; Codehighlighter1_1680_1810_Open_Image.style.display='inline'; Codehighlighter1_1680_1810_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1680_1810_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"  alt="" /></span><span id="Codehighlighter1_1680_1810_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert&nbsp;alert&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Alert(</span><span style="color: #000000">"</span><span style="color: #000000">提示</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">发送成功</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;AlertType.INFO);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert.setTimeout(Alert.FOREVER);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display.setCurrent(alert);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;事件处理</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;commandAction(Command&nbsp;cmd,&nbsp;Displayable&nbsp;dis)<br />
<img id="Codehighlighter1_1880_2551_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1880_2551_Open_Text.style.display='none'; Codehighlighter1_1880_2551_Closed_Image.style.display='inline'; Codehighlighter1_1880_2551_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1880_2551_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1880_2551_Closed_Text.style.display='none'; Codehighlighter1_1880_2551_Open_Image.style.display='inline'; Codehighlighter1_1880_2551_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1880_2551_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"  alt="" /></span><span id="Codehighlighter1_1880_2551_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cmd&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;getCursorPos)<br />
<img id="Codehighlighter1_1911_1973_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1911_1973_Open_Text.style.display='none'; Codehighlighter1_1911_1973_Closed_Image.style.display='inline'; Codehighlighter1_1911_1973_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1911_1973_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1911_1973_Closed_Text.style.display='none'; Codehighlighter1_1911_1973_Open_Image.style.display='inline'; Codehighlighter1_1911_1973_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1911_1973_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"  alt="" /></span><span id="Codehighlighter1_1911_1973_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">光标位置为:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;tbx.getCaretPosition());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cmd&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;clear)<br />
<img id="Codehighlighter1_1997_2023_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1997_2023_Open_Text.style.display='none'; Codehighlighter1_1997_2023_Closed_Image.style.display='inline'; Codehighlighter1_1997_2023_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1997_2023_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1997_2023_Closed_Text.style.display='none'; Codehighlighter1_1997_2023_Open_Image.style.display='inline'; Codehighlighter1_1997_2023_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1997_2023_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"  alt="" /></span><span id="Codehighlighter1_1997_2023_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.setString(</span><span style="color: #000000">""</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cmd.getLabel().equals(</span><span style="color: #000000">"</span><span style="color: #000000">只能输入数字</span><span style="color: #000000">"</span><span style="color: #000000">))<br />
<img id="Codehighlighter1_2066_2224_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2066_2224_Open_Text.style.display='none'; Codehighlighter1_2066_2224_Closed_Image.style.display='inline'; Codehighlighter1_2066_2224_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2066_2224_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2066_2224_Closed_Text.style.display='none'; Codehighlighter1_2066_2224_Open_Image.style.display='inline'; Codehighlighter1_2066_2224_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2066_2224_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"  alt="" /></span><span id="Codehighlighter1_2066_2224_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.setConstraints(TextField.DECIMAL);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.removeCommand(astrict);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;astrict&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Command(</span><span style="color: #000000">"</span><span style="color: #000000">取消限制</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Command.SCREEN,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.addCommand(astrict);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cmd.getLabel().equals(</span><span style="color: #000000">"</span><span style="color: #000000">取消限制</span><span style="color: #000000">"</span><span style="color: #000000">))<br />
<img id="Codehighlighter1_2265_2421_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2265_2421_Open_Text.style.display='none'; Codehighlighter1_2265_2421_Closed_Image.style.display='inline'; Codehighlighter1_2265_2421_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2265_2421_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2265_2421_Closed_Text.style.display='none'; Codehighlighter1_2265_2421_Open_Image.style.display='inline'; Codehighlighter1_2265_2421_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2265_2421_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"  alt="" /></span><span id="Codehighlighter1_2265_2421_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.setConstraints(TextField.ANY);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.removeCommand(astrict);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;astrict&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Command(</span><span style="color: #000000">"</span><span style="color: #000000">只能输入数字</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Command.SCREEN,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbx.addCommand(astrict);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cmd.getCommandType()&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;Command.EXIT)<br />
<img id="Codehighlighter1_2469_2500_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2469_2500_Open_Text.style.display='none'; Codehighlighter1_2469_2500_Closed_Image.style.display='inline'; Codehighlighter1_2469_2500_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2469_2500_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2469_2500_Closed_Text.style.display='none'; Codehighlighter1_2469_2500_Open_Image.style.display='inline'; Codehighlighter1_2469_2500_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2469_2500_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"  alt="" /></span><span id="Codehighlighter1_2469_2500_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.notifyDestroyed();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cmd&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;send)<br />
<img id="Codehighlighter1_2523_2548_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2523_2548_Open_Text.style.display='none'; Codehighlighter1_2523_2548_Closed_Image.style.display='inline'; Codehighlighter1_2523_2548_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2523_2548_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2523_2548_Closed_Text.style.display='none'; Codehighlighter1_2523_2548_Open_Image.style.display='inline'; Codehighlighter1_2523_2548_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2523_2548_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"  alt="" /></span><span id="Codehighlighter1_2523_2548_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.initAlert();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;destroyApp(</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;arg0)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;MIDletStateChangeException<br />
<img id="Codehighlighter1_2630_2634_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2630_2634_Open_Text.style.display='none'; Codehighlighter1_2630_2634_Closed_Image.style.display='inline'; Codehighlighter1_2630_2634_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2630_2634_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2630_2634_Closed_Text.style.display='none'; Codehighlighter1_2630_2634_Open_Image.style.display='inline'; Codehighlighter1_2630_2634_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2630_2634_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"  alt="" /></span><span id="Codehighlighter1_2630_2634_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;pauseApp()<br />
<img id="Codehighlighter1_2665_2669_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2665_2669_Open_Text.style.display='none'; Codehighlighter1_2665_2669_Closed_Image.style.display='inline'; Codehighlighter1_2665_2669_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2665_2669_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2665_2669_Closed_Text.style.display='none'; Codehighlighter1_2665_2669_Open_Image.style.display='inline'; Codehighlighter1_2665_2669_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2665_2669_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"  alt="" /></span><span id="Codehighlighter1_2665_2669_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;startApp()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;MIDletStateChangeException<br />
<img id="Codehighlighter1_2734_2738_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2734_2738_Open_Text.style.display='none'; Codehighlighter1_2734_2738_Closed_Image.style.display='inline'; Codehighlighter1_2734_2738_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2734_2738_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2734_2738_Closed_Text.style.display='none'; Codehighlighter1_2734_2738_Open_Image.style.display='inline'; Codehighlighter1_2734_2738_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2734_2738_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"  alt="" /></span><span id="Codehighlighter1_2734_2738_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
 <img src ="http://www.blogjava.net/supercrsky/aggbug/210027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-06-23 12:55 <a href="http://www.blogjava.net/supercrsky/articles/210027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC数据库连接语句大全</title><link>http://www.blogjava.net/supercrsky/articles/207109.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Wed, 11 Jun 2008 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/207109.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/207109.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/207109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/207109.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/207109.html</trackback:ping><description><![CDATA[1.&nbsp;MySQL(http://www.mysql.com)<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.gjt.mm.mysql.Driver</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sUsr,&nbsp;sPwd&nbsp;);&nbsp;</span></div>
<br />
<br />
2.&nbsp;PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.postgresql.Driver</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sUsr,&nbsp;sPwd&nbsp;);&nbsp;</span></div>
<br />
<br />
3.&nbsp;Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">oracle.jdbc.driver.OracleDriver</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sUsr,&nbsp;sPwd&nbsp;);&nbsp;</span></div>
<br />
<br />
4.&nbsp;Sybase(http://jtds.sourceforge.net)jconn2.jar <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">com.sybase.jdbc2.jdbc.SybDriver</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:sybase:Tds:MyDbComputerNameOrIP:2638</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sUsr,&nbsp;sPwd&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">(Default-Username/Password:&nbsp;"dba"/"sql")&nbsp;</span></div>
<br />
<br />
5.&nbsp;Microsoft&nbsp;SQLServer(http://jtds.sourceforge.net) <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">net.sourceforge.jtds.jdbc.Driver</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sUsr,&nbsp;sPwd&nbsp;);&nbsp;</span></div>
<br />
<br />
6.&nbsp;Microsoft&nbsp;SQLServer(http://www.microsoft.com)&nbsp;<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">com.microsoft.jdbc.sqlserver.SQLServerDriver</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;sUsr,&nbsp;sPwd&nbsp;);</span></div>
7.JDBC-ODBC(非数据源方式)<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;sun.jdbc.odbc.JdbcOdbcDriver();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:odbc:driver={sql&nbsp;server};server=.;database=pubs;user=sa;pwd=</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<br />
<br />
8.&nbsp;ODBC (普通数据源方式)<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">sun.jdbc.odbc.JdbcOdbcDriver</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Connection&nbsp;cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:odbc:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;sDsn,&nbsp;sUsr,&nbsp;sPwd&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
9.DB2 <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Class.forName(</span><span style="color: #000000">"</span><span style="color: #000000">com.ibm.db2.jdbc.net.DB2Driver</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;url</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:db2://192.9.200.108:6789/SAMPLE</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(&nbsp;url,&nbsp;sUsr,&nbsp;sPwd&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<img src ="http://www.blogjava.net/supercrsky/aggbug/207109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-06-11 14:42 <a href="http://www.blogjava.net/supercrsky/articles/207109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse和MyEclipse工程描述符详解</title><link>http://www.blogjava.net/supercrsky/articles/204013.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 30 May 2008 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/204013.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/204013.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/204013.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/204013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/204013.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; 有时候在一个Java工程里我们需要加入第三方jar包，这时你加入的最好相对路径，<br />
而不是绝对路径。否则你的工程拿到别处就不行运行了。意思就是说你最好把相关的jar放到工程目录下。对于Web工程来说相对简单，web工程是有个lib 目录的。直接复制到这里就行了。而非web工程是不可以的。Eclispe是不能自动完成导入copy的。<br />
这就需要我们手动配置，对于工作描述文件，Eclipse和MyEclpse全是用xml来描述的。<br />
<br />
现在我们来看看Eclipse的.classpath文件:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;源码目录&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="src"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="src"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;JDK运行时容器&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="con"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="org.eclipse.jdt.launching.JRE_CONTAINER"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;以下为类库&nbsp;path为你自定义的目录&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="lib/swing-layout-1.0.3.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="lib/AbsoluteLayout.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="lib/jtds-1.2.2.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="lib/jxl.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;编译后输出class&nbsp;目录&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="output"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="bin"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
在xml中我已经加了注释。想你也明白了吧。<br />
<br />
.project文件:<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">projectDescription</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;工程名称&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">execlInterface</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">comment</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">comment</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">projects</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">projects</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;编译器指定&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">buildSpec</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">buildCommand</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.eclipse.jdt.core.javabuilder</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arguments</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">arguments</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">buildCommand</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">buildSpec</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;核心特性&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">natures</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">nature</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.eclipse.jdt.core.javanature</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">nature</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">natures</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">projectDescription</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
对于myeclipse工程多了一个.mymetadata文件:<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;:&nbsp;工程类型<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;:&nbsp;工程名称<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;:&nbsp;工程在工作空间内的唯一标识<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;context-root&nbsp;:&nbsp;网站根路径<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;j2ee-spec:&nbsp;J2EE标准<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;archive&nbsp;:&nbsp;打包后war文件<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">project-module<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="WEB"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;name</span><span style="color: #0000ff">="upload"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;id</span><span style="color: #0000ff">="myeclipse.1152954865843"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;context-root</span><span style="color: #0000ff">="/upload"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;j2ee-spec</span><span style="color: #0000ff">="1.4"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;archive</span><span style="color: #0000ff">="upload.war"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">attributes</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;value&nbsp;:&nbsp;Web根目录名称&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">attribute&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="webrootdir"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="WebRoot"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">attributes</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project-module</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/204013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-05-30 09:48 <a href="http://www.blogjava.net/supercrsky/articles/204013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中Native关键字的作用 </title><link>http://www.blogjava.net/supercrsky/articles/202826.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 26 May 2008 01:18:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/202826.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/202826.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/202826.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/202826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/202826.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px">
<p>Java不是完美的，Java的不足除了体现在运行速度上要比传统的C++慢许多之外，Java无法直接访问到操作系统底层（如系统硬件等)，为此Java使用native方法来扩展Java程序的功能。<br />
　　可以将native方法比作Java程序同Ｃ程序的接口，其实现步骤：<br />
　　１、在Java中声明native()方法，然后编译；<br />
　　２、用javah产生一个.h文件；<br />
　　３、写一个.cpp文件实现native导出方法，其中需要包含第二步产生的.h文件（注意其中又包含了JDK带的jni.h文件）；<br />
　　４、将第三步的.cpp文件编译成动态链接库文件；<br />
　　５、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件，这个native()方法就可以在Java中被访问了。 </p>
<p><br />
JAVA本地方法适用的情况 <br />
1.为了使用底层的主机平台的某个特性，而这个特性不能通过JAVA API访问</p>
<p>2.为了访问一个老的系统或者使用一个已有的库，而这个系统或这个库不是用JAVA编写的</p>
<p>3.为了加快程序的性能，而将一段时间敏感的代码作为本地方法实现。</p>
<p><br />
首先写好JAVA文件<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_1_43_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1_43_Open_Text.style.display='none'; Codehighlighter1_1_43_Closed_Image.style.display='inline'; Codehighlighter1_1_43_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1_43_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1_43_Closed_Text.style.display='none'; Codehighlighter1_1_43_Open_Image.style.display='inline'; Codehighlighter1_1_43_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1_43_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_1_43_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;Created&nbsp;on&nbsp;2008-5-19&nbsp;Author&nbsp;zdw<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.hode.hodeframework.modelupdate;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CheckFile<br />
<img id="Codehighlighter1_116_321_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_321_Open_Text.style.display='none'; Codehighlighter1_116_321_Closed_Image.style.display='inline'; Codehighlighter1_116_321_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_116_321_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_116_321_Closed_Text.style.display='none'; Codehighlighter1_116_321_Open_Image.style.display='inline'; Codehighlighter1_116_321_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_116_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"  alt="" /></span><span id="Codehighlighter1_116_321_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">native</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;displayHelloWorld();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000"><br />
<img id="Codehighlighter1_181_218_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_218_Open_Text.style.display='none'; Codehighlighter1_181_218_Closed_Image.style.display='inline'; Codehighlighter1_181_218_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_181_218_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_181_218_Closed_Text.style.display='none'; Codehighlighter1_181_218_Open_Image.style.display='inline'; Codehighlighter1_181_218_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_181_218_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"  alt="" /></span><span id="Codehighlighter1_181_218_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;System.loadLibrary(</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_265_318_Open_Image" onclick="this.style.display='none'; Codehighlighter1_265_318_Open_Text.style.display='none'; Codehighlighter1_265_318_Closed_Image.style.display='inline'; Codehighlighter1_265_318_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_265_318_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_265_318_Closed_Text.style.display='none'; Codehighlighter1_265_318_Open_Image.style.display='inline'; Codehighlighter1_265_318_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_265_318_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"  alt="" /></span><span id="Codehighlighter1_265_318_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;CheckFile().displayHelloWorld();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;</p>
<p>然后根据写好的文件编译成CLASS文件<br />
然后在classes或bin之类的class根目录下执行javah -jni com.hode.hodeframework.modelupdate.CheckFile，<br />
&nbsp;就会在根目录下得到一个com_hode_hodeframework_modelupdate_CheckFile.h的文件<br />
然后根据头文件的内容编写<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">com_hode_hodeframework_modelupdate_CheckFile.c文件<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">CheckFile.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;#include&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;#include&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;JNIEXPORT&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;JNICALL&nbsp;Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">env,&nbsp;jobject&nbsp;obj)<br />
<img id="Codehighlighter1_215_263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_215_263_Open_Text.style.display='none'; Codehighlighter1_215_263_Closed_Image.style.display='inline'; Codehighlighter1_215_263_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_215_263_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_215_263_Closed_Text.style.display='none'; Codehighlighter1_215_263_Open_Image.style.display='inline'; Codehighlighter1_215_263_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_215_263_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"  alt="" /></span><span id="Codehighlighter1_215_263_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;world!\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
之后编译生成DLL文件如&#8220;test.dll&#8221;，名称与System.loadLibrary("test")中的名称一致<br />
&nbsp;vc的编译方法：cl -I%java_home%\include -I%java_home%\include\win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll<br />
最后在运行时加参数-Djava.library.path=[dll存放的路径]<br />
</p>
</div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/202826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-05-26 09:18 <a href="http://www.blogjava.net/supercrsky/articles/202826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中连接字符串时+号与StringBuilder的选用</title><link>http://www.blogjava.net/supercrsky/articles/199219.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Thu, 08 May 2008 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/199219.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/199219.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/199219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/199219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/199219.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: package&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;TestSimplePlus&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/199219.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/199219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-05-08 13:35 <a href="http://www.blogjava.net/supercrsky/articles/199219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jad命令总结</title><link>http://www.blogjava.net/supercrsky/articles/199217.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Thu, 08 May 2008 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/199217.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/199217.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/199217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/199217.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/199217.html</trackback:ping><description><![CDATA[<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>jad是最简单的class反编译为java文件的小工具.</strong></span></span></span></p>
<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>现在就总结一下jad 命令</strong></span></span></span></p>
<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>首先,看一下jad的帮助提示</strong></span></span></span></p>
<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>&nbsp;-a - 用JVM字节格式来注解输出 <br />
-af - 同 -a,但是注解的时候用全名称 <br />
-clear - 清除所有的前缀 <br />
-b - 输出多于的括号 (e.g., if(a) { b(); }, default: no) <br />
-d &lt;dir&gt; - 指定输出文件的文件目录 <br />
-dead -试图反编译代码的dead 部分(default: no) <br />
-disass - 不用用字节码的方式反编译 (no JAVA source generated) <br />
-f - 输出整个的名字,无论是类还是方法 <br />
-ff -输出类的成员在方法之前 (default: after methods) <br />
-i - 输出所有的变量的缺省的最初值 <br />
-l&lt;num&gt; - 将strings分割成指定数目的块的字符 (default: no) <br />
-lnc - 将输出文件用行号来注解 (default: no) <br />
-nl - 分割strings用新行字符 newline character (default: no) <br />
-nodos -不要去检查class文件是否以dos方式写 (CR before NL, default: check) <br />
-nocast - 不要生成辅助文件 <br />
-nocode -不要生成方法的源代码 <br />
-noconv - 不要转换java的定义符 (default: do) <br />
-noctor - 不允许空的构造器存在 <br />
-noinner -关掉对内部类的支持 (default: turn on) <br />
-nolvt - 忽略局部变量的表信息 <br />
-nonlb - 不要输出一个新行在打开一个括号之前 (default: do) <br />
-o - 无需确认直接覆盖输出 (default: no) <br />
-p - 发送反编译代码到标准输出 STDOUT (e.g., for piping) <br />
<br />
其次.常用命令</strong></span></span></span></p>
<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>jad -o -r -sjava -dsrc test.class<br />
</strong></span></span></span></p>
<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>tree目录下的所有*.class文件<br />
&nbsp;&nbsp;&nbsp; jad -o -r -sjava -dsrc tree/**/*.class</strong></span></span></span></p>
<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>&nbsp;&nbsp;&nbsp; unix可以表示为：jad&nbsp;-o&nbsp;-r&nbsp;-sjava&nbsp;-dsrc&nbsp;'tree/**/*.class'</strong></span></span></span></p>
<p><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>指定输出文件的名字的话，用以下的转移命令</strong></span></span></span></p>
<p style="text-indent: 2em"><span style="font-size: 18pt"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>jad&nbsp;-p&nbsp;example1.class&nbsp;&gt;&nbsp;myexm1.java<br />
<br />
输出带字节码注释和源码的(最常用)<br />
<br />
jad -o -a Test.class &gt; ss.java</strong></span></span></span></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/199217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-05-08 13:29 <a href="http://www.blogjava.net/supercrsky/articles/199217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jad反编译工具在Eclipse中的使用</title><link>http://www.blogjava.net/supercrsky/articles/198939.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Wed, 07 May 2008 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/198939.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/198939.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/198939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/198939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/198939.html</trackback:ping><description><![CDATA[<p><span style="font-size: 14pt"></span>&nbsp;</p>
<p><span style="font-size: 14pt"><span style="font-family: Comic Sans MS">某些时候，你使用了第三方的jar 包的函数，发现存在某方面问题，想查看函数实现是怎样 <br />
一个究竟，但是没有源码，怎么办呢？ </span></span></p>
<p><span style="font-size: 14pt"><span style="font-family: Comic Sans MS">解决方法 </span></span></p>
<p><span style="font-size: 14pt"><span style="font-family: Comic Sans MS">使用反编译工具咯，呵呵，很简单。 </span></span></p>
<p><span style="font-size: 14pt"><span style="font-family: Comic Sans MS">对照参考 </span></span></p>
<p><span style="font-size: 14pt"><span style="font-family: Comic Sans MS">1. 从http://www.kpdus.com/jad.html 下载jadnt158.zip 。 <br />
2.&nbsp; 从http://jadclipse.sourceforge.net 下载net.sf.jadclipse_3.3.0.jar <br />
3.&nbsp; 将jadnt158.zip 解压，拷贝jad.ex 到%JAVA_HOME%\bin\ 目录下。 <br />
4.&nbsp; 安装插件net.sf.jadclipse_3.3.0.jar （将此文件拷到eclipse 的plugins&nbsp; 目录下，或者【推荐】 <br />
按照我介绍的eclipse 插件安装方法安装）。 <br />
5.&nbsp; 设定路径：进入Window -&gt; Preferences -&gt; Java -&gt; JadClipse，将&#8220;Path to decompiler&#8221;修改成 <br />
jad.exe&nbsp; 的路径。</span></span></p>
<p><span style="font-size: 14pt"><span style="font-family: Comic Sans MS">6. 在Eclipse 的Windows—&gt;&nbsp; Perferences—&gt;General-&gt;Editors-&gt;File Associations 中修改&#8220;*.class&#8221; <br />
默认关联的编辑器为&#8220;JadClipse Class File Viewer&#8221;。<br />
<br />
ok,你可以去任意打开一个class文件,来看看它的源码了.</span></span></p>
 <img src ="http://www.blogjava.net/supercrsky/aggbug/198939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-05-07 13:27 <a href="http://www.blogjava.net/supercrsky/articles/198939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Hashtable过滤一个数组中重复值</title><link>http://www.blogjava.net/supercrsky/articles/198910.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Wed, 07 May 2008 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/198910.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/198910.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/198910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/198910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/198910.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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;org.eline.core.web.support;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Hashtable;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_66_172_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_172_Open_Text.style.display='none'; Codehighlighter1_66_172_Closed_Image.style.display='inline'; Codehighlighter1_66_172_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_66_172_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_66_172_Closed_Text.style.display='none'; Codehighlighter1_66_172_Open_Image.style.display='inline'; Codehighlighter1_66_172_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_66_172_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">/**&nbsp;*/</span><span id="Codehighlighter1_66_172_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">*****************************************************************************<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;zdw<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ObjectFilter<br />
<img id="Codehighlighter1_200_1135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_200_1135_Open_Text.style.display='none'; Codehighlighter1_200_1135_Closed_Image.style.display='inline'; Codehighlighter1_200_1135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_200_1135_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_200_1135_Closed_Text.style.display='none'; Codehighlighter1_200_1135_Open_Image.style.display='inline'; Codehighlighter1_200_1135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_200_1135_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"  alt="" /></span><span id="Codehighlighter1_200_1135_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_244_699_Open_Image" onclick="this.style.display='none'; Codehighlighter1_244_699_Open_Text.style.display='none'; Codehighlighter1_244_699_Closed_Image.style.display='inline'; Codehighlighter1_244_699_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_244_699_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_244_699_Closed_Text.style.display='none'; Codehighlighter1_244_699_Open_Image.style.display='inline'; Codehighlighter1_244_699_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_244_699_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"  alt="" /></span><span id="Codehighlighter1_244_699_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;String&nbsp;测试</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;arr[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img id="Codehighlighter1_280_308_Open_Image" onclick="this.style.display='none'; Codehighlighter1_280_308_Open_Text.style.display='none'; Codehighlighter1_280_308_Closed_Image.style.display='inline'; Codehighlighter1_280_308_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_280_308_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_280_308_Closed_Text.style.display='none'; Codehighlighter1_280_308_Open_Image.style.display='inline'; Codehighlighter1_280_308_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_280_308_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"  alt="" /></span><span id="Codehighlighter1_280_308_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">13111</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">13112</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">13111</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectFilter&nbsp;sf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObjectFilter();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;results[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sf.filter(arr);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results.length);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;results.length;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i)<br />
<img id="Codehighlighter1_471_510_Open_Image" onclick="this.style.display='none'; Codehighlighter1_471_510_Open_Text.style.display='none'; Codehighlighter1_471_510_Closed_Image.style.display='inline'; Codehighlighter1_471_510_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_471_510_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_471_510_Closed_Text.style.display='none'; Codehighlighter1_471_510_Open_Image.style.display='inline'; Codehighlighter1_471_510_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_471_510_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"  alt="" /></span><span id="Codehighlighter1_471_510_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;整形测试</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;arr2[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img id="Codehighlighter1_543_568_Open_Image" onclick="this.style.display='none'; Codehighlighter1_543_568_Open_Text.style.display='none'; Codehighlighter1_543_568_Closed_Image.style.display='inline'; Codehighlighter1_543_568_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_543_568_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_543_568_Closed_Text.style.display='none'; Codehighlighter1_543_568_Open_Image.style.display='inline'; Codehighlighter1_543_568_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_543_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"  alt="" /></span><span id="Codehighlighter1_543_568_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">7</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;results2[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sf.filter(arr2);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;results2.length;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i)<br />
<img id="Codehighlighter1_656_696_Open_Image" onclick="this.style.display='none'; Codehighlighter1_656_696_Open_Text.style.display='none'; Codehighlighter1_656_696_Closed_Image.style.display='inline'; Codehighlighter1_656_696_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_656_696_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_656_696_Closed_Text.style.display='none'; Codehighlighter1_656_696_Open_Image.style.display='inline'; Codehighlighter1_656_696_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_656_696_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"  alt="" /></span><span id="Codehighlighter1_656_696_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(results2[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_703_847_Open_Image" onclick="this.style.display='none'; Codehighlighter1_703_847_Open_Text.style.display='none'; Codehighlighter1_703_847_Closed_Image.style.display='inline'; Codehighlighter1_703_847_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_703_847_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_703_847_Closed_Text.style.display='none'; Codehighlighter1_703_847_Open_Image.style.display='inline'; Codehighlighter1_703_847_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_703_847_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">/**&nbsp;*/</span><span id="Codehighlighter1_703_847_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">*************************************************************************<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;过滤的方法<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;arr<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要过滤的数组<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object[]&nbsp;filter(Object&nbsp;arr[])<br />
<img id="Codehighlighter1_888_1132_Open_Image" onclick="this.style.display='none'; Codehighlighter1_888_1132_Open_Text.style.display='none'; Codehighlighter1_888_1132_Closed_Image.style.display='inline'; Codehighlighter1_888_1132_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_888_1132_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_888_1132_Closed_Text.style.display='none'; Codehighlighter1_888_1132_Open_Image.style.display='inline'; Codehighlighter1_888_1132_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_888_1132_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"  alt="" /></span><span id="Codehighlighter1_888_1132_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hashtable</span><span style="color: #000000">&lt;</span><span style="color: #000000">Object,&nbsp;Object</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;hashtable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Hashtable</span><span style="color: #000000">&lt;</span><span style="color: #000000">Object,&nbsp;Object</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;arr.length;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i)<br />
<img id="Codehighlighter1_1004_1042_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1004_1042_Open_Text.style.display='none'; Codehighlighter1_1004_1042_Closed_Image.style.display='inline'; Codehighlighter1_1004_1042_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1004_1042_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1004_1042_Closed_Text.style.display='none'; Codehighlighter1_1004_1042_Open_Image.style.display='inline'; Codehighlighter1_1004_1042_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1004_1042_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"  alt="" /></span><span id="Codehighlighter1_1004_1042_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hashtable.put(arr[i],&nbsp;arr[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;results[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;results&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hashtable.values().toArray();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;results;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/198910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-05-07 11:53 <a href="http://www.blogjava.net/supercrsky/articles/198910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看一个字符串中出现次数最多的字符</title><link>http://www.blogjava.net/supercrsky/articles/198595.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 05 May 2008 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/198595.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/198595.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/198595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/198595.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/198595.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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test<br />
<img id="Codehighlighter1_70_1567_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_1567_Open_Text.style.display='none'; Codehighlighter1_70_1567_Closed_Image.style.display='inline'; Codehighlighter1_70_1567_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_70_1567_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_70_1567_Closed_Text.style.display='none'; Codehighlighter1_70_1567_Open_Image.style.display='inline'; Codehighlighter1_70_1567_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_70_1567_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"  alt="" /></span><span id="Codehighlighter1_70_1567_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;找出重复次数最多的字符，并打印出数量和字符</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_140_1142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_140_1142_Open_Text.style.display='none'; Codehighlighter1_140_1142_Closed_Image.style.display='inline'; Codehighlighter1_140_1142_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_140_1142_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_140_1142_Closed_Text.style.display='none'; Codehighlighter1_140_1142_Open_Image.style.display='inline'; Codehighlighter1_140_1142_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_140_1142_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"  alt="" /></span><span id="Codehighlighter1_140_1142_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">aaabbdcfeeswdfttrrccaa</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;ls&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LinkedList();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;test&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Test();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;a.length();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_278_367_Open_Image" onclick="this.style.display='none'; Codehighlighter1_278_367_Open_Text.style.display='none'; Codehighlighter1_278_367_Closed_Image.style.display='inline'; Codehighlighter1_278_367_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_278_367_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_278_367_Closed_Text.style.display='none'; Codehighlighter1_278_367_Open_Image.style.display='inline'; Codehighlighter1_278_367_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_278_367_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"  alt="" /></span><span id="Codehighlighter1_278_367_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">test.isHave(ls,&nbsp;(a.charAt(i)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">)))<br />
<img id="Codehighlighter1_328_363_Open_Image" onclick="this.style.display='none'; Codehighlighter1_328_363_Open_Text.style.display='none'; Codehighlighter1_328_363_Closed_Image.style.display='inline'; Codehighlighter1_328_363_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_328_363_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_328_363_Closed_Text.style.display='none'; Codehighlighter1_328_363_Open_Image.style.display='inline'; Codehighlighter1_328_363_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_328_363_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"  alt="" /></span><span id="Codehighlighter1_328_363_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ls.add(a.charAt(i)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;保存相应的位置的字母的个数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;ret&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[ls.size()];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;最大数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;max&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ls.size();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_486_589_Open_Image" onclick="this.style.display='none'; Codehighlighter1_486_589_Open_Text.style.display='none'; Codehighlighter1_486_589_Closed_Image.style.display='inline'; Codehighlighter1_486_589_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_486_589_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_486_589_Closed_Text.style.display='none'; Codehighlighter1_486_589_Open_Image.style.display='inline'; Codehighlighter1_486_589_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_486_589_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"  alt="" /></span><span id="Codehighlighter1_486_589_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;test.getNum(ls.get(i).toString(),&nbsp;a);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ret[i]&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;max)<br />
<img id="Codehighlighter1_562_585_Open_Image" onclick="this.style.display='none'; Codehighlighter1_562_585_Open_Text.style.display='none'; Codehighlighter1_562_585_Closed_Image.style.display='inline'; Codehighlighter1_562_585_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_562_585_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_562_585_Closed_Text.style.display='none'; Codehighlighter1_562_585_Open_Image.style.display='inline'; Codehighlighter1_562_585_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_562_585_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"  alt="" /></span><span id="Codehighlighter1_562_585_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ret[i];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;检查个数最大的，返回位置列表</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;ls2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LinkedList();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ret.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_683_740_Open_Image" onclick="this.style.display='none'; Codehighlighter1_683_740_Open_Text.style.display='none'; Codehighlighter1_683_740_Closed_Image.style.display='inline'; Codehighlighter1_683_740_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_683_740_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_683_740_Closed_Text.style.display='none'; Codehighlighter1_683_740_Open_Image.style.display='inline'; Codehighlighter1_683_740_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_683_740_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"  alt="" /></span><span id="Codehighlighter1_683_740_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ret[i]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;max)<br />
<img id="Codehighlighter1_710_736_Open_Image" onclick="this.style.display='none'; Codehighlighter1_710_736_Open_Text.style.display='none'; Codehighlighter1_710_736_Closed_Image.style.display='inline'; Codehighlighter1_710_736_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_710_736_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_710_736_Closed_Text.style.display='none'; Codehighlighter1_710_736_Open_Image.style.display='inline'; Codehighlighter1_710_736_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_710_736_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"  alt="" /></span><span id="Codehighlighter1_710_736_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ls2.add(i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;遍历ls2，打印出相应字母和个数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">\n打印出个数最多的字母及个数：</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ls2.size();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_849_978_Open_Image" onclick="this.style.display='none'; Codehighlighter1_849_978_Open_Text.style.display='none'; Codehighlighter1_849_978_Closed_Image.style.display='inline'; Codehighlighter1_849_978_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_849_978_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_849_978_Closed_Text.style.display='none'; Codehighlighter1_849_978_Open_Image.style.display='inline'; Codehighlighter1_849_978_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_849_978_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"  alt="" /></span><span id="Codehighlighter1_849_978_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Integer.parseInt(ls2.get(i).toString());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">字母：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ls.get(i).toString()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;个数：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ret[m]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">\n打印出所有字母及个数：</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ret.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_1062_1139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1062_1139_Open_Text.style.display='none'; Codehighlighter1_1062_1139_Closed_Image.style.display='inline'; Codehighlighter1_1062_1139_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1062_1139_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1062_1139_Closed_Text.style.display='none'; Codehighlighter1_1062_1139_Open_Image.style.display='inline'; Codehighlighter1_1062_1139_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1062_1139_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"  alt="" /></span><span id="Codehighlighter1_1062_1139_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">字母：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ls.get(i).toString()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;个数：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ret[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;查询该列表&nbsp;ls&nbsp;是否有该字符</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isHave(List&nbsp;ls,&nbsp;String&nbsp;k)<br />
<img id="Codehighlighter1_1209_1374_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1209_1374_Open_Text.style.display='none'; Codehighlighter1_1209_1374_Closed_Image.style.display='inline'; Codehighlighter1_1209_1374_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1209_1374_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1209_1374_Closed_Text.style.display='none'; Codehighlighter1_1209_1374_Open_Image.style.display='inline'; Codehighlighter1_1209_1374_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1209_1374_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"  alt="" /></span><span id="Codehighlighter1_1209_1374_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;ls.size();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_1275_1356_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1275_1356_Open_Text.style.display='none'; Codehighlighter1_1275_1356_Closed_Image.style.display='inline'; Codehighlighter1_1275_1356_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1275_1356_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1275_1356_Closed_Text.style.display='none'; Codehighlighter1_1275_1356_Open_Image.style.display='inline'; Codehighlighter1_1275_1356_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1275_1356_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"  alt="" /></span><span id="Codehighlighter1_1275_1356_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ls.get(i).toString().equals(k))<br />
<img id="Codehighlighter1_1319_1352_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1319_1352_Open_Text.style.display='none'; Codehighlighter1_1319_1352_Closed_Image.style.display='inline'; Codehighlighter1_1319_1352_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1319_1352_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1319_1352_Closed_Text.style.display='none'; Codehighlighter1_1319_1352_Open_Image.style.display='inline'; Codehighlighter1_1319_1352_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1319_1352_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"  alt="" /></span><span id="Codehighlighter1_1319_1352_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;flag;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;查询&nbsp;a&nbsp;中有几个&nbsp;k</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getNum(String&nbsp;k,&nbsp;String&nbsp;a)<br />
<img id="Codehighlighter1_1434_1565_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1434_1565_Open_Text.style.display='none'; Codehighlighter1_1434_1565_Closed_Image.style.display='inline'; Codehighlighter1_1434_1565_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1434_1565_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1434_1565_Closed_Text.style.display='none'; Codehighlighter1_1434_1565_Open_Image.style.display='inline'; Codehighlighter1_1434_1565_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1434_1565_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"  alt="" /></span><span id="Codehighlighter1_1434_1565_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;a.length();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_1490_1550_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1490_1550_Open_Text.style.display='none'; Codehighlighter1_1490_1550_Closed_Image.style.display='inline'; Codehighlighter1_1490_1550_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1490_1550_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1490_1550_Closed_Text.style.display='none'; Codehighlighter1_1490_1550_Open_Image.style.display='inline'; Codehighlighter1_1490_1550_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1490_1550_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"  alt="" /></span><span id="Codehighlighter1_1490_1550_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((a.charAt(i)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">).equals(k))<br />
<img id="Codehighlighter1_1532_1546_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1532_1546_Open_Text.style.display='none'; Codehighlighter1_1532_1546_Closed_Image.style.display='inline'; Codehighlighter1_1532_1546_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1532_1546_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1532_1546_Closed_Text.style.display='none'; Codehighlighter1_1532_1546_Open_Image.style.display='inline'; Codehighlighter1_1532_1546_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1532_1546_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"  alt="" /></span><span id="Codehighlighter1_1532_1546_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;j;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/198595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-05-05 23:17 <a href="http://www.blogjava.net/supercrsky/articles/198595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不用临时变量交换两个变量的值</title><link>http://www.blogjava.net/supercrsky/articles/190298.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Wed, 02 Apr 2008 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/190298.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/190298.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/190298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/190298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/190298.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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test<br />
<img id="Codehighlighter1_32_286_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_286_Open_Text.style.display='none'; Codehighlighter1_32_286_Closed_Image.style.display='inline'; Codehighlighter1_32_286_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_32_286_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_32_286_Closed_Text.style.display='none'; Codehighlighter1_32_286_Open_Image.style.display='inline'; Codehighlighter1_32_286_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_32_286_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_32_286_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_75_284_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_284_Open_Text.style.display='none'; Codehighlighter1_75_284_Closed_Image.style.display='inline'; Codehighlighter1_75_284_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_75_284_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_75_284_Closed_Text.style.display='none'; Codehighlighter1_75_284_Open_Image.style.display='inline'; Codehighlighter1_75_284_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_75_284_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"  alt="" /></span><span id="Codehighlighter1_75_284_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;a;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(b);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(b);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
测试正常.
<img src ="http://www.blogjava.net/supercrsky/aggbug/190298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-04-02 10:49 <a href="http://www.blogjava.net/supercrsky/articles/190298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读Class文件的示例程序</title><link>http://www.blogjava.net/supercrsky/articles/182116.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Mon, 25 Feb 2008 22:58:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/182116.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/182116.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/182116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/182116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/182116.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: import&nbsp;java.io.BufferedInputStream;import&nbsp;java.io.BufferedWriter;import&nbsp;java.io.FileInputStream;import&nbsp;java.io.FileWriter;import&nbsp;java.io.IOException;public&nbsp;clas...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/182116.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/182116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-02-26 06:58 <a href="http://www.blogjava.net/supercrsky/articles/182116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两个变量交换的三种方法</title><link>http://www.blogjava.net/supercrsky/articles/178346.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Tue, 29 Jan 2008 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/178346.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/178346.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/178346.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/178346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/178346.html</trackback:ping><description><![CDATA[<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">在我们写程序的时候，经常会遇到两个变量Ａ与Ｂ交换的操作，通常大家会借助第三个变量来实现： </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">如：C=A;A=B;B=C;</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这种方法需要借助第三变量来实现；</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">第二种方法是利用加减法实现两个变量的交换，</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">如：A=A+B;B=A-B;A=A-B;</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">第三种方法是得用位异或运算来实现，也是效率最高的一种，在大量数据交换的时候，效率明显优于前两种方法，</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">如：A=A^B;B=A^B;A=A^B;</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">原理：利用一个数异或本身等于０和异或运算符合交换率。</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">希望对大家有帮助！ </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;</p>
<p></span></span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;VarTest<br />
<img id="Codehighlighter1_36_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_492_Open_Text.style.display='none'; Codehighlighter1_36_492_Closed_Image.style.display='inline'; Codehighlighter1_36_492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_36_492_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_36_492_Closed_Text.style.display='none'; Codehighlighter1_36_492_Open_Image.style.display='inline'; Codehighlighter1_36_492_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_36_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"  alt="" /></span><span id="Codehighlighter1_36_492_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_79_489_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_489_Open_Text.style.display='none'; Codehighlighter1_79_489_Closed_Image.style.display='inline'; Codehighlighter1_79_489_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_79_489_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_79_489_Closed_Text.style.display='none'; Codehighlighter1_79_489_Open_Image.style.display='inline'; Codehighlighter1_79_489_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_79_489_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"  alt="" /></span><span id="Codehighlighter1_79_489_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;c;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;c;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">a:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;a);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">b:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">**********</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">a:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;a);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">b:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">************</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;b;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">a:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;a);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">b:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;</span></span></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/178346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-29 13:01 <a href="http://www.blogjava.net/supercrsky/articles/178346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java调用批处理或可执行文件</title><link>http://www.blogjava.net/supercrsky/articles/176525.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 19 Jan 2008 13:18:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/176525.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/176525.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/176525.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/176525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/176525.html</trackback:ping><description><![CDATA[<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">用Java编写应用时，有时需要在程序中调用另一个现成的可执行程序或系统命令，这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式： <br />
... <br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">Process&nbsp;process&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Runtime.getRuntime().exec(</span><span style="color: #000000">"</span><span style="color: #000000">.\\p.exe</span><span style="color: #000000">"</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />process.waitfor(&nbsp;);&nbsp;</span></span></span></div>
<p><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt">... <br />
在上面的程序中，第一行的&#8220;.\\p.exe&#8221;是要执行的程序名，Runtime.getRuntime()返回当前应用程序的Runtime对象，该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序，并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。 <br />
但在windows平台上，如果处理不当，有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况： <br />
1、执行DOS的内部命令 <br />
如果要执行一条DOS内部命令，有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如，执行dir命令，在NT上， 可写成exec("cmd.exe /c dir")，在windows 95/98下，可写成&#8220;command.exe /c dir&#8221;，其中参数&#8220;/c&#8221;表示命令执行后关闭Dos立即关闭窗口。另一种方法是，把内部命令放在一个批命令my_dir.bat文件中，在Java程序中写成exec("my_dir.bat")。如果仅仅写成exec("dir")，Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性，需要在程序中读取运行的操作系统平台，以调用不同的命令解释器。后一种方法则不需要做更多的处理。 <br />
2、打开一个不可执行的文件 <br />
打开一个不可执行的文件，但该文件存在关联的应用程序，则可以有两种方式。 以打开一个word文档a.doc文件为例，Java中可以有以下两种写法： <br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">exec(</span><span style="color: #000000">"</span><span style="color: #000000">start&nbsp;.\\a.doc</span><span style="color: #000000">"</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />exec(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;c:\\Program&nbsp;Files\\Microsoft&nbsp;Office\\office\\winword.exe&nbsp;.\\a.doc</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;</span></span></span></div>
<p><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt">显然，前一种方法更为简捷方便。 <br />
3、执行一个有标准输出的DOS可执行程序 <br />
在windows平台上，运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭，从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是，该可执行程序的标准输出比较多，而运行窗口的标准输出缓冲区不够大。解决的办法是，利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出，在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下： <br />
... <br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">String&nbsp;ls_1;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Process&nbsp;process&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Runtime.getRuntime().exec(</span><span style="color: #000000">"</span><span style="color: #000000">cmd&nbsp;/c&nbsp;dir&nbsp;\\windows</span><span style="color: #000000">"</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />BufferedReader&nbsp;bufferedReader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;BufferedReader(&nbsp;\&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">new</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;InputStreamReader(process.getInputStream());&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(&nbsp;(ls_1</span><span style="color: #000000">=</span><span style="color: #000000">bufferedReader.readLine())&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">)&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />System.out.println(ls_1);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />process.waitfor(&nbsp;);&nbsp;</span></span></span></div>
<p><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt">今天在做客户端程序的自动更新，简单描述一下，就是从服务器上将更新包下载下来，然后在本地解压缩，最后删掉~功能很简单~</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">但是问题出在使用JAVA的ZIP模块做文件的解压缩不是想象的那么简单，资源需要释放，一个不小心就没有办法删除掉原有ZIP文件了~资源的占用确实是个大问题，但是好在，客户端程序更新完是要重启的，一切都烟消云散了~对于删除不掉ZIP文件的问题，我也流氓一下~用DEL硬删除~此处一定要注意！<br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">Process&nbsp;process&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Runtime.getRuntime().exec(</span><span style="color: #000000">"</span><span style="color: #000000">cmd&nbsp;/c&nbsp;del&nbsp;f:\\aaa.doc</span><span style="color: #000000">"</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></span></span></div>
<p><span style="font-family: Comic Sans MS"><br />
</span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这样的调用是没有问题~</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">Process&nbsp;process&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Runtime.getRuntime().exec(</span><span style="color: #000000">"</span><span style="color: #000000">del&nbsp;f:\\aaa.doc</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;</span></span></span></div>
<p><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这样写是不可能对的~<br />
用Java调用Dos命令时直接用以下命令就可以完成：</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">String&nbsp;command</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">ping&nbsp;192.168.1.1</span><span style="color: #000000">"</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Runtime.getRuntime().exec(command);&nbsp;</span></span></span></div>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">并可以使用Process类的getInputStream()方法获取输出结果，但是，我在调用一些工具软件的Dos命令时却出现了问题，输出结果只能取到前面一小部分，经测试发现，exec(command)之后没多久，Java就认为这个进程结束了，并立即开始执行下面的操作，但这时command实际上并没有结束，但由于流的关闭而被迫中断。</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">后来用了同事介绍的方法，将这些Dos命令全部放在一个批处理文件当中，并用<br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">String&nbsp;command</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">cmd&nbsp;/c&nbsp;start&nbsp;d:\\wmv.bat</span><span style="color: #000000">"</span></span></span></div>
<p><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt">的方法来调用（如果不加cmd /c的话，执行同样会出错），这样一来，Java只是新起了一个进程去执行批处理，并不会去管进程是否结束，而是直接开始执行下面的语句。</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">但这样还是有一个问题，就是Java和这个批处理没法进行交互，我试过了Process中的existValue()及waitFor()方法（都是网上说可用来判断进程是否结束的方法），但都起不到作用，往往是进程已经结束了，但Java还认为没结束，或者干脆是Java认为结束了，但进程却实际还在运行着。</span></span></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/176525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-19 21:18 <a href="http://www.blogjava.net/supercrsky/articles/176525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>throws和throw的区别</title><link>http://www.blogjava.net/supercrsky/articles/176511.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 19 Jan 2008 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/176511.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/176511.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/176511.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/176511.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/176511.html</trackback:ping><description><![CDATA[<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这两者虽然看起来只有一个s的区别，但是作用完全不一样。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
/////java处理异常方式/////////////////////////////// </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp; 在java代码中如果发生异常的话，jvm会抛出异常对象，导致程序代码中断，这个时候jvm在做的操作就是：创建异常对象，然后抛出，比如： </span></span></p>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">；&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">；&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">；&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">/</span><span style="color: #000000">j；</span><span style="color: #008000">//</span><span style="color: #008000">除0错误&nbsp;</span></span></span><span style="color: #008000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">System.out.println(res);&nbsp;</span></span></span></div>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这5句代码运行到第四句会中断，因为jvm抛出了异常 <br />
&nbsp;<br />
////throw的作用///////////////////////////////////////// <br />
手动抛出异常 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">但是有时候有些错误在jvm看来不是错误，比如说 <br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">100</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />System.out.println(age);&nbsp;</span></span></span></div>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 很正常的整形变量赋值，但是在我们眼中看来就不正常，谁的年龄会是负的呢。 所以我们需要自己手动引发异常，这就是throw的作用。<br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">100</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">(age</span><span style="color: #000000">&lt;</span><span style="color: #000000">0</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">)&nbsp;<br />
<img id="Codehighlighter1_38_120_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_120_Open_Text.style.display='none'; Codehighlighter1_38_120_Closed_Image.style.display='inline'; Codehighlighter1_38_120_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_38_120_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_38_120_Closed_Text.style.display='none'; Codehighlighter1_38_120_Open_Image.style.display='inline'; Codehighlighter1_38_120_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_38_120_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"  alt="" /></span></span></span><span id="Codehighlighter1_38_120_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;Exception&nbsp;e&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Exception(</span><span style="color: #000000">"</span><span style="color: #000000">throw&nbsp;exception</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">创建异常对象&nbsp;</span></span></span><span style="color: #008000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;e;</span><span style="color: #008000">//</span><span style="color: #008000">抛出异常&nbsp;</span></span></span><span style="color: #008000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">}</span></span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />System.out.println(age);&nbsp;</span></span></span></div>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">////throws的作用/////////////////////////////////// <br />
声明方法可能回避的异常 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp; 有异常被抛出了，就要做处理，所以java中有try-catch。可是有时候一个方法中产生了异常，但是不知道该怎么处理它，那么就放着不管，当有异常抛出时会中断该方法，而异常被抛到这个方法的调用者那里。这个有点像下属处理不了的问题就交到上司手里一样，这种情况称为回避异常。</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp; 但是这使得调用这个方法就有了危险，因为谁也不知道这个方法什么时候会丢一个什么样的异常给调用者，所以在定义方法时，就需要在方法头部分使用throws来声明这个方法可能回避的异常。<br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;fun()</span><span style="color: #0000ff">throws</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;IOException,SQLException&nbsp;<br />
<img id="Codehighlighter1_43_51_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_51_Open_Text.style.display='none'; Codehighlighter1_43_51_Closed_Image.style.display='inline'; Codehighlighter1_43_51_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_43_51_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_43_51_Closed_Text.style.display='none'; Codehighlighter1_43_51_Open_Image.style.display='inline'; Codehighlighter1_43_51_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_43_51_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"  alt="" /></span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span id="Codehighlighter1_43_51_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span></span></span></div>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这表示 fun方法可能会丢两个异常出来，那么在调用fun的时候就会做好准备，比如可以这样 <br />
</span></span></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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img id="Codehighlighter1_3_17_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3_17_Open_Text.style.display='none'; Codehighlighter1_3_17_Closed_Image.style.display='inline'; Codehighlighter1_3_17_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_3_17_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_3_17_Closed_Text.style.display='none'; Codehighlighter1_3_17_Open_Image.style.display='inline'; Codehighlighter1_3_17_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">try</span><span id="Codehighlighter1_3_17_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"  alt="" /></span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span id="Codehighlighter1_3_17_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;fun();&nbsp;<br />
<img id="Codehighlighter1_39_41_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_41_Open_Text.style.display='none'; Codehighlighter1_39_41_Closed_Image.style.display='inline'; Codehighlighter1_39_41_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_39_41_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_41_Closed_Text.style.display='none'; Codehighlighter1_39_41_Open_Image.style.display='inline'; Codehighlighter1_39_41_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />}</span></span><span style="color: #0000ff">catch</span><span style="color: #000000">(IOException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_39_41_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"  alt="" /></span><span id="Codehighlighter1_39_41_Open_Text"><span style="color: #000000">{&nbsp;}</span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img id="Codehighlighter1_65_67_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_67_Open_Text.style.display='none'; Codehighlighter1_65_67_Closed_Image.style.display='inline'; Codehighlighter1_65_67_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_65_67_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_65_67_Closed_Text.style.display='none'; Codehighlighter1_65_67_Open_Image.style.display='inline'; Codehighlighter1_65_67_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #0000ff">catch</span><span style="color: #000000">(SQLException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_65_67_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"  alt="" /></span><span id="Codehighlighter1_65_67_Open_Text"><span style="color: #000000">{&nbsp;}</span></span><span style="color: #000000">&nbsp;</span></span></span></div>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;<br />
</span></span></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/176511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-19 18:47 <a href="http://www.blogjava.net/supercrsky/articles/176511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA死锁解密</title><link>http://www.blogjava.net/supercrsky/articles/176063.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Thu, 17 Jan 2008 13:15:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/176063.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/176063.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/176063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/176063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/176063.html</trackback:ping><description><![CDATA[<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">一般来说，每一种使用线程的语言中都存在线程死锁问题，Java开发中遇到线程死锁问题也是非常普遍。笔者在程序开发中就常常碰到死锁的问题，并经常束手无策。本文分享笔者在JAVA开发中对线程死锁的一些看法。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 一. 什么是线程 <br />
&nbsp;&nbsp;&nbsp; 在谈到线程死锁的时候，我们首先必须了解什么是Java线程。一个程序的进程会包含多个线程，一个线程就是运行在一个进程中的一个逻辑流。多线程允许在程序中并发执行多个指令流，每个指令流都称为一个线程，彼此间互相独立。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 线程又称为轻量级进程，它和进程一样拥有独立的执行控制，由操作系统负责调度，区别在于线程没有独立的存储空间，而是和所属进程中的其它线程共享一个存储空间，这使得线程间的通信较进程简单。笔者的经验是编写多线程序，必须注意每个线程是否干扰了其他线程的工作。每个进程开始生命周期时都是单一线程，称为&#8220;主线程&#8221;，在某一时刻主线程会创建一个对等线程。如果主线程停滞则系统就会切换到其对等线程。和一个进程相关的线程此时会组成一个对等线程池，一个线程可以杀死其任意对等线程。 <br />
&nbsp; <br />
因为每个线程都能读写相同的共享数据。这样就带来了新的麻烦：由于数据共享会带来同步问题，进而会导致死锁的产生。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 二. 死锁的机制 <br />
&nbsp;&nbsp;&nbsp; 由多线程带来的性能改善是以可靠性为代价的，主要是因为有可能产生线程死锁。死锁是这样一种情形：多个线程同时被阻塞，它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞，因此程序不能正常运行。简单的说就是:线程死锁时，第一个线程等待第二个线程释放资源，而同时第二个线程又在等待第一个线程释放资源。这里举一个通俗的例子：如在人行道上两个人迎面相遇，为了给对方让道，两人同时向一侧迈出一步，双方无法通过，又同时向另一侧迈出一步，这样还是无法通过。假设这种情况一直持续下去，这样就会发生死锁现象。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 导致死锁的根源在于不适当地运用&#8220;synchronized&#8221;关键词来管理线程对特定对象的访问。&#8220;synchronized&#8221;关键词的作用是，确保在某个时刻只有一个线程被允许执行特定的代码块，因此，被允许执行的线程首先必须拥有对变量或对象的排他性访问权。当线程访问对象时，线程会给对象加锁，而这个锁导致其它也想访问同一对象的线程被阻塞，直至第一个线程释放它加在对象上的锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; Java中每个对象都有一把锁与之对应。但Java不提供单独的lock和unlock操作。下面笔者分析死锁的两个过程&#8220;上锁&#8221;和&#8220;锁死&#8221; 。</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">(1) 上锁 <br />
&nbsp;&nbsp;&nbsp; 许多线程在执行中必须考虑与其他线程之间共享数据或协调执行状态，就需要同步机制。因此大多数应用程序要求线程互相通信来同步它们的动作，在 Java 程序中最简单实现同步的方法就是上锁。在 Java 编程中，所有的对象都有锁。线程可以使用 synchronized 关键字来获得锁。在任一时刻对于给定的类的实例，方法或同步的代码块只能被一个线程执行。这是因为代码在执行之前要求获得对象的锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 为了防止同时访问共享资源，线程在使用资源的前后可以给该资源上锁和开锁。给共享变量上锁就使得 Java 线程能够快速方便地通信和同步。某个线程若给一个对象上了锁，就可以知道没有其他线程能够访问该对象。即使在抢占式模型中，其他线程也不能够访问此对象，直到上锁的线程被唤醒、完成工作并开锁。那些试图访问一个上锁对象的线程通常会进入睡眠状态，直到上锁的线程开锁。一旦锁被打开，这些睡眠进程就会被唤醒并移到准备就绪队列中。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">(2)锁死 <br />
&nbsp;&nbsp;&nbsp; 如果程序中有几个竞争资源的并发线程,那么保证均衡是很重要的。系统均衡是指每个线程在执行过程中都能充分访问有限的资源，系统中没有饿死和死锁的线程。当多个并发的线程分别试图同时占有两个锁时，会出现加锁冲突的情形。如果一个线程占有了另一个线程必需的锁，互相等待时被阻塞就有可能出现死锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 在编写多线程代码时，笔者认为死锁是最难处理的问题之一。因为死锁可能在最意想不到的地方发生，所以查找和修正它既费时又费力。例如，常见的例子如下面这段程序。 </span></span></p>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</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"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img id="Codehighlighter1_43_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_260_Open_Text.style.display='none'; Codehighlighter1_43_260_Closed_Image.style.display='inline'; Codehighlighter1_43_260_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_43_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_43_260_Closed_Text.style.display='none'; Codehighlighter1_43_260_Open_Image.style.display='inline'; Codehighlighter1_43_260_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;sumArrays(</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;a1,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;a2)<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_43_260_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"  alt="" /></span></span></span><span id="Codehighlighter1_43_260_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;a1.length;<br />
<img id="Codehighlighter1_114_257_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_257_Open_Text.style.display='none'; Codehighlighter1_114_257_Closed_Image.style.display='inline'; Codehighlighter1_114_257_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_114_257_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_114_257_Closed_Text.style.display='none'; Codehighlighter1_114_257_Open_Image.style.display='inline'; Codehighlighter1_114_257_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(size&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;a2.length)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_114_257_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"  alt="" /></span></span></span><span id="Codehighlighter1_114_257_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img id="Codehighlighter1_141_252_Open_Image" onclick="this.style.display='none'; Codehighlighter1_141_252_Open_Text.style.display='none'; Codehighlighter1_141_252_Closed_Image.style.display='inline'; Codehighlighter1_141_252_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_141_252_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_141_252_Closed_Text.style.display='none'; Codehighlighter1_141_252_Open_Image.style.display='inline'; Codehighlighter1_141_252_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">(a1)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_141_252_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"  alt="" /></span></span></span><span id="Codehighlighter1_141_252_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;synchronized(a2)&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;size;&nbsp;i++)</span></span></span><span style="color: #008000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;a1[i]&nbsp;</span><span style="color: #000000">+</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;a2[i];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;}</span></span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">return</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;value;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />}</span></span></span></div>
<p><span style="font-family: Comic Sans MS"></span>&nbsp;</p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这段代码在求和操作中访问两个数组对象之前锁定了这两个数组对象。它形式简短，编写也适合所要执行的任务；但不幸的是，它有一个潜在的问题。这个问题就是它埋下了死锁的种子。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">三. 如何检测死锁的根源 <br />
&nbsp;&nbsp;&nbsp; Java并不提供对死锁的检测机制。笔者认为常用分析Java代码问题的最有效的工具仍然是java thread dump。当死锁发生时，JVM通常处于挂起状态，thread dump可以给出静态稳定的信息，查找死锁只需要查找有问题的线程。Java虚拟机死锁发生时，从操作系统上观察，虚拟机的CPU占用率为零，很快会从top或prstat的输出中消失。这时可以收集thread dump，查找"waiting for monitor entry"的thread，如果大量thread都在等待给同一个地址上锁（因为对于Java，一个对象只有一把锁），这说明很可能死锁发生了。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 为了确定问题，笔者建议在隔几分钟后再次收集一次thread dump，如果得到的输出相同，仍然是大量thread都在等待给同一个地址上锁，那么肯定是死锁了。如何找到当前持有锁的线程是解决问题的关键。一般方法是搜索thread dump，查找"locked，找到持有锁的线程。如果持有锁的线程还在等待给另一个对象上锁，那么还是按上面的办法顺藤摸瓜，直到找到死锁的根源为止。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 另外，在thread dump里还会经常看到这样的线程，它们是等待一个条件而主动放弃锁的线程。有时也需要分析这类线程，尤其是线程等待的条件。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 四. 几种常见死锁及对策 <br />
&nbsp;&nbsp;&nbsp; 解决死锁没有简单的方法，这是因为线程产生死锁都各有各的原因，而且往往具有很高的负载。大多数软件测试产生不了足够多的负载，所以不可能暴露所有的线程错误。在这里中，笔者将讨论开发过程常见的4类典型的死锁和解决对策。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　 (1)数据库死锁 <br />
　　在数据库中，如果一个连接占用了另一个连接所需的数据库锁，则它可以阻塞另一个连接。如果两个或两个以上的连接相互阻塞，则它们都不能继续执行，这种情况称为数据库死锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　数据库死锁问题不易处理，通常数据行进行更新时，需要锁定该数据行，执行更新，然后在提交或回滚封闭事务时释放锁。由于数据库平台、配置的隔离级以及查询提示的不同，获取的锁可能是细粒度或粗粒度的，它会阻塞（或不阻塞）其他对同一数据行、表或数据库的查询。基于数据库模式，读写操作会要求遍历或更新多个索引、验证约束、执行触发器等。每个要求都会引入更多锁。此外，其他应用程序还可能正在访问同一数据库模式中的某些对象，并获取不同应用程序所具有的锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　所有这些因素综合在一起，数据库死锁几乎不可能被消除了。值得庆幸的是，数据库死锁通常是可恢复的：当数据库发现死锁时，它会强制销毁一个连接（通常是使用最少的连接），并回滚其事务。这将释放所有与已经结束的事务相关联的锁，至少允许其他连接中有一个可以获取它们正在被阻塞的锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">由于数据库具有这种典型的死锁处理行为，所以当出现数据库死锁问题时，数据库常常只能重试整个事务。当数据库连接被销毁时，会抛出可被应用程序捕获的异常，并标识为数据库死锁。如果允许死锁异常传播到初始化该事务的代码层之外，则该代码层可以启动一个新事务并重做先前所有工作。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　当出现问题就重试，由于数据库可以自由地获取锁，所以几乎不可能保证两个或两个以上的线程不发生数据库死锁。此方法至少能保证在出现某些数据库死锁情况时，应用程序能正常运行。</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">(2)资源池耗尽死锁 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　客户端的增加导致资源池耗尽死锁是由于负载而造成的，即资源池太小，而每个线程需要的资源超过了池中的可用资源。假设连接池最多有10个连接，同时有10个对外部并发调用。这些线程中每一个都需要一个数据库连接用来清空池。现在，每个线程都执行嵌套的调用。则所有线程都不能继续，但又都不放弃自己的第一个数据库连接。这样，10个线程都将被死锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　研究此类死锁，会发现线程存储中有大量等待获取资源的线程，以及同等数量的空闲且未阻塞的活动数据库连接。当应用程序死锁时，如果可以在运行时检测连接池，就能确认连接池实际上已空。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　修复此类死锁的方法包括：增加连接池的大小或者重构代码，以便单个线程不需要同时使用很多数据库连接。或者可以设置内部调用使用不同的连接池，即使外部调用的连接池为空，内部调用也能使用自己的连接池继续。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">(3)单线程、多冲突数据库连接死锁 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　对同一线程执行嵌套的调用有时出现死锁，此情形即使在非高负载系统中通常也会发生。当第一个（外部）连接已获取第二个（内部）连接所需要的数据库锁，则第二个连接将永久阻塞第一个连接，并等待第一个连接被提交或回滚，这就出现了死锁情形。因为数据库没有注意到两个连接之间的关系，所以数据库不会将此情形检测为死锁。这样即使不存在并发，此代码也将导致死锁。此情形有多种具体的变种，可以涉及多个线程和两个以上的数据库连接。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">(4)Java虚拟机锁与数据库锁冲突 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　　这种情形发生在数据库锁与Java虚拟机锁并存的时候。在这种情况下，一个线程占有一个数据库锁并尝试获取Java虚拟机锁。同时，另一个线程占有Java虚拟机锁并尝试获取数据库锁。此时，数据库发现一个连接阻塞了另一个连接，但由于无法阻止连接继续，所以不会检测到死锁。Java虚拟机发现同步的锁中有一个线程，并有另一个尝试进入的线程，所以即使Java虚拟机能检测到死锁并对它们进行处理，它还是不会检测到这种情况。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">　 总而言之，JAVA应用程序中的死锁是一个大问题——它能导致整个应用程序慢慢终止，还很难被分离和修复，尤其是当开发人员不熟悉如何分析死锁环境的时候。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">五. 死锁的经验法则 <br />
&nbsp;&nbsp;&nbsp; 笔者在开发中总结以下死锁问题的经验。 <br />
&nbsp;&nbsp;&nbsp; (1) 对大多数的Java程序员来说最简单的防止死锁的方法是对竞争的资源引入序号,如果一个线程需要几个资源,那么它必须先得到小序号的资源,再申请大序号的资源。可以在Java代码中增加同步关键字的使用，这样可以减少死锁，但这样做也会影响性能。如果负载过重，数据库内部也有可能发生死锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; (2)了解数据库锁的发生行为。假定任何数据库访问都有可能陷入数据库死锁状况，但是都能正确进行重试。例如了解如何从应用服务器获取完整的线程转储以及从数据库获取数据库连接列表（包括互相阻塞的连接），知道每个数据库连接与哪个Java线程相关联。了解Java线程和数据库连接之间映射的最简单方法是向连接池访问模式添加日志记录功能。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; (3)当进行嵌套的调用时，了解哪些调用使用了与其它调用同样的数据库连接。即使嵌套调用运行在同一个全局事务中，它仍将使用不同的数据库连接，而不会导致嵌套死锁。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; (4)确保在峰值并发时有足够大的资源池。 </span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; (5)避免执行数据库调用或在占有Java虚拟机锁时，执行其他与Java虚拟机无关的操作。 <br />
　 <br />
&nbsp;&nbsp;&nbsp; 最重要的是，多线程设计虽然是困难的，但在开始编程之前详细设计系统能够帮助你避免难以发现死锁的问题。死锁在语言层面上不能解决，就需要一个良好设计来避免死锁。<br />
</span></span></p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/176063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-17 21:15 <a href="http://www.blogjava.net/supercrsky/articles/176063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>尽情享受每一个Byte</title><link>http://www.blogjava.net/supercrsky/articles/174844.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 12 Jan 2008 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/174844.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/174844.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/174844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/174844.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/174844.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS"><span style="font-size: 12pt">下面的程序循环遍历byte数值，以查找某个特定值。这个程序会打印出什么呢？ </span></span><font color="#3333cc">
<pre>
<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="font-family: Comic Sans MS"><span style="font-size: 12pt"><img id="Codehighlighter1_24_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_223_Open_Text.style.display='none'; Codehighlighter1_24_223_Closed_Image.style.display='inline'; Codehighlighter1_24_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_24_223_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_24_223_Closed_Text.style.display='none'; Codehighlighter1_24_223_Open_Image.style.display='inline'; Codehighlighter1_24_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BigDelight&nbsp;</span><span id="Codehighlighter1_24_223_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"  alt="" /></span></span></span><span id="Codehighlighter1_24_223_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img id="Codehighlighter1_69_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_221_Open_Text.style.display='none'; Codehighlighter1_69_221_Closed_Image.style.display='inline'; Codehighlighter1_69_221_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_69_221_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_221_Closed_Text.style.display='none'; Codehighlighter1_69_221_Open_Image.style.display='inline'; Codehighlighter1_69_221_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_69_221_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"  alt="" /></span></span></span><span id="Codehighlighter1_69_221_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img id="Codehighlighter1_134_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_215_Open_Text.style.display='none'; Codehighlighter1_134_215_Closed_Image.style.display='inline'; Codehighlighter1_134_215_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_134_215_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_134_215_Closed_Text.style.display='none'; Codehighlighter1_134_215_Open_Image.style.display='inline'; Codehighlighter1_134_215_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Byte.MIN_VALUE;&nbsp;b&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;Byte.MAX_VALUE;&nbsp;b</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_134_215_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"  alt="" /></span></span></span><span id="Codehighlighter1_134_215_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(b&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x90</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000">"</span><span style="color: #000000">Joy!</span><span style="color: #000000">"</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></div>
</pre>
</font><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">这个循环在除了Byte.MAX_VALUE之外所有的byte数值中进行迭代，以查找0x90。这个数值适合用byte表示，并且不等于Byte.MAX_VALUE，因此你可能会想这个循环在该迭代会找到它一次，并将打印出Joy!。但是，所见为虚。如果你运行该程序，就会发现它没有打印任何东西。怎么回事？ </span></span>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">简单地说，0x90是一个int常量，它超出了byte数值的范围。这与直觉是相悖的，因为0x90是一个两位的十六进制字面常量，每一个十六进制位都占据4个比特的位置，所以整个数值也只占据8个比特，即1个byte。问题在于byte是有符号类型。常量0x90是一个正的最高位被置位的8位int数值。合法的byte数值是从-128到+127，但是int常量0x90等于+144。 </span></span>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">拿一个byte与一个int进行的比较是一个混合类型比较（mixed-type comparison）。如果你把byte数值想象为苹果，把int数值想象成为桔子，那么该程序就是在拿苹果与桔子比较。请考虑表达式((byte)0x90 == 0x90)，尽管外表看起来是成立的，但是它却等于false。 </span></span>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">为了比较byte数值(byte)0x90和int数值0x90，Java通过拓宽原始类型转换将byte提升为一个int[JLS 5.1.2]，然后比较这两个int数值。因为byte是一个有符号类型，所以这个转换执行的是符号扩展，将负的byte数值提升为了在数字上相等的int数值。在本例中，该转换将(byte)0x90提升为int数值-112，它不等于int数值0x90，即+144。 </span></span>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">由于系统总是强制地将一个操作数提升到与另一个操作数相匹配的类型，所以混合类型比较总是容易把人搞糊涂。这种转换是不可视的，而且可能不会产生你所期望的结果。有若干种方法可以避免混合类型比较。我们继续有关水果的比喻，你可以选择拿苹果与苹果比较，或者是拿桔子与桔子比较。你可以将int转型为byte，之后你就可以拿一个byte与另一个byte进行比较了： </span></span>
<p><span style="font-family: Comic Sans MS"></span><font color="#3333cc">
<pre>
<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="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(b&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">byte</span><span style="color: #000000">)</span><span style="color: #000000">0x90</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Joy!</span><span style="color: #000000">"</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></div>
</pre>
</font><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">或者，你可以用一个屏蔽码来消除符号扩展的影响，从而将byte转型为int，之后你就可以拿一个int与另一个int进行比较了： </span></span><font color="#3333cc">
<pre>
<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="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((b&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0xff</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x90</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000">"</span><span style="color: #000000">Joy!</span><span style="color: #000000">"</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></div>
</pre>
</font><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">上面的两个解决方案都可以正常运行，但是避免这类问题的最佳方法还是将常量值移出到循环的外面，并将其在一个常量声明中定义它。下面是我们对此作出的第一个尝试： </span></span><font color="#3333cc">
<pre>
<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="font-family: Comic Sans MS"><span style="font-size: 12pt"><img id="Codehighlighter1_24_287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_287_Open_Text.style.display='none'; Codehighlighter1_24_287_Closed_Image.style.display='inline'; Codehighlighter1_24_287_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_24_287_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_24_287_Closed_Text.style.display='none'; Codehighlighter1_24_287_Open_Image.style.display='inline'; Codehighlighter1_24_287_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BigDelight&nbsp;</span><span id="Codehighlighter1_24_287_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"  alt="" /></span></span></span><span id="Codehighlighter1_24_287_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;TARGET&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x90</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_117_285_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_285_Open_Text.style.display='none'; Codehighlighter1_117_285_Closed_Image.style.display='inline'; Codehighlighter1_117_285_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_117_285_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_117_285_Closed_Text.style.display='none'; Codehighlighter1_117_285_Open_Image.style.display='inline'; Codehighlighter1_117_285_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_117_285_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"  alt="" /></span></span></span><span id="Codehighlighter1_117_285_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Byte.MIN_VALUE;&nbsp;b&nbsp;</span><span style="color: #000000">&lt;</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;<br />
<img id="Codehighlighter1_196_279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_196_279_Open_Text.style.display='none'; Codehighlighter1_196_279_Closed_Image.style.display='inline'; Codehighlighter1_196_279_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_196_279_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_196_279_Closed_Text.style.display='none'; Codehighlighter1_196_279_Open_Image.style.display='inline'; Codehighlighter1_196_279_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Byte.MAX_VALUE;&nbsp;b</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_196_279_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"  alt="" /></span></span></span><span id="Codehighlighter1_196_279_Open_Text"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(b&nbsp;</span><span style="color: #000000">==</span></span></span><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><span style="color: #000000">&nbsp;TARGET)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000">"</span><span style="color: #000000">Joy!</span><span style="color: #000000">"</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></div>
</pre>
</font><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">遗憾的是，它根本就通不过编译。常量声明有问题，编译器会告诉你问题所在：0x90对于byte类型来说不是一个有效的数值。如果你想下面这样订正该声明，那么程序将运行得非常好： </span></span><font color="#3333cc">
<pre>
<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="font-family: Comic Sans MS"><span style="font-size: 12pt"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;TARGET&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">byte</span><span style="color: #000000">)</span><span style="color: #000000">0x90</span></span></span><span style="color: #000000"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></div>
</pre>
</font><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">总之，要避免混合类型比较，因为它们内在地容易引起混乱.为了帮助实现这个目标，请使用声明的常量替代&#8220;魔幻数字&#8221;。你已经了解了这确实是一个好主意：它说明了常量的含义，集中了常量的定义，并且根除了重复的定义。现在你知道它还可以强制你去为每一个常量赋予适合其用途的类型，从而消除了产生混合类型比较的一种根源。 </span></span>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">对语言设计的教训是byte数值的符号扩展是产生bug和混乱的一种常见根源。而用来抵销符号扩展效果所需的屏蔽机制会使得程序显得混乱无序，从而降低了程序的可读性。因此，byte类型应该是无符号的。还可以考虑为所有的原始类型提供定义字面常量的机制，这可以减少对易于产生错误的类型转换的需求</span></span></p>
 <img src ="http://www.blogjava.net/supercrsky/aggbug/174844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-12 17:26 <a href="http://www.blogjava.net/supercrsky/articles/174844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个标准的MD5加密类</title><link>http://www.blogjava.net/supercrsky/articles/174829.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 12 Jan 2008 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/174829.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/174829.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/174829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/174829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/174829.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: MD5Code:package&nbsp;com.util;public&nbsp;class&nbsp;MD5Code{&nbsp;&nbsp;&nbsp;&nbsp;/**//*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;下面这些S11-S44实际上是一个4*4的矩阵，在原始的C实现中是用#define&nbsp;实现的，&nbsp;这里把...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/174829.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/174829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-12 16:34 <a href="http://www.blogjava.net/supercrsky/articles/174829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程编程的设计模式 临界区模式 </title><link>http://www.blogjava.net/supercrsky/articles/173184.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sun, 06 Jan 2008 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/173184.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/173184.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/173184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/173184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/173184.html</trackback:ping><description><![CDATA[<div class="newscon" style="font-size: 12pt; font-family: Comic Sans MS">临界区模式 Critical Section Pattern 是指在一个共享范围中只让一个线程执行的模式.<br />
它是所有其它多线程设计模式的基础,所以我首先来介绍它.<br />
把着眼点放在范围上,这个模式叫临界区模式,如果把作眼点放在执行的线程上,这个模式就叫<br />
单线程执行模式.<br />
<br />
首先我们来玩一个钻山洞的游戏,我 Axman,朋友 Sager,同事 Pentium4.三个人在八角游乐场<br />
循环钻山洞(KAO,减肥训练啊),每个人手里有一个牌子,每钻一次洞口的老头会把当前的次序,<br />
姓名,牌号显示出来,并检查名字与牌号是否一致.<br />
<br />
OK,这个游戏的参与者有游乐场老头Geezer,Player,就是我们,还有山洞 corrie.<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"><img id="Codehighlighter1_20_268_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_268_Open_Text.style.display='none'; Codehighlighter1_20_268_Closed_Image.style.display='inline'; Codehighlighter1_20_268_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_20_268_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_20_268_Closed_Text.style.display='none'; Codehighlighter1_20_268_Open_Image.style.display='inline'; Codehighlighter1_20_268_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Geezer&nbsp;</span><span id="Codehighlighter1_20_268_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"  alt="" /></span><span id="Codehighlighter1_20_268_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_60_266_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_266_Open_Text.style.display='none'; Codehighlighter1_60_266_Closed_Image.style.display='inline'; Codehighlighter1_60_266_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_60_266_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_60_266_Closed_Text.style.display='none'; Codehighlighter1_60_266_Open_Image.style.display='inline'; Codehighlighter1_60_266_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)</span><span id="Codehighlighter1_60_266_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"  alt="" /></span><span id="Codehighlighter1_60_266_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">预备,开始!</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />Corrie&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Corrie();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">只有一个山洞,所以生存一个实例后传给多个Player.</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Player(</span><span style="color: #000000">"</span><span style="color: #000000">Axman</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">001</span><span style="color: #000000">"</span><span style="color: #000000">,c).start();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Player(</span><span style="color: #000000">"</span><span style="color: #000000">Sager</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">002</span><span style="color: #000000">"</span><span style="color: #000000">,c).start();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Player(</span><span style="color: #000000">"</span><span style="color: #000000">Pentium4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">003</span><span style="color: #000000">"</span><span style="color: #000000">,c).start();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
<br />
这个类暂时没有什么多说的,它是一个Main的角色.<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_34_327_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_327_Open_Text.style.display='none'; Codehighlighter1_34_327_Closed_Image.style.display='inline'; Codehighlighter1_34_327_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_34_327_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_34_327_Closed_Text.style.display='none'; Codehighlighter1_34_327_Open_Image.style.display='inline'; Codehighlighter1_34_327_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Player&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Thread</span><span id="Codehighlighter1_34_327_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"  alt="" /></span><span id="Codehighlighter1_34_327_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;name;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;number;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;Corrie&nbsp;corrie;&nbsp;<br />
<img id="Codehighlighter1_179_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_179_246_Open_Text.style.display='none'; Codehighlighter1_179_246_Closed_Image.style.display='inline'; Codehighlighter1_179_246_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_179_246_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_179_246_Closed_Text.style.display='none'; Codehighlighter1_179_246_Open_Image.style.display='inline'; Codehighlighter1_179_246_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Player(String&nbsp;name,String&nbsp;number,Corrie&nbsp;corrie)&nbsp;</span><span id="Codehighlighter1_179_246_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_179_246_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.number&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;number;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.corrie&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;corrie;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_266_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_266_325_Open_Text.style.display='none'; Codehighlighter1_266_325_Closed_Image.style.display='inline'; Codehighlighter1_266_325_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_266_325_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_266_325_Closed_Text.style.display='none'; Codehighlighter1_266_325_Open_Image.style.display='inline'; Codehighlighter1_266_325_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()</span><span id="Codehighlighter1_266_325_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"  alt="" /></span><span id="Codehighlighter1_266_325_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_279_323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_279_323_Open_Text.style.display='none'; Codehighlighter1_279_323_Closed_Image.style.display='inline'; Codehighlighter1_279_323_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_279_323_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_279_323_Closed_Text.style.display='none'; Codehighlighter1_279_323_Open_Image.style.display='inline'; Codehighlighter1_279_323_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)</span><span id="Codehighlighter1_279_323_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"  alt="" /></span><span id="Codehighlighter1_279_323_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.corrie.into(</span><span style="color: #0000ff">this</span><span style="color: #000000">.name,</span><span style="color: #0000ff">this</span><span style="color: #000000">.number);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
在这里,我们把成员字段都设成final的,为了说明一个Player一旦构造,他的名字和牌号就不能改<br />
变,简单说在游戏中,我,Sager,Pentium4三个人不会自己偷偷把自己的牌号换了,也不会偷偷地去<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.</span><span style="color: #000000">*</span><span style="color: #000000">;&nbsp;<br />
<img id="Codehighlighter1_41_658_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_658_Open_Text.style.display='none'; Codehighlighter1_41_658_Closed_Image.style.display='inline'; Codehighlighter1_41_658_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_41_658_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_658_Closed_Text.style.display='none'; Codehighlighter1_41_658_Open_Image.style.display='inline'; Codehighlighter1_41_658_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Corrie&nbsp;</span><span id="Codehighlighter1_41_658_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"  alt="" /></span><span id="Codehighlighter1_41_658_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;number;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;HashMap&nbsp;lib&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">保存姓名与牌号的库</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img id="Codehighlighter1_178_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_178_260_Open_Text.style.display='none'; Codehighlighter1_178_260_Closed_Image.style.display='inline'; Codehighlighter1_178_260_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_178_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_178_260_Closed_Text.style.display='none'; Codehighlighter1_178_260_Open_Image.style.display='inline'; Codehighlighter1_178_260_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Corrie()</span><span id="Codehighlighter1_178_260_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"  alt="" /></span><span id="Codehighlighter1_178_260_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />lib.put(</span><span style="color: #000000">"</span><span style="color: #000000">Axman</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">001</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />lib.put(</span><span style="color: #000000">"</span><span style="color: #000000">Sager</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">002</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />lib.put(</span><span style="color: #000000">"</span><span style="color: #000000">Pentium4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">003</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_306_412_Open_Image" onclick="this.style.display='none'; Codehighlighter1_306_412_Open_Text.style.display='none'; Codehighlighter1_306_412_Closed_Image.style.display='inline'; Codehighlighter1_306_412_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_306_412_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_306_412_Closed_Text.style.display='none'; Codehighlighter1_306_412_Open_Image.style.display='inline'; Codehighlighter1_306_412_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;into(String&nbsp;name,String&nbsp;number)</span><span id="Codehighlighter1_306_412_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"  alt="" /></span><span id="Codehighlighter1_306_412_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.count&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.number&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;number;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">.lib.get(name).equals(number))<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />test():<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_438_503_Open_Image" onclick="this.style.display='none'; Codehighlighter1_438_503_Open_Text.style.display='none'; Codehighlighter1_438_503_Closed_Image.style.display='inline'; Codehighlighter1_438_503_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_438_503_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_438_503_Closed_Text.style.display='none'; Codehighlighter1_438_503_Open_Image.style.display='inline'; Codehighlighter1_438_503_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;display()</span><span id="Codehighlighter1_438_503_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"  alt="" /></span><span id="Codehighlighter1_438_503_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.count</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.number&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_525_656_Open_Image" onclick="this.style.display='none'; Codehighlighter1_525_656_Open_Text.style.display='none'; Codehighlighter1_525_656_Closed_Image.style.display='inline'; Codehighlighter1_525_656_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_525_656_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_525_656_Closed_Text.style.display='none'; Codehighlighter1_525_656_Open_Image.style.display='inline'; Codehighlighter1_525_656_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;test()</span><span id="Codehighlighter1_525_656_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"  alt="" /></span><span id="Codehighlighter1_525_656_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">.lib.get(name).equals(number))<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">System.out.println("OK:"&nbsp;+&nbsp;display());&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">ERR:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;display());&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
这个类中增加了一个lib的HashMap,相当于一个玩家姓名与牌号的库,因为明知道Corrie只有一个实例,<br />
所以我用了成员对象而不是静态实例,只是为了能在构造方法中初始化库中的内容,从真正意义中说应<br />
该在一个辅助类中实现这样的数据结构封装的功能.如果不提供这个lib,那么在check的时候就要用<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_24_57_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_57_Open_Text.style.display='none'; Codehighlighter1_24_57_Closed_Image.style.display='inline'; Codehighlighter1_24_57_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_24_57_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_24_57_Closed_Text.style.display='none'; Codehighlighter1_24_57_Open_Image.style.display='inline'; Codehighlighter1_24_57_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">(name.equasl(</span><span style="color: #000000">"</span><span style="color: #000000">Axman</span><span style="color: #000000">"</span><span style="color: #000000">))</span><span id="Codehighlighter1_24_57_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"  alt="" /></span><span id="Codehighlighter1_24_57_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">number.equals(</span><span style="color: #000000">"</span><span style="color: #000000">001</span><span style="color: #000000">"</span><span style="color: #000000">))&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">出错</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
这样复杂的语句,如果player大多可能会写到手抽筋,所以用一个lib来chcek就非常容象.<br />
<br />
<br />
运行这个程序需要有一些耐心,因为即使你的程序写得再差在很多单线程测试环境下也能可是正确的.<br />
而且多线程程序在不同的机器上表现不同,要发现这个例子的错识,可能要运行很长一段时间,如果你的<br />
机器是多CPU的,那么出现错误的机会就大好多.<br />
<br />
在我的笔记本上最终出现错误是在11分钟以后,出现的错误有几钟情况:<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">1</span><span style="color: #000000">:&nbsp;ERR:Axman(</span><span style="color: #000000">003</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">2</span><span style="color: #000000">:&nbsp;ERR:Sager(</span><span style="color: #000000">002</span><span style="color: #000000">)</span></div>
<br />
<br />
第一种情况是检查到了错误,我的牌号明明是001,却打印出来003,而第二种明明没有错误,却打印了错误.<br />
<br />
事实上根据以前介绍的多线程知识,不难理解这个例子的错误出现,因为into不是线程安全的,所以在其中<br />
一个线程执行this.name = "Axman"; 后,本来应该执行this.numner="001",却被切换到另一个线程中执行<br />
this.number="003",然后又经过不可预知的切换执行其中一个的if(this.lib.get(name).equals(number))<br />
而出现1的错误,而在打印这个错误时因为display也不是线程安全的,正要打印一个错误的结果时,由于<br />
this.name或this.number其中一个字段被修改却成了正确的匹配而出现错误2.<br />
<br />
另外还有可能会出现序号颠倒或不对应,但这个错误我们无法直观地观察,因为你根本不知道哪个序号"应该"<br />
给哪个Player,而序号颠倒则有可能被滚动的屏幕所掩盖.<br />
<br />
<br />
[正确的Critical Section模式的例子]<br />
我们知道出现这些错误是因为Corrie类的方法不是线程安全的,那么只要修改Corrie类为线程安全的类就行<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.</span><span style="color: #000000">*</span><span style="color: #000000">;&nbsp;<br />
<img id="Codehighlighter1_41_647_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_647_Open_Text.style.display='none'; Codehighlighter1_41_647_Closed_Image.style.display='inline'; Codehighlighter1_41_647_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_41_647_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_647_Closed_Text.style.display='none'; Codehighlighter1_41_647_Open_Image.style.display='inline'; Codehighlighter1_41_647_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Corrie&nbsp;</span><span id="Codehighlighter1_41_647_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"  alt="" /></span><span id="Codehighlighter1_41_647_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;number;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;HashMap&nbsp;lib&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">保存姓名与牌号的库</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img id="Codehighlighter1_178_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_178_260_Open_Text.style.display='none'; Codehighlighter1_178_260_Closed_Image.style.display='inline'; Codehighlighter1_178_260_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_178_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_178_260_Closed_Text.style.display='none'; Codehighlighter1_178_260_Open_Image.style.display='inline'; Codehighlighter1_178_260_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Corrie()</span><span id="Codehighlighter1_178_260_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"  alt="" /></span><span id="Codehighlighter1_178_260_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />lib.put(</span><span style="color: #000000">"</span><span style="color: #000000">Axman</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">001</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />lib.put(</span><span style="color: #000000">"</span><span style="color: #000000">Sager</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">002</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />lib.put(</span><span style="color: #000000">"</span><span style="color: #000000">Pentium4</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">003</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_319_388_Open_Image" onclick="this.style.display='none'; Codehighlighter1_319_388_Open_Text.style.display='none'; Codehighlighter1_319_388_Closed_Image.style.display='inline'; Codehighlighter1_319_388_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_319_388_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_319_388_Closed_Text.style.display='none'; Codehighlighter1_319_388_Open_Image.style.display='inline'; Codehighlighter1_319_388_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;into(String&nbsp;name,String&nbsp;number)</span><span id="Codehighlighter1_319_388_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"  alt="" /></span><span id="Codehighlighter1_319_388_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.count&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">this</span><span style="color: #000000">.number&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;number;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />test();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_427_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_427_492_Open_Text.style.display='none'; Codehighlighter1_427_492_Closed_Image.style.display='inline'; Codehighlighter1_427_492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_427_492_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_427_492_Closed_Text.style.display='none'; Codehighlighter1_427_492_Open_Image.style.display='inline'; Codehighlighter1_427_492_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;String&nbsp;display()</span><span id="Codehighlighter1_427_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"  alt="" /></span><span id="Codehighlighter1_427_492_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.count</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.number&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_514_645_Open_Image" onclick="this.style.display='none'; Codehighlighter1_514_645_Open_Text.style.display='none'; Codehighlighter1_514_645_Closed_Image.style.display='inline'; Codehighlighter1_514_645_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_514_645_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_514_645_Closed_Text.style.display='none'; Codehighlighter1_514_645_Open_Image.style.display='inline'; Codehighlighter1_514_645_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;test()</span><span id="Codehighlighter1_514_645_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"  alt="" /></span><span id="Codehighlighter1_514_645_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">.lib.get(name).equals(number))<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">System.out.println("OK:"&nbsp;+&nbsp;display());&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">ERR:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;display());&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
运行这个例子,如果你的耐心,开着你的机器运行三天吧.虽然测试100天并不能说明第101天没有出错,<br />
at least,现在的正确性比原来那个没有synchronized 保护的例子要可靠多了!<br />
<br />
到这里我们对Critical Section模式的例程有了直观的了解,在详细解说这个模式之前,请想一下,test<br />
方法安全吗?为什么?</div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/173184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-06 22:20 <a href="http://www.blogjava.net/supercrsky/articles/173184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入研究equals方法</title><link>http://www.blogjava.net/supercrsky/articles/172983.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 05 Jan 2008 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/172983.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/172983.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/172983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/172983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/172983.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;equals方法的重要性毋须多言,只要你想比较两个对象是不是同一对象,你就应该实现equals方法,让对象用你认为相等的条件来进行比较.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面的内容只是API的规范,没有什么太高深的意义,但我之所以最先把它列在这儿,是因为这些规范在事实中并不是真正能保证得到实现.1.对于任何引用类型, o.equals(o) == tr...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/172983.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/172983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-05 16:21 <a href="http://www.blogjava.net/supercrsky/articles/172983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javadoc的简捷使用</title><link>http://www.blogjava.net/supercrsky/articles/172385.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Thu, 03 Jan 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/172385.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/172385.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/172385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/172385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/172385.html</trackback:ping><description><![CDATA[<div class="cnt">
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">J2SE5中的javadoc.exe的命令行可选参数多达五十余个，其复杂性可想而知，是不是看着头都大了呢？但通常情况下，我们不想那么麻烦！<br />
<br />
假设源代码在 C:\src 目录下，其中 com.liigo 是主包，其下可能有数十个子包，数百（千）个Java文件。目录结构大约是这样的：<br />
<br />
- C:\<br />
&nbsp;&nbsp;&nbsp;&nbsp;| src\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| com\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| liigo\</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| ***</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">怎么才能以最简捷的方式生成所有的API文档呢？<br />
<br />
c:\&gt;<br />
c:\&gt;cd src<br />
c:\src&gt;javadoc -d doc -subpackages com.liigo<br />
<br />
这样就搞定了，最终生成的API文档位于 c:\src\doc 目录（该目录是由javadoc.exe自动生成的）。<br />
<br />
上面的用法利用了&#8220;当前目录&#8221;和&#8220;相对路径&#8221;，当然也可以用绝对路径：<br />
<br />
...&gt;javadoc -d c:\doc -sourcepath c:\src -subpackages com.liigo<br />
<br />
最终生成的API文档位于 c:\doc 目录（该目录同样是由javadoc.exe自动生成的）。<br />
<br />
<br />
总结一下：<br />
<br />
我们只用到了javadoc的三个参数： -d，-subpackages，-sourcepath，其中：<br />
<br />
参数 说明 <br />
-d 指定API文档的输出目录，默认是当前目录。建议总是指定该参数。 <br />
-sourcepath 指定源代码路径，默认是当前目录。 此参数通常是必须的。 <br />
-subpackages 以递归的方式处理各子包。关键参数！如果不使用本参数，每次只能处理一个子包（或需手工列出所有子包）。 <br />
<br />
<br />
注：以上示例要求 javadoc.exe 所在路径位于系统环境变量&#8220;PATH&#8221;中。<br />
<br />
<br />
补充一点：<br />
<br />
使用参数 -author 可以将作者信息（@author ***）导出到最终生成的API文档中， -version 可以生成版本信息。如果是自己写的一个包，千万不要忘了用 -author 哦:)<br />
<br />
最终完整的命令行是：<br />
<br />
...&gt;javadoc -d c:\doc -sourcepath c:\src -subpackages com.liigo -author -version<br />
</span></span></p>
<p><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">javadoc的命令行语法如下：<br />
<br />
<strong>javadoc [ options ] [ packagenames ] [ sourcefiles ] [ @files ]</strong><br />
<br />
参数可以按照任意顺序排列。下面分别就这些参数和相关的一些内容进行说明： </span></span></p>
<ul><br />
    <li><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>Packagenames</strong> 包列表。这个选项可以是一系列的包名（用空格隔开），例如java.lang java.lang.reflect <br />
    java.awt。不过，因为javadoc不递归作用于子包，不允许对包名使用通配符；所以你必须显示地列出希望建立文档的每一个包。<br />
    </span></span>
    <li><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>Sourcefiles</strong> 源文件列表。这个选项可以是一系列的源文件名（用空格隔开），可以使用通配符。javadoc允许四种源文件：类源代码文件、包描述文件、总体概述文件、其他杂文件。<br />
    <br />
    ◇ 类源代码文件：类或者接口的源代码文件。<br />
    <br />
    ◇ 包描述文件：每一个包都可以有自己的包描述文件。包描述文件的名称必须是"package.html"，与包的.java文件放置在一起。包描述文件的内容通常是使用HTML标记写的文档。javadoc执行时将自动寻找包描述文件。如果找到，javadoc将首先对描述文件中&lt;body&gt;&lt;/body&gt;之间的内容进行处理，然后把处理结果放到该包的Package <br />
    Summary页面中，最后把包描述文件的第一句（紧靠&lt;body&gt;）放到输出的Overview summary页面中，并在语句前面加上该包的包名。<br />
    <br />
    ◇ 总体概述文件：javadoc可以创建一个总体概述文件描述整个应用或者所有包。总体概述文件可以被任意命名，也可以放置到任意位置。-overview选项可以指示总体概述文件的路径和名称。总体概述文件的内容是使用HTML标记写的文档。javadoc在执行的时候，如果发现-overview选项，那么它将首先对文件中&lt;body&gt;&lt;/body&gt;之间的内容进行处理；然后把处理后的结果放到输出的Overview <br />
    summary 页面的底部；最后把总体概述文件中的第一句放到输出的Overview summary页面的顶部。<br />
    <br />
    ◇ 其他杂文件：这些文件通常是指与javadoc输出的HTML文件相关的一些图片文件、Java源代码文件（.java）、Java程序（.class）、Java小程序（Applets）、HTML文件。这些文件必须放在doc-files目录中。每一个包都可以有自己的doc-files目录。举个例子，你希望在java.awt.Button的HTML文档中使用一幅按钮的图片（Button.gif）。首先，你必须把图片文件放到C:\user\src\java\awt\doc-files\中；然后在Button.java文件中加入下面注释<br />
    <br />
    /**<br />
    <br />
    * This button looks like this: <br />
    <br />
    * &lt;img src="doc-files/Button.gif"&gt;<br />
    <br />
    */<br />
    </span></span>
    <li><span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>@files</strong> 包含文件。为了简化javadoc命令，你可以把需要建立文档的文件名和包名放在一个或多个文本文件中。例如，为了简化下面命令：<br />
    <br />
    javadoc -d apidoc com.mypackage1 com.mypackage2 com.mypackage3<br />
    <br />
    你可以建立一个名称为mypackage.txt的文件，其内容如下：<br />
    <br />
    com.mypackage1<br />
    <br />
    com.mypackage2<br />
    <br />
    com.mypackage3<br />
    <br />
    然后执行下面命令即可：<br />
    <br />
    javadoc -d apidoc @mypackage.txt </span></span>
    <li><br />
    <span style="font-family: Comic Sans MS"><span style="font-size: 12pt"><strong>options</strong> 命令行选项。javadoc使用doclets（doclets是指用doclet API编写的程序。）来确定输出的内容和格式。命令行选项中一部分是可用于所有doclet的通用选项，一部分是由默认的标准doclet提供的专用的选项。下面对各自一些常用的选项分别进行介绍：<br />
    <br />
    通用选项：<br />
    <br />
    ◇ <strong>-1.1</strong> 生成具有javadoc 1.1版本生成的文档的外观和功能的文档。不是所有的选项都可以用于-1.1选项，具体可以使用javadoc <br />
    -1.1 -help察看。<br />
    <br />
    ◇ <strong>-help</strong> 显示联机帮助。<br />
    <br />
    ◇ <strong>-bootclasspath</strong> classpathlist 指定"根类"（通常是Java平台自带的一些类。例如java.awt.*等）的路径。<br />
    <br />
    ◇ <strong>-sourcepath </strong>sourcepathlist 指定包的源文件搜索路径。但是必须注意，只有在javadoc命令中指定了包名的时候才可以使用-sourcepath选项。如果指定了包名，而省略了-sourcepath，那么javadoc使用类路径查找源文件。举例说明：假定你打算为com.mypackage建立文档，其源文件的位置是C:\user\src。那么你可以使用下面的命令：<br />
    <br />
    javadoc -sourcepath c:\user\src com.mypackage <br />
    <br />
    ◇ <strong>-classpath</strong> classpathlist 指定javadoc查找"引用类"的路径。引用类是指带文档的类加上它们引用的任何类。javadoc将搜索指定路径的所有子目录。Classpathlist可以包含多个路径（使用;隔开）。如果省略-classpath，则javadoc使用-sourcepath查找源文件和类文件。举例说明：假定你打算为com.mypackage建立文档，其源文件的位置是C:\user\src，包依赖C:\user\lib中的库。那么你可以使用下面的命令：<br />
    <br />
    javadoc -classpath c:\user\lib -sourcepath c:\user\src com.mypackage<br />
    <br />
    ◇ <strong>-overview</strong> path\filename 告诉javadoc从path\filename所指定的文件中获取概述文档，并且把它放到输出的概述页面（overview-summary.html）中。其中path\filename是相对于-sourcepath的相对路径。<br />
    <br />
    ◇ <strong>-public</strong> 只显示公共类以及成员。<br />
    <br />
    ◇ <strong>-protected</strong> 只显示受保护的和公共的类以及成员。缺省选项。<br />
    <br />
    ◇ <strong>-package</strong>只显示包、受保护的和公共的类以及成员。<br />
    <br />
    ◇ <strong>-private</strong> 显示所有类和成员。 <br />
    <br />
    ◇ <strong>-doclet</strong> class 指定javadoc产生输出内容的自定义doclet类。如果忽略这个选项，javadoc将使用默认的doclet产生一系列HTML文档。<br />
    <br />
    ◇ <strong>-docletpath</strong> classpathlist 与- doclet选项相关，制定自定义的doclet类文件的路径。Classpathlist可以包含多条路径（用;隔开）。<br />
    <br />
    ◇ <strong>-verbose</strong> 在javadoc运行时提供更详细的信息。<br />
    <br />
    标准doclet专用选项：<br />
    <br />
    ◇ <strong>-author</strong> 在生成的文档中包含"作者"项。<br />
    <br />
    ◇ <strong>- d</strong> directory 指定javadoc保存生成的HTML文件的目录。省略该选项将把文件保存在当前目录。Directory可以是绝对目录，也可以是相对当前目录的相对目录。<br />
    <br />
    ◇ <strong>-version</strong> 在生成的文档中包含"版本"项。<br />
    <br />
    ◇ <strong>-use</strong> 为类和包生成"use"（用法）页面。这些页面描述了该类和包在javadoc命令涉及的文件中被使用的情况。例如：对于给定的类C，在C的用法页面中将包含C的子类，类型为C的域，返回变量类型为C的方法以及在参数中有变量类型为C的方法和构造器。<br />
    <br />
    ◇<strong> -splitindex</strong> 把索引文件按照字母顺序分为多个文件。每一个文件对应一个字母。<br />
    <br />
    ◇ <strong>-windowtitle</strong> title 指定输出的HTML文档的标题。<br />
    <br />
    ◇ <strong>-header</strong> header 指定输出的HTML文档的页眉文本。<br />
    <br />
    ◇ <strong>-footer</strong> footer 指定输出的HTML文档的脚注文本。<br />
    <br />
    ◇ <strong>-bottom</strong> text 指定输出的HTML文档底部的文本。<br />
    <br />
    ◇ <strong>- group</strong> groupheading packagepatten;packagepatten;&#8230; 在总体概述页面中按照命令的指定方式分隔各个包。例如执行下面命令：<br />
    <br />
    javadoc -group "Core Packages" "java.lang*:java.util"<br />
    <br />
    -group "Extension Packages" "javax.*"<br />
    <br />
    java.lang java.lang.reflect java.util javax.servlet java.new<br />
    <br />
    在页面中将有如下结果：<br />
    <br />
    <strong>Core Packages </strong><br />
    <br />
    java.lang <br />
    <br />
    java.lang.reflect <br />
    <br />
    java.util <br />
    <br />
    Extension Packages <br />
    <br />
    javax.servlet <br />
    <br />
    Other Packages <br />
    <br />
    java.new <br />
    <br />
    ◇ - noindex 不输出索引文件。<br />
    <br />
    ◇ - help 在文件的导航条中忽略help链接。<br />
    <br />
    ◇ - helpfile path\filename 指定导航条中的help链接所指向的帮助文件。忽略该选项，javadoc将生成缺省的帮助文件。<br />
    <br />
    ◇ -stylesheetfile path\filename 指定javadoc的HTML样式表文件的路径。忽略该选项，javadoc将自动产生一个样式表文件stylesheet.css。<br />
    <br />
    通过上面的介绍，我们了解了javadoc的命令行语法，下面开始介绍javadoc文档注释方法。<br />
    <br />
    javadoc注释以"/**"开始，以"*/"结束，里面可以包含普通文本、HTML标记和javadoc标记。javadoc只处理源文件中在类/接口定义、方法、域、构造器之前的注释，忽略位于其他地方的注释。举例如下：<br />
    /**<br />
    <br />
    *我的第一个程序--&lt;b&gt;Helloworld&lt;/b&gt;<br />
    <br />
    *@author 王鸿<br />
    <br />
    *@version 1.0 2001/10/15<br />
    <br />
    */<br />
    <br />
    public class myHelloworld<br />
    <br />
    {<br />
    <br />
    /**<br />
    <br />
    *在main( )方法中使用的显示用字符串<br />
    <br />
    *@see #main(java.lang.String[])<br />
    <br />
    */<br />
    <br />
    static String SDisp<br />
    <br />
    使用下面命令：<br />
    <br />
    javadoc -private -d doc -author -version myHelloworld.java<br />
    <br />
    即可以生成漂亮的关于myHelloworld.java的API文档了。<br />
    <br />
    上面例子中以@开头的标记就是javadoc标记。在Java程序中正确使用javadoc标记是一个良好的注释习惯，将非常有助于javadoc自动从源代码文件生成完整的格式化API文档。下面就对各种标记进行详细说明。<br />
    <br />
    ◇ <strong>@author</strong> name-text 指定生成文档中的"作者"项，从JDK/SDK 1.0开始引入。name-text可以指定多个名字（使用","隔开）。文档注释可以包含多个类。<br />
    <br />
    ◇ <strong>{@docroot}</strong> 代表产生文档的根路径，从JDK/SDK 1.3开始引入。用法举例如下<br />
    <br />
    /**<br />
    <br />
    *see the &lt;a href={@docroot}/copyright.html&gt;copyright&lt;/a&gt;<br />
    <br />
    */<br />
    <br />
    假定生成文档的根目录是doc，上面注释所在的文件最后生成的文件是doc\utility\utl.html，那么"copyright"的链接会指向..\copyright.html。<br />
    <br />
    ◇ <strong>@deprecated</strong> deprecated-text 添加注释，表明不推荐使用该API。<br />
    <br />
    ◇ <strong>@exception</strong> class-name description @throw的同义标记，从JDK/SDK 1.0开始引入。<br />
    <br />
    ◇ <strong>{@link</strong> package.class#member label<strong>}</strong> 插入指向package.class#member的内嵌链接，从JDK/SDK <br />
    1.2开始引入。举例说明，假定注释中有如下文档：<br />
    <br />
    /** Use the {@link #getComponentAt(int, int) getComponentAt} method. */<br />
    <br />
    那么javadoc最终生成的HTML页面中将有如下内容<br />
    <br />
    Use the &lt;a href = "Component.html#getComponentAt(int,int)" <br />
    &gt; getComponentAt &lt;/a&gt; method.<br />
    <br />
    ◇ <strong>@param</strong> parameter-name description 描述参数，从JDK/SDK 1.0开始引入。<br />
    <br />
    ◇ <strong>@return</strong> description 描述返回值，从JDK/SDK 1.0开始引入。<br />
    <br />
    ◇ <strong>@see</strong> reference 添加"参见"标题，其中有指向reference的链接或者文本项，从JDK/SDK <br />
    1.0开始引入。@see标记有三种形式，下面分别说明：<br />
    <br />
    （1）、@see "string" 为"string"添加文本项，不产生链接。<br />
    <br />
    （2）、@see &lt;a href="URL#Value"&gt;Label&lt;/a&gt; 使用HTML标记产生链接<br />
    <br />
    （3）、@see package.class#member Label 使用Java语言的名字package.class #member产生链接。<br />
    <br />
    ◇ @serial field-description 用于缺省可序列化域的注释，从JDK/SDK 1.2开始引入。<br />
    <br />
    ◇ @serialField field-name field-type field-description 建立Serializable类的serialPersistentFields成员的ObjectStreamField组件的文档，从JDK/SDK <br />
    1.2开始引入。<br />
    <br />
    ◇ <strong>@serialData</strong> data-description data-description建立数据序列和类型的文档，从JDK/SDK <br />
    1.2开始引入。<br />
    <br />
    ◇ <strong>@since</strong> since-text 利用since-text内容为文档增加"since"标题，从JDK/SDK <br />
    1.1开始引入。<br />
    <br />
    ◇ <strong>@throws</strong> class-name description 与@exception同义。用class-name和description为输出文档添加"抛出"标题，从JDK/SDK <br />
    1.2开始引入。<br />
    <br />
    ◇ <strong>@version</strong> version-text 添加"版权"标题，从JDK/SDK 1.0开始引入。<br />
    <br />
    上面介绍了标准doclet提供的所有标记。不过，需要注意这些标记的使用是有位置限制的。其中可以出现在类或者接口文档注释中的标记有：@see、{@link}、@since、@deprecated、@author、@version。可以出现在方法或者构造器文档注释中的标记有：@see、{@link}、@since、@deprecated、@param、@return、@throws、@exception、@serialData。可以出现在域文档注释中的有：@see、{@link}、@since、@desprecated、@serial、@serialField。<br />
    <br />
    除了javadoc自身提供的标准标记以外，我们可以定制自己的标记吗？当然可以。只需要对javadoc标准的doclet程序进行扩充即可。实际上，利用javadoc提供的doclet <br />
    API，不仅可以扩充doclet标记，甚至还可以改变javadoc的整个输出。为了满足需要，你可以使javadoc输出普通文本、XML文件等。由于扩充doclet涉及到Java编程，本文不再做深入介绍。<br />
    <br />
    总之，javadoc提供了完整规范的API文档功能。在软件项目管理中，合理地使用javadoc不仅可以减少</span></span><a class="channel_keylink" href="http://www.easylib.org/programme/"><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">开发</span></span></a><span style="font-family: Comic Sans MS"><span style="font-size: 12pt">时的文档工作量，提高效率；而且还非常有利于将来软件的修改和维护。<br />
    <br />
    </span></span></li>
</ul>
</div>
<br />
<img src ="http://www.blogjava.net/supercrsky/aggbug/172385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-01-03 10:20 <a href="http://www.blogjava.net/supercrsky/articles/172385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java位运算符精解</title><link>http://www.blogjava.net/supercrsky/articles/171271.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 28 Dec 2007 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/171271.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/171271.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/171271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/171271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/171271.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: package&nbsp;com;public&nbsp;class&nbsp;BitOperator{&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;args&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/171271.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/171271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-12-28 18:48 <a href="http://www.blogjava.net/supercrsky/articles/171271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>