﻿<?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-java-随笔分类-java</title><link>http://www.blogjava.net/zhangxiong37/category/21679.html</link><description>tiger</description><language>zh-cn</language><lastBuildDate>Thu, 03 Jun 2010 19:40:31 GMT</lastBuildDate><pubDate>Thu, 03 Jun 2010 19:40:31 GMT</pubDate><ttl>60</ttl><item><title>从乡村爱情看IT培训【转自IT培训评价网（www.itpxpj.com）】</title><link>http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322401.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Mon, 31 May 2010 22:52:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322401.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/322401.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/322401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/322401.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对于想学IT的朋友，请问你自己有计算机基础吗？你觉得IT的待遇都很高吗？你从心底喜欢IT吗？其实，没有一个大专以上文凭，没有学过《操作系统》、《数据结构》等，你就不要学编程，没有做好吃苦的准备，你也不要学编程。IT更新很快，要始终保持一颗学习的心。没有吃尽苦，哪来高工资！如果自己有其他优势，也不一定高IT才能够致富。比如有机会回家创业，像《乡村爱情》里面的优秀年轻人学习，只要努力，也一样会有一个美好的明天！ &nbsp;&nbsp;<a href='http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322401.html'>阅读全文</a><img src ="http://www.blogjava.net/zhangxiong37/aggbug/322401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2010-06-01 06:52 <a href="http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小谈JAVA 就业前景【转自IT培训评价网（www.itpxpj.com）】</title><link>http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322400.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Mon, 31 May 2010 22:50:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322400.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/322400.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/322400.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/322400.html</trackback:ping><description><![CDATA[<p>Java语言是整个体系的基础，按照不同的用途，在以下方面应用广泛： </p>
<p><br />
<strong>1、企业级应用开发</strong> <br />
这里是JAVA的天地，大到全国联网的系统，小到中小企业的应用解决方案，JAVA都占有极为重要的地位。</p>
<p><br />
<strong>2、网站开发</strong> <br />
当然就是JSP+Servlet+JavaBean，以及后来的Struts，Spring，Hibernate/IBatis等，一直以来都相当流行</p>
<p>&nbsp;<br />
<strong>3、移动领域</strong> <br />
典型的应用是手机游戏（国内主要是这方面），这里是J2ME的天地，其实应用范围是很广的，只是国内开发不够。</p>
<p><br />
JAVA已成为当今市面上最受欢迎的编程软件，对于处于信息高速发达的今天，JAVA技术已经无处不在，手机软件、手机JAVA游戏、电脑软件等等。可以这样说，只要你使用手机、电脑等电子产品，你就会用到跟JAVA有关的东西。</p>
<p><strong><font color="#ff0033">专家点评：</font></strong><font color="#0000cc">从最近几年就业情况来看，由于国内主要还是外包方面需要大量的人才，所以，Java未来几年的发展还是很好的！IBM、Oracle等大公司都一直在做这方面的相关产品，以及Java开源运动，Java还属于青壮年期。只要学好了Java，待遇应该不是问题！而且，据我们了解，一些大公司正在将原来C++的系统，往Java上面转！比如：华为，诺基亚西门子等</font></p><img src ="http://www.blogjava.net/zhangxiong37/aggbug/322400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2010-06-01 06:50 <a href="http://www.blogjava.net/zhangxiong37/archive/2010/06/01/322400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>偶尔感悟</title><link>http://www.blogjava.net/zhangxiong37/archive/2008/11/12/240055.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Wed, 12 Nov 2008 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2008/11/12/240055.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/240055.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2008/11/12/240055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/240055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/240055.html</trackback:ping><description><![CDATA[没有过时的技术，只有合适的技术<br /><img src ="http://www.blogjava.net/zhangxiong37/aggbug/240055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2008-11-12 12:26 <a href="http://www.blogjava.net/zhangxiong37/archive/2008/11/12/240055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse由于jdk1.3无法启动[转]</title><link>http://www.blogjava.net/zhangxiong37/archive/2007/02/26/100684.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Mon, 26 Feb 2007 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2007/02/26/100684.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/100684.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2007/02/26/100684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/100684.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/100684.html</trackback:ping><description><![CDATA[<br>1.打开命令行窗口，进入到C:\WINDOWS\system32&gt;。之下java命令，系统显示：<br>C:\WINDOWS\system32&gt;java<br>Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'<br>has value '1.3', but '1.4' is required.<br>Error: could not find java.dll<br>Error: could not find Java 2 Runtime Environment.
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统提示好像是在注册表中找到的是java1.3,而这个java.exe。是java1.4。好像找到问题的所在了，于是，进入注册表。查找到：Java Runtime Environment<br>看到了他下面却实有好多的jdk版本。包括jb7带的1.3。还有jb9带的1.4.1。还有我刚装的jdk1.4.2。都在，而看到<br>CurrentVersion的值竟然是1.3。该死，于是改成1.4。保存。在命令行的C:\WINDOWS\system32下运行java。成功了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 于是打开eclipse。ok。一切成功。终于看到了那个期望的界面。<br>这个问题可能是jb7的自带jdk1.3所造成的。看来eclipse寻找的jdk不是系统环境变量中的java_home。而是system32下的java虚拟机。也就是<br>注册表中的那个Java Runtime Environment\CurrentVersio。这次终于从根本上解决了这个恼火的问题。高兴。</p>
<p>2.<strong>另外一种情况就是eclipse倾动报错,看log文件说,javax的parexml类有问题,该原因一般是因为安装了oracle9i</strong>,它在系统变量的path路径中加入了jre1.3的路径,把它删除即可启动eclipse,这主要是因为eclipse使用的jdk.1.4以上的版本,而1.4对1.3做了很大的修改,所以找不到那个类.<br><br><br>总之，仔细查看系统变量中path的值就知道是什么原因！</p><img src ="http://www.blogjava.net/zhangxiong37/aggbug/100684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2007-02-26 10:18 <a href="http://www.blogjava.net/zhangxiong37/archive/2007/02/26/100684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采用WEB标准的好处[转]</title><link>http://www.blogjava.net/zhangxiong37/archive/2007/01/20/95031.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Sat, 20 Jan 2007 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2007/01/20/95031.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/95031.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2007/01/20/95031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/95031.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/95031.html</trackback:ping><description><![CDATA[<table style="TABLE-LAYOUT: fixed">
    <tbody>
        <tr>
            <td>
            <div class=cnt>我们大部分人都有深刻体验，每当主流浏览器版本的升级，我们刚建立的网站就可能变得过时，我们就需要升级或者重新建造一遍网站。例如1996-1999年典型的"浏览器大战"，为了兼容Netscape和IE，网站不得不为这两种浏览器写不同的代码。同样的，每当新的网络技术和交互设备的出现，我们也需要制作一个新版本来支持这种新技术或新设备，例如支持手机上网的WAP技术。类似的问题举不胜举：网站代码臃肿、繁杂浪费了我们大量的带宽；针对某种浏览器的DHTML特效，屏蔽了部分潜在的客户；不易用的代码，残障人士无法浏览网站等等。这是一种恶性循环，是一种巨大的浪费。 </div>
            <p class=cnt>如何解决这些问题呢？有识之士早已开始思考，需要建立一种普遍认同的标准来结束这种无序和混乱。商业公司(Netscape、Microsoft等)也终于认识到统一标准的好处，因此在W3C（W3C.org）的组织下，网站标准开始被建立（1998年2月10日发布XML1.0为标志），并在网站标准组织（<a title=链接到webstandards网站 href="http://www.webstandards.org/" rel=external>webstandards.org</a>）的督促下推广执行。</p>
            <p class=cnt>简单说，网站标准的目的就是：</p>
            <div class=cnt>
            <ul>
                <li>提供最多利益给最多的网站用户
                <li>确保任何网站文挡都能够长期有效
                <li>简化代码、降低建设成本
                <li>让网站更容易使用，能适应更多不同用户和更多网路设备
                <li>当浏览器版本更新，或者出现新的网络交互设备时，确保所有应用能够继续正确执行。 </li>
            </ul>
            </div>
            <p>对于网站设计和开发人员来说，遵循网站标准就是使用标准；对于你的网站用户来说，网站标准就是最佳体验。</p>
            <h4>采用网站标准的好处</h4>
            <p>对网站浏览者的好处：</p>
            <ul>
                <li>文件下载与页面显示速度更快；
                <li>内容能被更多的用户所访问（包括失明、视弱、色盲等残障人士）；
                <li>内容能被更广泛的设备所访问（包括屏幕阅读机、手持设备、搜索机器人、打印机、电冰箱等等）
                <li>用户能够通过样式选择定制自己的表现界面
                <li>所有页面都能提供适于打印的版本 </li>
            </ul>
            <p>对网站所有者的好处：</p>
            <ul>
                <li>更少的代码和组件，容易维护
                <li>带宽要求降低（代码更简洁），成本降低。举个例子：当 ESPN.com 使用 CSS改版后，每天节约超过两兆字节（terabytes）的带宽。
                <li>更容易被搜寻引擎搜索到
                <li>改版方便，不需要变动页面内容
                <li>提供打印版本而不需要复制内容
                <li>提高网站易用性。在美国，有严格的法律条款（Section 508）来约束政府网站必须达到一定的易用性，其他国家也有类似的要求。 </li>
            </ul>
            <p>这样才能使自己的网站不过时！！！！！！<br>打破&#8220;99%的网站都该被淘汰&#8221;！！！</p>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/zhangxiong37/aggbug/95031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2007-01-20 10:41 <a href="http://www.blogjava.net/zhangxiong37/archive/2007/01/20/95031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>传值？还是传引用？</title><link>http://www.blogjava.net/zhangxiong37/archive/2006/08/02/61297.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Wed, 02 Aug 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2006/08/02/61297.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/61297.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2006/08/02/61297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/61297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/61297.html</trackback:ping><description><![CDATA[<p>传值：分为传原始类型值和地址值（即传递指针）（使用于java,c,c++语言等等）<br>传引用：相当与c++中的引用，两个变量绑定到一起了，它与传递指针是有区别的。（只是适用于c++中，不适用于java,c中）<br>&nbsp;eg：<br>&nbsp;1.&nbsp;没有null reference。 <br>&nbsp;2.&nbsp;reference必须有初值。 <br>&nbsp;3.&nbsp;使用reference要比使用指针效率高。因为reference不需要测试其有效性。 <br>&nbsp;4.&nbsp;指针可以重新赋值，而reference总是指向它最初获得的对象<br><br>(参：<a href="http://dev.csdn.net/article/17/17286.shtm">http://dev.csdn.net/article/17/17286.shtm</a> )</p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/zhangxiong37/aggbug/61297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2006-08-02 10:07 <a href="http://www.blogjava.net/zhangxiong37/archive/2006/08/02/61297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>框架与模式</title><link>http://www.blogjava.net/zhangxiong37/archive/2006/06/30/55862.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Fri, 30 Jun 2006 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2006/06/30/55862.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/55862.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2006/06/30/55862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/55862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/55862.html</trackback:ping><description><![CDATA[转自：bea(UG)<br>一个框架一定是一个或者多个模式的具体实现。<br>&#8226;比如：<br>&#8226;大部分Web框架都是MVC模式<br>&#8226;Struts的具体实现模式有：<br>&#8226;前端控制器（FrontController）<br>&#8226;应用控制器（ApplicationController）<br>&#8226;命令处理器（CommandProcessor）<br>&#8226;视图处理器（ViewHandler）<br><br>View技术(框架)<br>&#8226;HTML/XHTML<br>&#8226;JSP<br>&#8226;XSL<br>&#8226;Excel/PDF<br>&#8226;Flash<br>&#8226;Xforms<br>&#8226;Template<br>&#8226;Velocity<br>&#8226;Freemaker<br>&#8226;Webmacro<br>&#8226;Layout<br>&#8226;Sitemesh<br>&#8226;Tiles<br><br>控制器框架（Web框架）<br>&#8226;Struts<br>&#8226;JSF<br>&#8226;WebWork<br>&#8226;Tapstry<br>&#8226;Cocoon<br>&#8226;SpringMVC<br>&#8226;ADF<br>&#8226;Flex<br>&#8226;Laszlo<br><br>Model框架<br>&#8226;(POJO？)<br>&#8226;SpringIoCContainer<br>&#8226;Someothercontainer<br>&#8226;EJB<br>&#8226;ADF<br><br>Persistence框架<br>&#8226;JDBC<br>&#8226;Hibernate<br>&#8226;iBATIS<br>&#8226;JDO<br>&#8226;Cayenne<br>&#8226;MrPersister<br>&#8226;OJB<br>&#8226;EJB<br>&#8226;TOPLINK<img src ="http://www.blogjava.net/zhangxiong37/aggbug/55862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2006-06-30 10:02 <a href="http://www.blogjava.net/zhangxiong37/archive/2006/06/30/55862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计算机科学的史诗（算法）【转】</title><link>http://www.blogjava.net/zhangxiong37/archive/2006/04/26/43182.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Wed, 26 Apr 2006 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2006/04/26/43182.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/43182.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2006/04/26/43182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/43182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/43182.html</trackback:ping><description><![CDATA[<table class=MsoNormalTable style="mso-cellspacing: 1.5pt" cellPadding=0 border=0>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #d4d0c8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 1" align=center><strong><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体">计算机科学的史诗<span lang=EN-US><br>The Art of Computer Programming(TAOCP)<o:p></o:p></span></span> </strong></p>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 1" align=center><strong><span lang=EN-US style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体">&nbsp;</span> </strong><strong><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体">学习讨论网页<span lang=EN-US><o:p></o:p></span></span> </strong></p>
            </td>
        </tr>
    </tbody>
</table>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">如果你认为你是一名真正优秀的程序员<span lang=EN-US>&#8230;&#8230;</span>读<span lang=EN-US>Knuth</span>的《计算机程序设计艺术》，如果你能读懂整套书的话，请给我发一份你的简历。<span lang=EN-US>--Bill Gates<o:p></o:p></span></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这是一套集所有基础算法之大成的经典之作。当今软件开发人员所掌握的绝大多数计算机程序设计的知识都来源于此。<span lang=EN-US>--Byte<o:p></o:p></span></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_s1026 style="MARGIN-TOP: 0px; Z-INDEX: 1; MARGIN-LEFT: 0px; WIDTH: 101.25pt; POSITION: absolute; HEIGHT: 137.25pt; mso-wrap-distance-left: 0; mso-wrap-distance-right: 0; mso-position-horizontal: left; mso-position-vertical-relative: line" o:allowoverlap="f" alt="" type="#_x0000_t75"><v:imagedata o:title="art_autor" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata><w:wrap type="square"></w:wrap></v:shape><span style="FONT-SIZE: 12pt; COLOR: #ff8000; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">作者简介：</span> <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><br>&nbsp;&nbsp;&nbsp;&nbsp;Donald.E.Knuth(</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">唐纳德<span lang=EN-US>.E.</span>克努特，中文名高德纳<span lang=EN-US>)</span>是算法和程序设计技术的先驱者，是计算机排版系统<span lang=EN-US>TEX</span>和<span lang=EN-US>METAFONT</span>的发明者，他因这些成就和大量创造性的影响深远的著作<span lang=EN-US>(19</span>部书和<span lang=EN-US>160</span>篇论文<span lang=EN-US>)</span>而誉满全球。作为斯坦福大学计算机程序设计艺术的荣誉退休教授，他当前正全神贯注于完成其关于计算机科学的史诗性的七卷集。这一伟大工程在<span lang=EN-US>1962</span>年他还是加利福尼亚理工学院的研究生时就开始了。<span lang=EN-US><br>&nbsp;&nbsp;&nbsp;&nbsp; Knuth</span>教授获得了许多奖项和荣誉，包括美国计算机协会<strong>图灵奖</strong><span lang=EN-US>(ACM Turing Award)</span>，美国前总统卡特授予的科学金奖<span lang=EN-US>(Medal of Science)</span>，美国数学学会斯蒂尔奖<span lang=EN-US>(AMS Steele Prize)</span>，以及<span lang=EN-US>1996</span>年<span lang=EN-US>11</span>月由于发明先进技术荣获的极受尊重的京都奖<span lang=EN-US>(KyotoPrize)</span>。现与其妻<span lang=EN-US>Jill</span>生活于斯坦福校园内。<span lang=EN-US><o:p></o:p></span></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">他的主页 <span lang=EN-US><a href="http://www-cs-faculty.stanford.edu/~knuth/taocp.html">http://www-cs-faculty.stanford.edu/~knuth/taocp.html</a><o:p></o:p></span></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;At the end of 1999, these books (The Art of Comupter Programming) were named among the best twelve scientific monographs of the century by <a href="http://www.amsci.org/amsci/bookshelf/centurylist.html"><em>American Scientist</em></a>, along with: Dirac on quantum mechanics, Einstein on relativity, Mandelbrot on fractals, Pauling on the chemical bond, Russell and Whitehead on foundations of mathematics, von Neumann and Morgenstern on game theory, Wiener on cybernetics, Woodward and Hoffmann on orbital symmetry, Feynman on quantum electrodynamics, Smith on the search for structure, and Einstein's collected papers.<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">　<span lang=EN-US><o:p></o:p></span></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><a href="http://online.ysu.edu.cn/personal/yyf/weitao/TAOCP.zip"><span lang=EN-US style="FONT-SIZE: 18pt; mso-bidi-font-size: 12.0pt"><span lang=EN-US>下载这套书的第一和第三册中文版</span> </span></a></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">(<a href="http://online.ysu.edu.cn/personal/yyf/weitao/ssReader.exe"><span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>阅读该书使用的软件下载</span></span></a>.</span> <span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">该内容来源于网络，仅供参考学习<span lang=EN-US>.</span>如有用于商业目的，后果自负；如有版权冲突，来信告知，一定删除<span lang=EN-US>. </span>再次声明，该书来自网上其他书籍下载类站点，图书版权归原作者和电子书制作者所有。请您预览该书后，在<span lang=EN-US>24</span>小时内从计算机上将该书删除。<span lang=EN-US>)</span></span> <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><a href="http://online.ysu.edu.cn/personal/yyf/weitao/TAOCP2_yuanweitao.pdf"><span lang=EN-US style="FONT-SIZE: 18pt; mso-bidi-font-size: 12.0pt"><span lang=EN-US>下载这套书的第二册英文版</span> </span></a></span><span lang=EN-US style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></span><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">（该内容来源于网络，仅供参考学习<span lang=EN-US>.</span>如有用于商业目的，后果自负；如有版权冲突，来信告知，一定删除<span lang=EN-US>. </span>再次声明，该书来自网上其他书籍下载类站点，图书版权归原作者和电子书制作者所有。请您预览该书后，在<span lang=EN-US>24</span>小时内从计算机上将该书删除。<span lang=EN-US>)</span></span> <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><a href="http://online.ysu.edu.cn/personal/yyf/weitao/concretemath.pdf"><span style="mso-bidi-font-size: 12.0pt">knuth</span> <span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>先生的&lt;&lt;</span> </span><span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>具体数学&gt;&gt;</span> </span><span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>下载(TAOCP</span> </span><span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>的数学基础)</span> </span></a></span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=left><span lang=EN-US style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><a href="http://online.ysu.edu.cn/personal/yyf/weitao/taocp/clrs.htm"><span style="mso-bidi-font-size: 12.0pt">&lt;&lt;</span> <span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>算法导论&gt;&gt;</span> </span><span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>下载(</span> </span><span lang=EN-US style="mso-bidi-font-size: 12.0pt"><span lang=EN-US>经典的教材)</span> </span></a></span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></span></p>
<strong><span lang=EN-US style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-font-kerning: 18.0pt; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><br style="PAGE-BREAK-BEFORE: always" clear=all></span></strong>
<h1 style="MARGIN: auto 0cm; TEXT-ALIGN: center" align=center><v:shape id=_x0000_s1027 style="MARGIN-TOP: 0px; Z-INDEX: 2; LEFT: 0px; MARGIN-LEFT: 0px; WIDTH: 150.75pt; POSITION: absolute; HEIGHT: 178.5pt; TEXT-ALIGN: left; mso-wrap-distance-left: 0; mso-wrap-distance-right: 0; mso-position-horizontal: left; mso-position-vertical-relative: line" o:allowoverlap="f" alt="" type="#_x0000_t75"><v:imagedata o:title="clrs" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image002.jpg"></v:imagedata><w:wrap type="square"></w:wrap></v:shape><font face=宋体>算法导论</font> </h1>
<h1 style="MARGIN: auto 0cm; TEXT-ALIGN: center" align=center><font face=宋体><span lang=EN-US>Introduction to Algorithms</span>（<span lang=EN-US>CLRS</span>）</font> </h1>
<h1 style="MARGIN: auto 0cm; TEXT-ALIGN: center" align=center><font face=宋体>学习和讨论网页</font> </h1>
<p><font face=宋体><span class=serif>本书自第一版出版以来，已经成为世界范围内广泛使用的大学教材和专业人员的标准参考手册。本书全面论述了算法的内容，从一定深度上涵盖了算法的诸多方面，同时其讲授和分析方法又兼顾了各个层次读者的接受能力。各章内容自成体系，可作为独立单元学习。所有算法都用英文和伪码描述，使具备初步编程经验的人也可读懂。全书讲解通俗易懂，且不失深度和数学上的严谨性。</span> <span class=serif><span lang=EN-US><o:p></o:p></span></span></font></p>
<p><font face=宋体><strong><span lang=EN-US>Topics covered:</span> </strong><span lang=EN-US>Overview of algorithms (including algorithms as a technology); designing and analyzing algorithms; asymptotic notation; recurrences and recursion; probabilistic analysis and randomized algorithms; heapsort algorithms; priority queues; quicksort algorithms; linear time sorting (including radix and bucket sort); medians and order statistics (including minimum and maximum); introduction to data structures (stacks, queues, linked lists, and rooted trees); hash tables (including hash functions); binary search trees; red-black trees; augmenting data structures for custom applications; dynamic programming explained (including assembly-line scheduling, matrix-chain multiplication, and optimal binary search trees); greedy algorithms (including Huffman codes and task-scheduling problems); amortized analysis (the accounting and potential methods); advanced data structures (including B-trees, binomial and Fibonacci heaps, representing disjoint sets in data structures); graph algorithms (representing graphs, minimum spanning trees, single-source shortest paths, all-pairs shortest paths, and maximum flow algorithms); sorting networks; matrix operations; linear programming (standard and slack forms); polynomials and the Fast Fourier Transformation (FFT); number theoretic algorithms (including greatest common divisor, modular arithmetic, the Chinese remainder theorem, RSA public-key encryption, primality testing, integer factorization); string matching; computational geometry (including finding the convex hull); NP-completeness (including sample real-world NP-complete problems and their insolvability); approximation algorithms for NP-complete problems (including the traveling salesman problem); reference sections for summations and other mathematical notation, sets, relations, functions, graphs and trees, as well as counting and probability backgrounder (plus geometric and binomial distributions).</span> </font></p>
<p style="TEXT-ALIGN: center" align=center><font face=宋体>　</font> <em><span style="FONT-SIZE: 18pt; FONT-FAMILY: 黑体">请记住：算法导论 是本教材 而<span lang=EN-US> TAOCP </span>是本史诗。</span> </em></p>
<p><span class=serif><span lang=EN-US><a href="http://online.ysu.edu.cn/personal/yyf/weitao/clrs.rar"><span lang=EN-US style="FONT-SIZE: 18pt"><span lang=EN-US><font face=宋体>电子版下载</font> </span></span></a></span></span></p>
<p><span lang=EN-US><a href="http://online.ysu.edu.cn/personal/yyf/weitao/taocp/"><font face=宋体><span style="FONT-SIZE: 18pt">TAOCP </span><span lang=EN-US style="FONT-SIZE: 18pt"><span lang=EN-US>讨论网页</span> </span></font></a></span></p>
<p><span lang=EN-US></span>&nbsp;</p><img src ="http://www.blogjava.net/zhangxiong37/aggbug/43182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2006-04-26 09:36 <a href="http://www.blogjava.net/zhangxiong37/archive/2006/04/26/43182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java取四舍五入的方法</title><link>http://www.blogjava.net/zhangxiong37/archive/2006/04/25/42980.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Tue, 25 Apr 2006 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2006/04/25/42980.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/42980.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2006/04/25/42980.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/42980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/42980.html</trackback:ping><description><![CDATA[<p><span style="color: #ff0000">&#8220;带下划线内容无效"</span></p>
<p><u><em>两种不同方法的实现：</em></u><u><em><br />
</em></u></p>
<u><em>
</em></u><u><em><br />
</em></u><u><em>
1:</em></u><u><em><br />
</em></u><u><em>
/** </em></u><u><em><br />
</em></u><u><em>
</em></u><u><em><br />
</em></u><u><em>
* 提供小数位四舍五入处理。 </em></u><u><em><br />
</em></u><u><em>
</em></u><u><em><br />
</em></u><u><em>
* @param v 需要四舍五入的数字 </em></u><u><em><br />
</em></u><u><em>
</em></u><u><em><br />
</em></u><u><em>
* @param scale 小数点后保留几位 </em></u><u><em><br />
</em></u><u><em>
</em></u><u><em><br />
</em></u><u><em>
* @return 四舍五入后的结果 </em></u><u><em><br />
</em></u><u><em>
</em></u><u><em><br />
</em></u><u><em>
*/ </em></u><u><em><br />
</em></u><u><em>
</em></u><u><em><br />
</em></u><u><em>
public static double round(double v,int scale){ </em></u><u><em><br />
</em></u><u><em>
String temp="#,##0."; </em></u><u><em><br />
</em></u><u><em>
for (int i=0;i&lt;scale ;i++ ) </em></u><u><em><br />
</em></u><u><em>
{ </em></u><u><em><br />
</em></u><u><em>
temp+="0"; </em></u><u><em><br />
</em></u><u><em>
} </em></u><u><em><br />
</em></u><u><em>
return Double.valueOf(new java.text.DecimalFormat(temp).format(v)); </em></u><u><em><br />
</em></u><u><em>
} </em></u><u><em><br />
</em></u><u><em>
</em></u><u><em><br />
</em></u><u><em>
2:数学方法</em></u><u><em><br />
</em></u><u><em>
public static double round2(double d, int scale) {</em></u><u><em><br />
</em></u><u><em>
long temp=1;</em></u><u><em><br />
</em></u><u><em>
for (int i=scale; i&gt;;0; i--) {</em></u><u><em><br />
</em></u><u><em>
temp*=10;</em></u><u><em><br />
</em></u><u><em>
}</em></u><u><em><br />
</em></u><u><em>
d*=temp;</em></u><u><em><br />
</em></u><u><em>
long dl=Math.round(d);</em></u><u><em><br />
</em></u><u><em>
return (double)(dl)/temp;</em></u><u><em><br />
</em></u><u><em>
}</em></u><u><em><br />
</em></u><u><em>
</em></u><u><em></em></u>
<p>&#160;</p>
<p><strong><span style="font-size: 18pt"><span style="color: #ff0000">鉴于网友的的指出，我重新认真研究了一下四舍五入，最终给出正确解法如下：</span></span></strong></p>
<p>import java.math.BigDecimal;<br />
import java.text.DecimalFormat;<br />
<br />
/**<br />
* 本例通过对网上几种取四舍五入的研究，进行了一一测试。最终通过实验和理论得出round4为唯一正确的算法。<br />
* 2008/10/13<br />
*&#160;<br />
* @author jamezhan<br />
*<br />
*/<br />
public class RoundTest {<br />
<br />
public static double round1(double v, int scale) {<br />
if (scale &lt; 0)<br />
return v;<br />
<br />
String temp = "#####0.";<br />
for (int i = 0; i &lt; scale; i++) {<br />
temp += "0";<br />
}<br />
<br />
return Double.valueOf(new java.text.DecimalFormat(temp).format(v));<br />
}<br />
<br />
/**<br />
* 该算法会出现中间运算后结果超过Double.MAX_VALUE，所以不推荐使用<br />
* @param d<br />
* @param scale<br />
* @return<br />
* @throws Exception<br />
*/<br />
public static double round2(double d, int scale) throws Exception {<br />
if (scale &lt; 0)<br />
return d;<br />
<br />
long temp = 1;<br />
for (int i = scale; i &gt; 0; i--) {<br />
temp *= 10;<br />
}<br />
<br />
if (Math.abs(d * temp) &gt; Double.MAX_VALUE)<br />
throw new Exception("data is too big or too small");<br />
<br />
d *= temp;<br />
long dl = Math.round(d);<br />
return (double) (dl) / temp;<br />
}<br />
<br />
public static double round3(double v, int scale) {<br />
BigDecimal value = new BigDecimal(v);<br />
float actualTax = value.setScale(scale, BigDecimal.ROUND_HALF_UP).floatValue();<br />
return actualTax;<br />
}<br />
<br />
public static double round4(double v,int scale)<br />
{<br />
if(scale&lt;0){<br />
throw new IllegalArgumentException("The scale must be a positive integer or zero");<br />
}<br />
<br />
BigDecimal b = new BigDecimal(Double.toString(v));<br />
BigDecimal one = new BigDecimal("1");<br />
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();<br />
}<br />
<br />
public static void testRound1(double d, int scale) {<br />
System.out.println("==========================");<br />
System.out.println("data:"+ d + "; scale:"+scale);<br />
double a = round1(d, scale);<br />
System.out.println(a);<br />
<br />
DecimalFormat df = new DecimalFormat();<br />
System.out.println("formatted:"+df.format(a));<br />
}<br />
<br />
public static void testRound2(double d, int scale) {<br />
try {<br />
System.out.println("==========================");<br />
System.out.println("data:"+ d + "; scale:"+scale);<br />
double a = round2(d, scale);<br />
System.out.println(a);<br />
<br />
DecimalFormat df = new DecimalFormat();<br />
System.out.println("formatted:"+df.format(a));<br />
} catch (Exception e) {<br />
System.err.println( e.getMessage() );<br />
}<br />
}<br />
<br />
public static void testRound3(double d, int scale) {<br />
try {<br />
System.out.println("==========================");<br />
System.out.println("data:"+ d + "; scale:"+scale);<br />
double a = round3(d, scale);<br />
System.out.println(a);<br />
<br />
DecimalFormat df = new DecimalFormat();<br />
System.out.println("formatted:"+df.format(a));<br />
} catch (Exception e) {<br />
System.err.println( e.getMessage() );<br />
}<br />
}<br />
<br />
public static void testRound4(double d, int scale) {<br />
try {<br />
System.out.println("==========================");<br />
System.out.println("data:"+ d + "; scale:"+scale);<br />
double a = round4(d, scale);<br />
System.out.println(a);<br />
<br />
DecimalFormat df = new DecimalFormat();<br />
System.out.println("formatted:"+df.format(a));<br />
} catch (Exception e) {<br />
System.err.println( e.getMessage() );<br />
}<br />
}<br />
<br />
<br />
public static void main(String[] args) throws Exception {<br />
System.out.println("****************************** Test round1 ******************************");<br />
<br />
testRound1(Double.MAX_VALUE,2);<br />
testRound1(1.264,2);<br />
testRound1(-1.264,2);<br />
testRound1(1.265,2);//wrong result<br />
testRound1(-1.265,2);//wrong result<br />
testRound1(1.266,2);<br />
testRound1(-1.266,2);<br />
testRound1(10224948.265,2);//wrong result<br />
testRound1(-10224948.265,2);//wrong result<br />
testRound1(-Double.MAX_VALUE, 2);<br />
<br />
System.out.println("****************************** Test round2 ******************************");<br />
<br />
testRound2(Double.MAX_VALUE,2);<br />
testRound2(1.264,2);<br />
testRound2(-1.264,2);<br />
testRound2(1.265,2);//wrong result (java表示小数0.1的问题导致的 1.265表示为1.2599999904632568)<br />
testRound2(-1.265,2);//wrong result (由于round算法是先加0.5再运算，所以d为负数时且最后一位小数为5时结果是不正确的)<br />
testRound2(1.266,2);<br />
testRound2(-1.266,2);<br />
testRound2(10224948.265,2);<br />
testRound2(-10224948.265,2);//wrong result<br />
testRound2(-Double.MAX_VALUE, 2);<br />
<br />
<br />
System.out.println("****************************** Test round3 ******************************");<br />
<br />
testRound3(Double.MAX_VALUE,2);//wrong result&#160;<br />
testRound3(1.264,2);<br />
testRound3(-1.264,2);<br />
testRound3(1.265,2);<br />
testRound3(-1.265,2);<br />
testRound3(1.266,2);<br />
testRound3(-1.266,2);<br />
testRound3(10224948.265,2);//wrong result&#160;<br />
testRound3(-10224948.265,2);//wrong result<br />
testRound3(-Double.MAX_VALUE, 2);//wrong result&#160;<br />
<br />
System.out.println("****************************** Test round4 ******************************");<br />
<br />
testRound4(Double.MAX_VALUE,2);<br />
testRound4(1.264,2);<br />
testRound4(-1.264,2);<br />
testRound4(1.265,2);<br />
testRound4(-1.265,2);<br />
testRound4(1.266,2);<br />
testRound4(-1.266,2);<br />
testRound4(10224948.265,2);<br />
testRound4(-10224948.265,2);<br />
testRound4(-Double.MAX_VALUE, 2);<br />
<br />
}<br />
}<br />
<br />
<br />
</p>
<p>&#160;</p><img src ="http://www.blogjava.net/zhangxiong37/aggbug/42980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2006-04-25 11:38 <a href="http://www.blogjava.net/zhangxiong37/archive/2006/04/25/42980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中ThreadLocal的设计与使用[转]</title><link>http://www.blogjava.net/zhangxiong37/archive/2006/03/16/35687.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Thu, 16 Mar 2006 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2006/03/16/35687.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/35687.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2006/03/16/35687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/35687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/35687.html</trackback:ping><description><![CDATA[早在Java 1.2推出之时，Java平台中就引入了一个新的支持：java.lang.ThreadLocal，给我们在编写多线程程序时提供了一种新的选择。使用这个工具类可以很简洁地编写出优美的多线程程序，虽然ThreadLocal非常有用，但是似乎现在了解它、使用它的朋友还不多。<br><br>ThreadLocal是什么<br><br>ThreadLocal并非是一个线程的本地实现版本，它并不是一个Thread，而是thread local variable（线程局部变量）。也许把它命名为ThreadLocalVar更加合适。线程局部变量（ThreadLocal）其实的功用非常简单，就是为每一个使用该变量的线程都提供一个变量值的副本，是每一个线程都可以独立地改变自己的副本，而不会和其它线程的副本冲突。从线程的角度看，就好像每一个线程都完全拥有该变量。线程局部变量并不是Java的新发明，在其它的一些语言编译器实现（如IBM XL FORTRAN）中，它在语言的层次提供了直接的支持。因为Java中没有提供在语言层次的直接支持，而是提供了一个ThreadLocal的类来提供支持，所以，在Java中编写线程局部变量的代码相对比较笨拙，这也许是线程局部变量没有在Java中得到很好的普及的一个原因吧。<br><br><br>ThreadLocal的设计<br><br>首先看看ThreadLocal的接口：<br><br>Object get() ;<br><br>// 返回当前线程的线程局部变量副本 protected Object initialValue(); // 返回该线程局部变量的当前线程的初始值<br><br>void set(Object value); <br><br>// 设置当前线程的线程局部变量副本的值<br><br><br>ThreadLocal有3个方法，其中值得注意的是initialValue()，该方法是一个protected的方法，显然是为了子类重写而特意实现的。该方法返回当前线程在该线程局部变量的初始值，这个方法是一个延迟调用方法，在一个线程第1次调用get()或者set(Object)时才执行，并且仅执行1次。ThreadLocal中的确实实现直接返回一个null：<br><br><br>protected Object initialValue() { return null; }<br><br><br>ThreadLocal是如何做到为每一个线程维护变量的副本的呢？其实实现的思路很简单，在ThreadLocal类中有一个Map，用于存储每一个线程的变量的副本。比如下面的示例实现：<br><br><br>public class ThreadLocal<br><br>{<br><br>private Map values = Collections.synchronizedMap(new HashMap());<br><br>public Object get()<br><br>{<br><br>Thread curThread = Thread.currentThread();<br><br>Object o = values.get(curThread);<br><br>if (o == null &amp;&amp; !values.containsKey(curThread))<br><br>{<br><br>o = initialValue();<br><br>values.put(curThread, o);<br><br>}<br><br>return o;<br><br>}<br><br><br>public void set(Object newValue)<br><br>{<br><br>values.put(Thread.currentThread(), newValue);<br><br>}<br><br><br>public Object initialValue()<br><br>{<br><br>return null;<br><br>}<br><br>}<br><br><br>当然，这并不是一个工业强度的实现，但JDK中的ThreadLocal的实现总体思路也类似于此。<br><br><br>ThreadLocal的使用<br><br><br>如果希望线程局部变量初始化其它值，那么需要自己实现ThreadLocal的子类并重写该方法，通常使用一个内部匿名类对ThreadLocal进行子类化，比如下面的例子，SerialNum类为每一个类分配一个序号：<br><br><br>public class SerialNum<br><br>{<br><br>// The next serial number to be assigned<br><br><br>private static int nextSerialNum = 0;<br><br>private static ThreadLocal serialNum = new ThreadLocal()<br><br>{<br><br>protected synchronized Object initialValue()<br><br>{<br><br>return new Integer(nextSerialNum++);<br><br>}<br><br>};<br><br><br>public static int get()<br><br>{<br><br>return ((Integer) (serialNum.get())).intValue();<br><br>}<br><br>}<br><br><br>SerialNum类的使用将非常地简单，因为get()方法是static的，所以在需要获取当前线程的序号时，简单地调用：<br><br><br>int serial = SerialNum.get();<br><br><br>即可。<br><br><br>在线程是活动的并且ThreadLocal对象是可访问的时，该线程就持有一个到该线程局部变量副本的隐含引用，当该线程运行结束后，该线程拥有的所以线程局部变量的副本都将失效，并等待垃圾收集器收集。<br><br><br>ThreadLocal与其它同步机制的比较<br><br>ThreadLocal和其它同步机制相比有什么优势呢？ThreadLocal和其它所有的同步机制都是为了解决多线程中的对同一变量的访问冲突，在普通的同步机制中，是通过对象加锁来实现多个线程对同一变量的安全访问的。这时该变量是多个线程共享的，使用这种同步机制需要很细致地分析在什么时候对变量进行读写，什么时候需要锁定某个对象，什么时候释放该对象的锁等等很多。所有这些都是因为多个线程共享了资源造成的。ThreadLocal就从另一个角度来解决多线程的并发访问，ThreadLocal会为每一个线程维护一个和该线程绑定的变量的副本，从而隔离了多个线程的数据，每一个线程都拥有自己的变量副本，从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象，在编写多线程代码时，可以把不安全的整个变量封装进ThreadLocal，或者把该对象的特定于线程的状态封装进ThreadLocal。<br><br><br>由于ThreadLocal中可以持有任何类型的对象，所以使用ThreadLocal get当前线程的值是需要进行强制类型转换。但随着新的Java版本（1.5）将模版的引入，新的支持模版参数的ThreadLocal类将从中受益。也可以减少强制类型转换，并将一些错误检查提前到了编译期，将一定程度地简化ThreadLocal的使用。<br><br><br>总结<br><br>当然ThreadLocal并不能替代同步机制，两者面向的问题领域不同。同步机制是为了同步多个线程对相同资源的并发访问，是为了多个线程之间进行通信的有效方式；而ThreadLocal是隔离多个线程的数据共享，从根本上就不在多个线程之间共享资源（变量），这样当然不需要对多个线程进行同步了。所以，如果你需要进行多个线程之间进行通信，则使用同步机制；如果需要隔离多个线程之间的共享冲突，可以使用ThreadLocal，这将极大地简化你的程序，使程序更加易读、简洁。<br><img src ="http://www.blogjava.net/zhangxiong37/aggbug/35687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2006-03-16 17:33 <a href="http://www.blogjava.net/zhangxiong37/archive/2006/03/16/35687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java不能直接任意操作windows注册表</title><link>http://www.blogjava.net/zhangxiong37/archive/2006/02/23/32061.html</link><dc:creator>翠竹</dc:creator><author>翠竹</author><pubDate>Thu, 23 Feb 2006 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhangxiong37/archive/2006/02/23/32061.html</guid><wfw:comment>http://www.blogjava.net/zhangxiong37/comments/32061.html</wfw:comment><comments>http://www.blogjava.net/zhangxiong37/archive/2006/02/23/32061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangxiong37/comments/commentRss/32061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangxiong37/services/trackbacks/32061.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java不能直接任意操作windows注册表，其中java.util.prefs中的Preferences类只可以操作部分注册表，Preferences.systemRoot()获得的根目录不是注册表的根目录（eg：HKEY_CLASSES_ROOT），而是java自定义的一个系统目录&#8220;/&#8221;（比如：可能&#8220;/&#8221;=HKEY_CURRENT_USER\Software\JavaSoft\Prefs）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当然，如果不考虑系统的移植性，则可以通过JNI技术来操作注册表，网上也有开源！<img src ="http://www.blogjava.net/zhangxiong37/aggbug/32061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangxiong37/" target="_blank">翠竹</a> 2006-02-23 09:46 <a href="http://www.blogjava.net/zhangxiong37/archive/2006/02/23/32061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>