﻿<?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/jaunt/category/17630.html</link><description>站在巨人的肩上&lt;br&gt;
Flying in the world of Java</description><language>zh-cn</language><lastBuildDate>Fri, 24 Aug 2007 12:54:14 GMT</lastBuildDate><pubDate>Fri, 24 Aug 2007 12:54:14 GMT</pubDate><ttl>60</ttl><item><title>spring中的jpetstore安装</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/139085.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/139085.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/139085.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/139085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/139085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/139085.html</trackback:ping><description><![CDATA[  spring中的jpetstore安装 <br>最近用spring做了一点东西.感觉对spring有个大概的了解,对IOC比较熟悉了,不过对于AOP还是挺陌生的.在网上一直听说spring自带的jpetstore比较经典,所以想down下来看看源码..<br><br>安装过程其实比较easy的,不过刚开始弄了半天都没有搞出来,结果到后来只用几分钟就搞定了,看来有时候静下来一个人思考一下还是比较重要的.<br><br>下面简单的说一下我以Sqlserver为数据库的安装过程.<br><br>首先到http://sourceforge.net/project/showfiles.php?group_id=73357&amp;package_id=173644上去下载spring的新版本,我刚开始安装的时候是用的旧版本的jpetstore,<br>结果它的lib中的应该有的好多包都没有,还得自己去导入,导不好就会好多错误的, 我的好多时间都浪费到这个上了,而且旧版本启动spring容器只能用<br><br>Servlet org.springframework.web.context.ContextLoaderServlet这个servlet来启动的,它用不了容器监听器的.当时为这个也挺郁闷的.另外jpetstore有两种模式的,<br>一种是基于struts的,一种是基于spring.,至于你启动那种模式,只需要在web.xml改一下就行了.<br><br>第一:<br><br>下载完毕后到samples文件夹中找到jpetstore.在其中运行warfile.bat.运行后它会自动生成一个dist文件夹,把这个文件夹中的jpetstore.war拷到tomcat下的webapps下,<br>运行tomcat,它会自动生成一个jpetstore文件.然后拿samples\jpetstore\db\hsqldb中的两个sql脚本到Sqlserver的查询分析器中去执行,这是建立表,并对表进行了插值.<br>当然之前你要建一个名为jpetstore的数据库.<br><br>第二:改一下web-inf下的jdbc.property配置文件,如果用sqlserver的话,改成以下的配置就行<br><br>&nbsp;&nbsp; jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver<br><br>jdbc.url=jdbc:jtds:sqlserver://localhost:1433;DatabaseName=jpetstore <br><br>jdbc.username=sa<br><br>jdbc.password=sa<br><br>我用的是jtds驱动,所以你还得把这个jar包放到lib文件夹中,否则会报错的.<br><br>&nbsp;<br><br>然后启动tomcat,用http://localhost:8080/jpetstore/应该可以访问了.<br><br>&nbsp;
<br><img src ="http://www.blogjava.net/jaunt/aggbug/139085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 13:20 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/139085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>split()方法</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/139076.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 04:44:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/139076.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/139076.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/139076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/139076.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/139076.html</trackback:ping><description><![CDATA[<br>
在java.lang包中有String.split()方法，返回是一个数组<br>我在应用中用到一些，给大家总结一下，仅供大家参考：<br>1、如果用&#8220;.&#8221;作为分隔的话，必须是如下写法：String.split("\\."),这样才能正确的分隔开，不能用String.split(".");<br>2、如果用&#8220;|&#8221;作为分隔的话，必须是如下写法：String.split("\\|"),这样才能正确的分隔开，不能用String.split("|");<br>&#8220;.&#8221;和&#8220;|&#8221;都是转义字符，必须得加"\\";<br>3、如果在一个字符串中有多个分隔符，可以用&#8220;|&#8221;作为连字符，比如：&#8220;acount=? and uu =? or n=?&#8221;,把三个都分隔出来，可以用String.split("and|or");<br><br><br>/*<br>&nbsp;*取文件中有 . 的后辍名<br>&nbsp;*<br>package com.test;<br><br>public class Test {<br><br>&nbsp;&nbsp; &nbsp;/**<br>&nbsp;&nbsp; &nbsp; * @param args<br>&nbsp;&nbsp; &nbsp; */<br>&nbsp;&nbsp; &nbsp;public static void main(String[] args) <br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String str = "pp.liv.picture.jpg";<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String[] arr = str.split("\\.");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(arr[arr.length-1]);<br>&nbsp;&nbsp;&nbsp; }<br><br>}
<br><img src ="http://www.blogjava.net/jaunt/aggbug/139076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 12:44 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/139076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdk1.5新特点</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/139004.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/139004.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/139004.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/139004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/139004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/139004.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 9.5pt; font-family: 宋体; color: black;">　　</span><strong><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">1.</span></strong><strong><span style="font-size: 9.5pt; font-family: 宋体; color: black;">泛型</span></strong><strong><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">(Generic)</span></strong><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">　　</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">C++</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">通过模板技术可以指定集合的元素类型，而</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">Java</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">在</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">1.5</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">之前一直没有相对应的功能。一个集合可以放任何类型的对象，相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型，它允许指定集合里元素的类型，这样你可以得到强类型在编译时刻进行类型检查的好处。</span><span style="font-size: 9.5pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">Collection&lt;String&gt;</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">c</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">=</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">new</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">ArrayList();<br>
            c.add(new</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">Date());<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">　　编译器会给出一个错误：</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">add(java.lang.String)</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">in</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">java.util.Collection&lt;java.lang.String&gt;</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">cannot</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">be</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">applied</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">to</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">(java.util.Date)<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">　　</span><strong><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">2.For-Each</span></strong><strong><span style="font-size: 9.5pt; font-family: 宋体; color: black;">循环</span></strong><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">　　</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">For-Each</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为：</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">void</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">processAll(Collection</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">c){<br>
            </span><span style="font-size: 8pt; font-family: 宋体; color: black;">　　　　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">for(Iterator</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">i=c.iterator();</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">i.hasNext();){<br>
            </span><span style="font-size: 8pt; font-family: 宋体; color: black;">　　　　　　　　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">MyClass</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">myObject</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">=</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">(MyClass)i.next();<br>
            </span><span style="font-size: 8pt; font-family: 宋体; color: black;">　　　　　　　　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">myObject.process();<br>
            </span><span style="font-size: 8pt; font-family: 宋体; color: black;">　　　　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">}<br>
            }<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">　　使用</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US">For-Each</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">循环，我们可以把代码改写成：</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 12.9pt;" align="left"><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">void</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">processAll(Collection&lt;MyClass&gt;</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">c){<br>
            </span><span style="font-size: 8pt; font-family: 宋体; color: black;">　　　　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">for</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">(MyClass</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">myObject</span><span style="font-size: 8pt; font-family: 宋体; color: black;">　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">:c)<br>
            </span><span style="font-size: 8pt; font-family: 宋体; color: black;">　　　　　　　　</span><span style="font-size: 8pt; font-family: arial; color: black;" lang="EN-US">myObject.process();<br>
            }<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal"><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-size: 9.5pt; font-family: 宋体; color: black;">　　这段代码要比上面清晰许多，并且避免了强制类型转换。</span><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9.5pt; font-family: arial; color: black;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 14.25pt;" align="left"><span style="font-family: 宋体; color: black;">　</span><strong><span style="font-family: arial; color: black;" lang="EN-US">3.</span></strong><strong><span style="font-family: 宋体; color: black;">自动装包</span></strong><strong><span style="font-family: arial; color: black;" lang="EN-US">/</span></strong><strong><span style="font-family: 宋体; color: black;">拆包</span></strong><strong><span style="font-family: arial; color: black;" lang="EN-US">(Autoboxing/unboxing)</span></strong><span style="font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体; color: black;">　　自动装包</span><span style="font-family: arial; color: black;" lang="EN-US">/</span><span style="font-family: 宋体; color: black;">拆包大大方便了基本类型数据和它们包装类地使用。</span><span style="font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体; color: black;">　　自动装包：基本类型自动转为包装类</span><span style="font-family: arial; color: black;" lang="EN-US">.(int</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">&gt;&gt;</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">Integer)<br>
<br>
</span><span style="font-family: 宋体; color: black;">　　自动拆包：包装类自动转为基本类型</span><span style="font-family: arial; color: black;" lang="EN-US">.(Integer</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">&gt;&gt;</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">int)<br>
<br>
</span><span style="font-family: 宋体; color: black;">　　在</span><span style="font-family: arial; color: black;" lang="EN-US">JDK1.5</span><span style="font-family: 宋体; color: black;">之前，我们总是对集合不能存放基本类型而耿耿于怀，现在自动转换机制解决了我们的问题。</span><span style="font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 14.25pt;" align="left"><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">int</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">a</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">=</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">3;<br>
            Collection</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">c</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">=</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">new</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">ArrayList();<br>
            c.add(a);//</span><span style="font-size: 9pt; font-family: 宋体; color: black;">自动转换成</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">Integer.<br>
            <br>
            Integer</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">b</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">=</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">new</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">Integer(2);<br>
            c.add(b</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">+</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">2);<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="text-align: left; line-height: 14.25pt;" align="left"><span style="font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-family: 宋体; color: black;">　　这里</span><span style="font-family: arial; color: black;" lang="EN-US">Integer</span><span style="font-family: 宋体; color: black;">先自动转换为</span><span style="font-family: arial; color: black;" lang="EN-US">int</span><span style="font-family: 宋体; color: black;">进行加法运算，然后</span><span style="font-family: arial; color: black;" lang="EN-US">int</span><span style="font-family: 宋体; color: black;">再次转换为</span><span style="font-family: arial; color: black;" lang="EN-US">Integer.<br>
<br>
</span><span style="font-family: 宋体; color: black;">　　</span><strong><span style="font-family: arial; color: black;" lang="EN-US">4.</span></strong><strong><span style="font-family: 宋体; color: black;">枚举</span></strong><strong><span style="font-family: arial; color: black;" lang="EN-US">(Enums)</span></strong><span style="font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体; color: black;">　　</span><span style="font-family: arial; color: black;" lang="EN-US">JDK1.5</span><span style="font-family: 宋体; color: black;">加入了一个全新类型的</span><span style="font-family: arial; color: black;" lang="EN-US">&#8220;</span><span style="font-family: 宋体; color: black;">类</span><span style="font-family: arial; color: black;" lang="EN-US">&#8221;</span><span style="font-family: 宋体; color: black;">－枚举类型。为此</span><span style="font-family: arial; color: black;" lang="EN-US">JDK1.5</span><span style="font-family: 宋体; color: black;">引入了一个新关键字</span><span style="font-family: arial; color: black;" lang="EN-US">enmu.</span><span style="font-family: 宋体; color: black;">　我们可以这样来定义一个枚举类型。</span><span style="font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 14.25pt;" align="left"><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">public</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">enum</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">Color<br>
            {<br>
            </span><span style="font-size: 9pt; font-family: 宋体; color: black;">　　　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">Red,<br>
            </span><span style="font-size: 9pt; font-family: 宋体; color: black;">　　　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">White,<br>
            </span><span style="font-size: 9pt; font-family: 宋体; color: black;">　　　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">Blue<br>
            }<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 14.25pt;" align="left"><span style="font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-family: 宋体; color: black;">　　然后可以这样来使用</span><span style="font-family: arial; color: black;" lang="EN-US">Color</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">myColor</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">=</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">Color.Red.<br>
<br>
</span><span style="font-family: 宋体; color: black;">　　枚举类型还提供了两个有用的静态方法</span><span style="font-family: arial; color: black;" lang="EN-US">values()</span><span style="font-family: 宋体; color: black;">和</span><span style="font-family: arial; color: black;" lang="EN-US">valueOf().</span><span style="font-family: 宋体; color: black;">　我们可以很方便地使用它们，例如</span><span style="font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 14.25pt;" align="left"><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">for</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">(Color</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">c</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">:</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">Color.values())<br>
            </span><span style="font-size: 9pt; font-family: 宋体; color: black;">　　　　　　　　　　　　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">System.out.println(c);<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 14.25pt;" align="left"><span style="font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-family: 宋体; color: black;">　　</span><strong><span style="font-family: arial; color: black;" lang="EN-US">5.</span></strong><strong><span style="font-family: 宋体; color: black;">可变参数</span></strong><strong><span style="font-family: arial; color: black;" lang="EN-US">(Varargs)</span></strong><span style="font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体; color: black;">　　可变参数使程序员可以声明一个接受可变数目参数的方法。注意，可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象，</span><span style="font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 14.25pt;" align="left"><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">util.write(obj1);<br>
            util.write(obj1,obj2);<br>
            util.write(obj1,obj2,obj3);<br>
            &#8230;<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 14.25pt;" align="left"><span style="font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-family: 宋体; color: black;">　　在</span><span style="font-family: arial; color: black;" lang="EN-US">JDK1.5</span><span style="font-family: 宋体; color: black;">之前，我们可以用重载来实现，但是这样就需要写很多的重载函数，显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了</span><span style="font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 14.25pt;" align="left"><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">public</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">void</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">write(Object...</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">objs)</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">{<br>
            </span><span style="font-size: 9pt; font-family: 宋体; color: black;">　　　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">for</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">(Object</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">obj:</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">objs)<br>
            </span><span style="font-size: 9pt; font-family: 宋体; color: black;">　　　　　　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">System.out.println(obj);<br>
            }<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="margin-bottom: 12pt; text-align: left; line-height: 14.25pt;" align="left"><span style="font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-family: 宋体; color: black;">　　在引入可变参数以后，</span><span style="font-family: arial; color: black;" lang="EN-US">Java</span><span style="font-family: 宋体; color: black;">的反射包也更加方便使用了。对于</span><span style="font-family: arial; color: black;" lang="EN-US">c.getMethod("test",</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">new</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">Object[0]).invoke(c.newInstance(),</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">new</span><span style="font-family: 宋体; color: black;">　</span><span style="font-family: arial; color: black;" lang="EN-US">Object[0]))</span><span style="font-family: 宋体; color: black;">，现在我们可以这样写了</span><span style="font-family: arial; color: black;" lang="EN-US">c.getMethod("test").invoke(c.newInstance())</span><span style="font-family: 宋体; color: black;">，这样的代码比原来清楚了很多。　</span><span style="font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体; color: black;">　　</span><strong><span style="font-family: arial; color: black;" lang="EN-US">6.</span></strong><strong><span style="font-family: 宋体; color: black;">静态导入</span></strong><strong><span style="font-family: arial; color: black;" lang="EN-US">(Static</span></strong><strong><span style="font-family: 宋体; color: black;">　</span></strong><strong><span style="font-family: arial; color: black;" lang="EN-US">Imports)</span></strong><span style="font-family: arial; color: black;" lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体; color: black;">　　要使用用静态成员（方法和变量）我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见，使用这些静态成员无需再给出他们的类名。</span><span style="font-family: arial; color: black;" lang="EN-US"><o:p></o:p></span></p>
<div align="center">
<table class="MsoNormalTable" style="background: #e6e4dd none repeat scroll 0% 50%; width: 90%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" border="1" cellpadding="0" width="90%">
    <tbody>
        <tr>
            <td style="padding: 0.75pt;">
            <p class="MsoNormal" style="text-align: left; line-height: 14.25pt;" align="left"><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">import</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">static</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">java.lang.Math.*;<br>
            &#8230;&#8230;.<br>
            r</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">=</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">sin(PI</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">*</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">2);</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">//</span><span style="font-size: 9pt; font-family: 宋体; color: black;">无需再写</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">r</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">=</span><span style="font-size: 9pt; font-family: 宋体; color: black;">　</span><span style="font-size: 9pt; font-family: arial; color: black;" lang="EN-US">Math.sin(Math.PI);<o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal"><span style="font-family: arial; color: black;" lang="EN-US"><br>
</span><span style="font-family: 宋体; color: black;">　　不过，过度使用这个特性也会一定程度上降低代码地可读性。</span></p><img src ="http://www.blogjava.net/jaunt/aggbug/139004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 09:25 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/139004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c:forEach标签的使用</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/139002.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/139002.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/139002.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/139002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/139002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/139002.html</trackback:ping><description><![CDATA[<div>
<strong><font size="2">c:forEach标签的使用</font></strong><br>
<br>
在JSP的开发中，迭代是经常要使用到的操作。例如，逐行的显示查询的结果等。在早期的JSP中，通常使用Scriptlets来实现Iterator或 者Enumeration对象的迭代输出。现在，通过JSTL的迭代标签可以在很大的程度上简化迭代操作。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSTL所支持的迭代标签有两个，分别是c:forEach和c:forTokens。在这里介绍的是c:forEach标签。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单点说，标签的作用就是迭代输出标签内部的内容。它既可以进行固定次数的迭代输出，也可以依据集合中对象的个数来决定迭代的次数。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c:forEach标签的语法定义如下所示。<br>
<br>
<div class="code_title">
xml 代码
</div>
<div class="dp-highlighter">
<ol class="dp-xml">
    <li class="alt">
    <span><span class="tag">&lt;</span><span class="tag-name">c:forEach</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">items</span><span>=</span><span class="attribute-value">"expression"</span><span>&nbsp;</span><span class="attribute">varStatus</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp; &nbsp;&nbsp;</span></span>
    </li>
    <li class="">
    <span>&nbsp;&nbsp;</span>
    </li>
    <li class="alt">
    <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">begin</span><span>=</span><span class="attribute-value">"expression"</span><span>&nbsp;</span><span class="attribute">end</span><span>=</span><span class="attribute-value">"expression"</span><span>&nbsp;</span><span class="attribute">step</span><span>=</span><span class="attribute-value">"expression"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    </li>
    <li class="">
    <span>&nbsp;&nbsp;</span>
    </li>
    <li class="alt">
    <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;body&nbsp;content&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li class="">
    <span>&nbsp;&nbsp;</span>
    </li>
    <li class="alt">
    <span></span><span class="tag">&lt;/</span><span class="tag-name">c:forEach</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    </li>
</ol>
</div>
<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标签具有以下一些属性：<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var：迭代参数的名称。在迭代体中可以使用的变量的名称，用来表示每一个迭代变量。类型为String。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items：要进行迭代的集合。对于它所支持的类型将在下面进行讲解。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varStatus：迭代变量的名称，用来表示迭代的状态，可以访问到迭代自身的信息。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin：如果指定了items，那么迭代就从items[begin]开始进行迭代；如果没有指定items，那么就从begin开始迭代。它的类型为整数。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end：如果指定了items，那么就在items[end]结束迭代；如果没有指定items，那么就在end结束迭代。它的类型也为整数。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; step：迭代的步长。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标签的items属性支持Java平台所提供的所有标准集合类型。此外，您可以使用该操作来迭代数组（包括基本类型数组）中的元素。它所支持的集合类型以及迭代的元素如下所示：<br><br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Collection：调用iterator()来获得的元素。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Map：通过java.util.Map.Entry所获得的实例。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Iterator：迭代器元素。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Enumeration：枚举元素。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object实例数组：数组元素。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本类型值数组：经过包装的数组元素。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用逗号定界的String：分割后的子字符串。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.servlet.jsp.jstl.sql.Result：SQL查询所获得的行。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不论是对整数还是对集合进行迭代，的varStatus
属性所起的作用相同。和var属性一样，varStatus用于创建限定了作用域的变量（改变量只在当前标签体内起作用）。不过，由varStatus属
性命名的变量并不存储当前索引值或当前元素，而是赋予javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该
类包含了一系列的特性，它们描述了迭代的当前状态，如下这些属性的含义如下所示：<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; current：当前这次迭代的（集合中的）项。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index：当前这次迭代从0开始的迭代索引。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count：当前这次迭代从1开始的迭代计数。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; first：用来表明当前这轮迭代是否为第一次迭代，该属性为boolean类型。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last：用来表明当前这轮迭代是否为最后一次迭代，该属性为boolean类型。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin：begin属性的值。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end：end属性的值<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; step：step属性的值<br>
<br>
下面就来看一个个基本的例子，表格隔行背景色变化
</div>
<div class="code_title">
xml 代码
</div>
<ol class="dp-xml">
    <li class="alt">
    <span><span class="tag">&lt;</span><span class="tag-name">c:forEach</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">"item"</span><span>&nbsp;</span><span class="attribute">items</span><span>=</span><span class="attribute-value">"${contents}"</span><span>&nbsp;</span><span class="attribute">varStatus</span><span>=</span><span class="attribute-value">"status"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    </li>
    <li class="">
    <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">c:if</span><span>&nbsp;</span><span class="attribute">test</span><span>=</span><span class="attribute-value">"${status.count%2==0}"</span><span class="tag">&gt;</span><span class="attribute">bgcolor</span><span>=</span><span class="attribute-value">"#CCCCFE"</span><span class="tag">&lt;/</span><span class="tag-name">c:if</span><span class="tag">&gt;</span><span>&nbsp;</span><span class="attribute">align</span><span>=</span><span class="attribute-value">"left"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    </li>
    <li class="alt">
    <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xxx &nbsp;&nbsp;</span>
    </li>
    <li class="">
    <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    </li>
    <li class="alt">
    <span></span><span class="tag">&lt;/</span><span class="tag-name">c:forEach</span><span class="tag">&gt;</span>
    </li>
</ol><img src ="http://www.blogjava.net/jaunt/aggbug/139002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 09:24 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/139002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 快捷键</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/138999.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/138999.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/138999.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/138999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/138999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/138999.html</trackback:ping><description><![CDATA[<p><font face="Arial">MyEclipse 快捷键<br>
（1）Ctrl+M切换窗口的大小<br>
（2）Ctrl+Q跳到最后一次的编辑处<br>
（3）F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F3跳到声明或定义的地方。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F5单步调试进入函数内部。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F6单步调试不进入函数内部，如果装了金山词霸2006则要把&#8220;取词开关&#8221;的快捷键改成其他的。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F7由函数内部返回到调用处。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F8一直执行到下一个断点。<br>
（4）Ctrl+Pg~对于XML文件是切换代码和图示窗口<br>
（5）Ctrl+Alt+I看Java文件中变量的相关信息<br>
（6）Ctrl+PgUp对于代码窗口是打开&#8220;Show List&#8221;下拉框，在此下拉框里显示有最近曾打开的文件<br>
（7）Ctrl+/ 在代码窗口中是这种//~注释。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctrl+Shift+/ 在代码窗口中是这种/*~*/注释，在JSP文件窗口中是&lt;!--~--&gt;。<br>
（8）Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显，并且窗口的右边框会出现白色的方块，点击此方块会跳到此标记处。<br>
（9）右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。<br>
（10）Ctrl+I格式化激活的元素Format Active Elements。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctrl+Shift+F格式化文件Format Document。<br>
（11）Ctrl+S保存当前文件。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctrl+Shift+S保存所有未保存的文件。<br>
（12）Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctrl+Shift+O作用是缺少的Import语句被加入，多余的Import语句被删除。<br>
（13）Ctrl+Space提示键入内容即Content Assist，此时要将输入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷键（用于切换英文和其他文字）改成其他的。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ctrl+Shift+Space提示信息即Context Information。<br>
（14）双击窗口的左边框可以加断点。<br>
（15）Ctrl+D删除当前行。</font></p>
<font face="Arial">
<p><br>
－－－待续</p>
<p><br>
[以下为转载]<br>
Eclipse快捷键大全<br>
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)<br>
Ctrl+D: 删除当前行 <br>
Ctrl+Alt+&#8595; 复制当前行到下一行(复制增加)<br>
Ctrl+Alt+&#8593; 复制当前行到上一行(复制增加)</p>
<p>Alt+&#8595; 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br>
Alt+&#8593; 当前行和上面一行交互位置(同上)<br>
Alt+&#8592; 前一个编辑的页面<br>
Alt+&#8594; 下一个编辑的页面(当然是针对上面那条来说了)</p>
<p>Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性</p>
<p>Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br>
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)</p>
<p>Ctrl+Q 定位到最后编辑的地方<br>
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)<br>
Ctrl+M 最大化当前的Edit或View (再按则反之)<br>
Ctrl+/ 注释当前行,再按则取消注释<br>
Ctrl+O 快速显示 OutLine<br>
Ctrl+T 快速显示当前类的继承结构<br>
Ctrl+W 关闭当前Editer<br>
Ctrl+K 参照选中的Word快速定位到下一个<br>
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)</p>
<p>Ctrl+/(小键盘) 折叠当前类中的所有代码</p>
<p>Ctrl+&#215;(小键盘) 展开当前类中的所有代码</p>
<p>Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)</p>
<p>Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)</p>
<p>Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)</p>
<p>Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)</p>
<p>Ctrl+Shift+F4 关闭所有打开的Editer</p>
<p>Ctrl+Shift+X 把当前选中的文本全部变味小写</p>
<p>Ctrl+Shift+Y 把当前选中的文本全部变为小写</p>
<p>Ctrl+Shift+F 格式化当前代码</p>
<p>Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)</p>
<p>下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)</p>
<p>Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)</p>
<p>Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)</p>
<p>Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)</p>
<p>Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)</p>
<p>Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)</p>
<p>Alt+Shift+I 合并变量(可能这样说有点不妥Inline)<br>
Alt+Shift+V 移动函数和变量(不怎么常用)<br>
Alt+Shift+Z 重构的后悔药(Undo) </p>
</font>  <img src ="http://www.blogjava.net/jaunt/aggbug/138999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 09:23 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/138999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Eclipse 的历史、现状和未来</title><link>http://www.blogjava.net/jaunt/archive/2007/08/24/138998.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Aug 2007 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/08/24/138998.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/138998.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/08/24/138998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/138998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/138998.html</trackback:ping><description><![CDATA[<p>转载</p>
<p>来源:javaresearch</p>
2001&nbsp;年&nbsp;11&nbsp;月，IBM&nbsp;向开源社区捐献了&nbsp;Eclipse&nbsp;代码，自此&nbsp;Eclipse&nbsp;在开发者社区得到飞速发展。2006&nbsp;年&nbsp;1月
19日，Eclipse&nbsp;国际高峰论坛也首次登陆中国，在清华大学信息科学技术大楼举行。在这次&nbsp;Eclipse&nbsp;大会上
&nbsp;developerWorks&nbsp;编辑团队与&nbsp;IBM&nbsp;的&nbsp;Eclipse&nbsp;策略经理&nbsp;John&nbsp;Kellerman&nbsp;进行了座谈，聆听了他对
&nbsp;Eclipse&nbsp;历史的追溯、对&nbsp;Eclipse&nbsp;架构的分析、对&nbsp;Eclipse&nbsp;现状分析、对未来发展的展望。<br>
&nbsp;&nbsp;&nbsp;&nbsp;John&nbsp;Kellerman，IBM&nbsp;软件部&nbsp;Rational&nbsp;产品总经理，与&nbsp;1984&nbsp;年加入&nbsp;IBM,&nbsp;一直从事应用开发工作。
2000&nbsp;年初，John&nbsp;开始加入了&nbsp;Eclipse&nbsp;项目，现在任职&nbsp;IBM&nbsp;Eclipse&nbsp;策略部总经理。他现在的主要工作是在
&nbsp;Eclipse&nbsp;基金会、Eclipse&nbsp;社区中代表&nbsp;IBM&nbsp;的利益，与&nbsp;Eclipse&nbsp;成员公司合作。<br>
<br>
developerWorks:&nbsp;IBM&nbsp;开发工具的发展经历了从最初的&nbsp;Visual&nbsp;Age到今天基于&nbsp;Eclipse&nbsp;3.0&nbsp;的产品,&nbsp;可以说是非常大的飞跃，您可否给我们谈一下这其中的历史？<br>
<br>
John:&nbsp;我在加入&nbsp;Eclipse&nbsp;项目之前，是&nbsp;IBM&nbsp;Visual&nbsp;Age&nbsp;for&nbsp;SmallTalk&nbsp;的产品经理。Eclipse&nbsp;起源的
一个非常重要的原因是，当时IBM&nbsp;面临着一些挑战需要去解决，即&nbsp;IBM&nbsp;开发工具&nbsp;Visual&nbsp;Age&nbsp;for&nbsp;Java&nbsp;和
&nbsp;WebSphere&nbsp;Studio&nbsp;很难集成到一起，而且底层的技术比较脆弱，因此进一步发展非常艰难，无法满足业界应用开发的需求。&nbsp;<br>
因此，1998&nbsp;年，我们开始了下一代开发工具技术探索之路，成立了一个项目开发小组，经过两年的发展，2000年，我们决定给新一代开发工具项目命名为
&nbsp;Eclipse，Eclipse&nbsp;叫法当时只是内部使用的名称。这时候的商业目标就是希望&nbsp;Eclipse&nbsp;项目能够吸引开发人员，能发展起一个强大而
又充满活力的商业合作伙伴（独立软件供应商）社区。同时我们意识到需要用它来对抗&nbsp;Microsoft&nbsp;Visual&nbsp;Studio&nbsp;的发展，因此从商业
目标考虑，通过开源的方式我们最有机会达到目的。此外，IBM&nbsp;推出了&nbsp;Eclipse&nbsp;试用计划，允许&nbsp;IBM&nbsp;以外的开发人员使用&nbsp;Eclipse。
结果证明我们的决策非常正确，Eclipse&nbsp;从此在开发社区广为流传。Eclipse&nbsp;也就成为这个项目的正式名称。<br>
<br>
我们认为开源&nbsp;Eclipse&nbsp;不能只是简单地贡献出源码，创建一个开源项目然后放在开源许可证下；我们需要建立起多家公司的合作关系，否则就不足信服，
不是真正的开源项目，而只是&nbsp;IBM&nbsp;的一个项目。因此在&nbsp;2000&nbsp;年到&nbsp;2001&nbsp;年之间，我做的主要工作就是去拜访一些公司，与他们谈论
&nbsp;Eclipse,邀请他们加入&nbsp;Eclipse&nbsp;项目。&nbsp;您可以想象，这是非常有趣的谈话，最终，我们与&nbsp;8&nbsp;家公司达成了一致，其中包括一些
&nbsp;IBM&nbsp;的竞争对手&nbsp;WebGain、Borland,&nbsp;还有一些盟友如&nbsp;Rational（Rational&nbsp;当时还没有被&nbsp;IBM&nbsp;收购）。<br>
<br>
2001&nbsp;年&nbsp;12&nbsp;月，IBM&nbsp;向世界宣布了两件事，第一件是创建开源项目，既&nbsp;IBM&nbsp;捐赠价值&nbsp;4&nbsp;千万美元的源码给开源社区；另外一件事是成立
&nbsp;Eclipse&nbsp;协会（Eclipse&nbsp;Consortium）,这个协会由一些成员公司组成，主要任务是支持并促进&nbsp;Eclipse&nbsp;开源项目。<br>
<br>
从此，我们看到了&nbsp;Eclipse&nbsp;本身、会员、插件（plug-in）和&nbsp;Eclipse&nbsp;社区飞速成长。2003&nbsp;年，我们意识到这种会员模式很难进
一步扩展，有些事务操作起来很困难，比如无法筹集赠款、无法成立合法理事会，这主要是因为&nbsp;Eclipse&nbsp;协会不是一个法律上的实体；此外，尽管
&nbsp;Eclipse&nbsp;成功有目共睹，但仍然有些业界成员没有加入，他们认为是&nbsp;Eclipse&nbsp;的真正领导者是&nbsp;IBM。因此我们认识到创建一个独立于
&nbsp;IBM&nbsp;的&nbsp;Eclipse&nbsp;将会对&nbsp;Eclipse&nbsp;的发展非常有利,&nbsp;于是&nbsp;IBM&nbsp;与其他成员公司合作起草了管理条例，准备成立
&nbsp;Eclipse&nbsp;基金会（Eclipse&nbsp;Foundation）。2004&nbsp;年初，Eclipse&nbsp;基金会正式成立。&nbsp;<br>
<br>
developerWorks:&nbsp;Eclipse&nbsp;由一个很小的核心和核心之上的大量插件组成，这种插件式架构给当时的开发社区带来耳目一新的冲击。您能给我们介绍一下&nbsp;Eclipse&nbsp;插件架构吗？<br>
<br>
John:&nbsp;对于&nbsp;Eclipse&nbsp;插件架构，一个很好的比喻是&nbsp;Web&nbsp;浏览器，它也有插件，Eclipse&nbsp;插件和浏览器相似，都是要解决扩展性问
题。对于一个&nbsp;Web&nbsp;浏览器，如果你想既能浏览多媒体动画，又想浏览&nbsp;PDF&nbsp;文件，那么你就需要两个不同的插件，才能保证两种内容都能在&nbsp;Web&nbsp;浏
览器中显示。&nbsp;Eclipse&nbsp;也一样，通过它的插件模式我们可以安装不同的插件来进行&nbsp;HTML&nbsp;的编辑、数据库的设计、Java&nbsp;开发、C++&nbsp;开发
等等，所有这些开发工作完全在一个&nbsp;Eclipse&nbsp;安装平台上进行。而且&nbsp;Eclipse&nbsp;模型所能做的远超过了这些，理解&nbsp;Eclipse&nbsp;插件的关
键是首先要理解&nbsp;Eclipse&nbsp;扩展点，正是这个扩展点帮您在&nbsp;Eclipse&nbsp;中添加新功能。例如，如果希望在菜单中添加一项，就是通过
&nbsp;Eclipse&nbsp;扩展点实现的。<br>
<br>
所以当&nbsp;Eclipse&nbsp;插件实现了一个扩展点，就创建了一个扩展，此外，扩展还可以创建自己的扩展点。这种插件模式的扩展和扩展点是递归的，而且被证明
是非常灵活的。记得当我们着手对&nbsp;Eclipse&nbsp;开发进行区域性调查时，最初的决定之一是：
"We&nbsp;will&nbsp;eat&nbsp;our&nbsp;own&nbsp;dog&nbsp;food"（编者注：谚语，指一个公司在日常运行中使用自己的产品），即&nbsp;Eclipse&nbsp;团队要使
用&nbsp;Eclipse&nbsp;进行&nbsp;Eclipse&nbsp;的开发。事实上，Eclipse&nbsp;本身是一个核心的运行时绑定了一些在插件之上构建的插件，换句话说，
Eclipse&nbsp;本身就是一系列的插件。这样随着使用&nbsp;Eclipse&nbsp;构建&nbsp;Eclipse&nbsp;的经验累积，这种插件模式就变得日臻成熟。<br>
<br>
developerWorks:&nbsp;IBM&nbsp;对&nbsp;Eclipse&nbsp;已经投入了非常多的资源，IBM&nbsp;在&nbsp;Eclipse&nbsp;的将来会扮演什么角色呢？<br>
<br>
John:&nbsp;目前&nbsp;Eclipse&nbsp;项目有&nbsp;100&nbsp;多个，IBM&nbsp;参与了其中超过一半的项目，有&nbsp;3&nbsp;个主管在主持&nbsp;Eclipse&nbsp;相关的工作。
2005&nbsp;年我们还赞助了一些&nbsp;Eclipse&nbsp;创新基金和&nbsp;Eclipse&nbsp;奖学金。IBM&nbsp;承诺在未来的几年内会一如既往地参与&nbsp;Eclipse&nbsp;研
究，我们将会看到&nbsp;IBM&nbsp;研发出新项目，而在某些&nbsp;Eclipse&nbsp;项目上减少参与，这要看&nbsp;IBM&nbsp;的商业目标。最近我们提议了一个项目叫
&nbsp;Beacon,&nbsp;是关于&nbsp;Eclipse&nbsp;流程框架的。我们将捐献一些&nbsp;Rational&nbsp;Unified&nbsp;Process&nbsp;(RUP)&nbsp;技术，基本上
这个提议是要提供流程方面的内容。IBM&nbsp;现在与一家叫做&nbsp;Zend&nbsp;的公司合作，希望在&nbsp;Eclipse&nbsp;上开发出用于&nbsp;PHP&nbsp;的开发工具。从商业方
面看&nbsp;IBM,&nbsp;您会发现&nbsp;Eclipse&nbsp;是&nbsp;Rational&nbsp;软件开发平台的基础。此外由于&nbsp;Eclipse&nbsp;的插件模式、扩展性、集成性，我们为
Rational,&nbsp;WebSphere,&nbsp;Lotus&nbsp;和&nbsp;Tivoli&nbsp;构建了统一的平台。<br>
<br>
developerWorks:&nbsp;目前&nbsp;IBM&nbsp;的五大旗舰品牌都有基于&nbsp;Eclipse&nbsp;的产品,&nbsp;这对&nbsp;IBM&nbsp;有什么好处？<br>
<br>
John:&nbsp;我们的目标是创建集成统一平台，我们有基于&nbsp;Eclipse&nbsp;构建的&nbsp;DB2,&nbsp;Rational,&nbsp;WebSphere&nbsp;等工具，这样客户
就可以共同使用这些工具，有统一的界面风格，使用起来非常方便。对&nbsp;IBM&nbsp;自身来说，各个开发部门就可以关注于软件的核心性能开发，而不必要浪费资源做
一些重新实现的工作，从而&nbsp;DB2&nbsp;开发部门就专注于数据库开发、WebSphere&nbsp;专注应用服务器的开发、Rational&nbsp;专注于建模、源代码管
理，至于其他方面的辅助开发对于&nbsp;Eclipse&nbsp;来说是共同的。<br>
<br>
developerWorks:&nbsp;Eclipse&nbsp;是一个开源&nbsp;IDE,&nbsp;那如何通过&nbsp;Eclipse&nbsp;创造商业利益呢？<br>
<br>
John:&nbsp;对于&nbsp;IBM,&nbsp;在&nbsp;Eclipse&nbsp;技术开发方面与上百家公司合作，因为&nbsp;IBM&nbsp;看到了&nbsp;Eclipse&nbsp;作为通用的、开放的、标准的技
术基础，其价值日益成长。当然，这种基础技术是不会带来创收的，没有人可以使用&nbsp;Eclipse&nbsp;技术来赚钱，但这并不重要，就像&nbsp;Borland,
&nbsp;Sybase&nbsp;等公司都在花费钱做同样的构建工作，当然我们在这方面还有合作，但是我们还专注于将我们的核心功能组件构建在&nbsp;Eclipse&nbsp;平台上，
例如，IBM&nbsp;的&nbsp;Rational&nbsp;Application&nbsp;Developer,&nbsp;它是使用&nbsp;Eclipse&nbsp;作为基础，然后在这基础上添加了建模插
件、Web&nbsp;开发插件，还有其它更有价值的插件，这些插件我们是收费的。这就是使用&nbsp;Eclipse&nbsp;进行商业创收的模式之一。<br>
此外，人们还可以直接为&nbsp;Eclipse&nbsp;构建插件，然后出售这些插件来赚钱，因为插件可以使用商业许可证发行。事实上我们建立&nbsp;Eclipse&nbsp;公共许
可证，就是为了让&nbsp;Eclipse&nbsp;能很好的被商业采用，从而可以用它来赚钱，Eclipse&nbsp;的所有成员公司基本都是商业软件提供商。目前全球有上百万
开发人员在使用&nbsp;Eclipse,&nbsp;因此中国开发人员完全可以构建有价值的插件和工具，然后进行销售。同时&nbsp;IBM&nbsp;有一个合作伙伴计划，帮助合作伙伴宣
传在&nbsp;IBM&nbsp;基于&nbsp;Eclipse&nbsp;的产品之上构建的应用。<br>
<br>
developerWorks:&nbsp;富客户端平台(RCP)目前是比较流行的应用开发模式，请谈一下&nbsp;Eclipse&nbsp;是如何支持富客户端的？<br>
<br>
John:&nbsp;在&nbsp;Eclipse&nbsp;的早期，有些用户试图除了将&nbsp;Eclipse用于开发工具基础平台外，还用作更普遍的商业应用基础。他们认为一个
&nbsp;IDE&nbsp;就是一个特殊的富客户端应用。这就是开放源码开发的魅力所在，当这些用户试着用&nbsp;Eclipse&nbsp;作为通用富客户端时，他们就把这些想法建议反
馈给&nbsp;Eclipse&nbsp;开发小组。就这样&nbsp;Eclipse&nbsp;经过了&nbsp;2.0&nbsp;到&nbsp;2.1&nbsp;的发展，不断收到来自社区的建议和反馈，终于到了一个通用化的阶
段。在3.0&nbsp;版发行时，我们觉得时机成熟，于是正式声明将&nbsp;Eclipse&nbsp;作为通用的富客户端和&nbsp;IDE。<br>
<br>
其实最早的反馈是来自我们的&nbsp;Lotus&nbsp;开发小组，他们在&nbsp;Eclipse&nbsp;3.0&nbsp;之前就意识到可以使用&nbsp;Eclipse&nbsp;来提供他们
&nbsp;Workplace&nbsp;客户端的富客户端版本。从&nbsp;Eclipse&nbsp;3.0&nbsp;到&nbsp;3.1&nbsp;再到&nbsp;3.2,&nbsp;我们看到富客户端平台应用的快速增长，同时也收
到越来越多反馈帮我们完善提高。<br>
<br>
我最欣赏的&nbsp;RCP&nbsp;应用之一是在EclipseCon&nbsp;2005&nbsp;上的一个演示，演示的是美国国家航空航天管理局(NASA)的一个项目，当时
&nbsp;NASA&nbsp;在加利福尼亚州有个实验室叫&nbsp;Jet&nbsp;Propulsion&nbsp;Laboratory&nbsp;(JPL)，负责火星探测计划，他们的管理用户界面就是
一个&nbsp;Eclipse&nbsp;RCP&nbsp;应用，通过这个应用，加利福尼亚州的工作人员就可以控制在火星上运行的火星车。在演示过程中，有人问为什么使用
&nbsp;Eclipse,&nbsp;回答是，使用&nbsp;Eclipse&nbsp;这门技术，他们不用担心，而且还节省了不少纳税人的钱，因为他们只需要集中资源开发控制火星车的应用
就可以了。<br>
<br>
developerWorks:&nbsp;Eclipse&nbsp;现在非常热门，您认为从微软的开发平台转到&nbsp;Eclipse&nbsp;上容易吗？<br>
<br>
John:&nbsp;这个问题可以从两方面来说明，一是软件提供商从&nbsp;Visual&nbsp;Studio&nbsp;移到&nbsp;Eclipse&nbsp;上，另一方面是微软平台上开发的程序的移植。<br>
<br>
Eclipse&nbsp;提供了不同的集成方法，可以是非常轻量级的集成，即只是简单的调用和返回。Eclipse可以处理&nbsp;ActiveX&nbsp;控件，这样
&nbsp;Word,&nbsp;Excel&nbsp;就可以在&nbsp;Eclipse&nbsp;里打开，这是另一种集成模式。有些供应商选择把他们的工具封装在&nbsp;Java&nbsp;层，即保留&nbsp;C/C+
+&nbsp;工具，封装在&nbsp;Java&nbsp;里与&nbsp;Eclipse&nbsp;进行通信。如果软件供应商希望将工具构建成&nbsp;Eclipse&nbsp;插件，那么我们通常建议在
&nbsp;Eclipse&nbsp;中用&nbsp;Java&nbsp;重新实现，因为几乎所有的微软工具都是&nbsp;C/C++&nbsp;工具。因此工具的迁移可以分三步走：轻量级集成、重量级集成和重
新实现。<br>
<br>
如果要迁移程序，Eclipse&nbsp;提供了一些设施。但难易程度取决于程序是用什么工具开发的，因为最重要的部分是（版本控制系统的）代码库本身，如果代码
库同时支持&nbsp;Visual&nbsp;Studio&nbsp;和&nbsp;Eclipse,&nbsp;那就容易的多。此外有一些公司提供了迁移系统，在&nbsp;Eclipse&nbsp;网站的社区部分中可
以查看这些公司列表。<br>
<br>
developerWorks:&nbsp;对个体开发人员，他们如何能够参与&nbsp;Eclipse&nbsp;项目？<br>
<br>
John:&nbsp;Eclipse&nbsp;是完全开放的，任何人都可以参与，参与的最简单方法是关注它的新闻组，选择一个感兴趣的技术领域，然后下载代码，自己做些实
验，并在新闻组上回答一些问题，这样随着技术的提高，就可以向&nbsp;Bugzilla&nbsp;提交&nbsp;bug&nbsp;和修复包，或去修复其他&nbsp;bug。如果得到项目工作组的
认可，便可以承担项目的一些义务，成为项目开发组的真正成员。此外还可以写一些文章发送到&nbsp;Eclipse&nbsp;组织，参加本地的&nbsp;Eclipse&nbsp;用户组等
等方式。<br>
<br>
如果有兴趣成立一个&nbsp;Eclipse&nbsp;开源项目，Eclipse&nbsp;上有一个文档"Eclipse&nbsp;Development&nbsp;Process",描述了如何操作。<br>
<br>
developerWorks:&nbsp;最后请给我们谈谈&nbsp;Eclipse&nbsp;下个版本的情况？<br>
<br>
John:&nbsp;Eclipse&nbsp;3.2&nbsp;计划于今年&nbsp;6&nbsp;月面世，名称是&nbsp;Callisto,&nbsp;选择&nbsp;Callisto&nbsp;作为名称是按社区要求的，因为这次
目标是同时发布&nbsp;10&nbsp;个主要的&nbsp;Eclipse&nbsp;项目，以支持成员公司生态系统需求，他们将要把&nbsp;Eclipse&nbsp;框架集成到各自的软件产品中。<br>
<br>
developerWorks:&nbsp;感谢您接受我们的采访。   <img src ="http://www.blogjava.net/jaunt/aggbug/138998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-08-24 09:21 <a href="http://www.blogjava.net/jaunt/archive/2007/08/24/138998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse常用技巧</title><link>http://www.blogjava.net/jaunt/archive/2007/03/21/105366.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Wed, 21 Mar 2007 12:52:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2007/03/21/105366.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/105366.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2007/03/21/105366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/105366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/105366.html</trackback:ping><description><![CDATA[
		<p>热键篇：<br />Template：Alt + /<br />修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;编辑-&gt;内容辅助。<br />个人习惯：Shift+SPACE(空白)。<br />简易说明：编辑程序代码时，打sysout +Template激活键，就<br />会自动出现：System.out.println(); 。<br />设定Template的格式：窗口-&gt;喜好设定-&gt;Java-&gt;编辑器-&gt;模板。</p>
		<p>程序代码自动排版：Ctrl+Shift+F<br />修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;程序代码-&gt;格式。<br />个人习惯：Alt+Z。<br />自动排版设定：窗口-&gt;喜好设定-&gt;Java-&gt;程序代码格式制作程序。<br />样式页面-&gt;将插入tab(而非空格键)以内缩，该选项取消勾选<br />，下面空格数目填4，这样在自动编排时会以空格4作缩排。</p>
		<p>快速执行程序：Ctrl + F11<br />个人习惯：ALT+X<br />修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;执行-&gt;激活前一次的激活作业。<br />简易说明：第一次执行时，它会询问您执行模式，<br />设置好后，以后只要按这个热键，它就会快速执行。<br />&lt;ALT+Z(排版完)、ATL+X(执行)&gt;..我觉得很顺手^___^</p>
		<p>自动汇入所需要的类别：Ctrl+Shift+O<br />简易说明：<br />假设我们没有Import任何类别时，当我们在程序里打入：</p>
		<p>BufferedReader buf =<br />new BufferedReader(new InputStreamReader(System.in));<br />此时Eclipse会警示说没有汇入类别，这时我们只要按下Ctrl+Shift+O<br />，它就会自动帮我们Import类别。</p>
		<p>查看使用类别的原始码：Ctrl+鼠标左键点击<br />简易说明：可以看到您所使用类别的原始码。</p>
		<p>将选取的文字批注起来：Ctrl+/<br />简易说明：Debug时很方便。<br />修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;程序代码-&gt;批注</p>
		<p>视景切换：Ctrl+F8<br />个人习惯：Alt+S。<br />修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;窗口-&gt;下一个视景。<br />简易说明：可以方便我们快速切换编辑、除错等视景。</p>
		<p>密技篇：<br />一套Eclipse可同时切换，英文、繁体、简体显示：<br />1.首先要先安装完中文化包。<br />2.在桌面的快捷方式后面加上参数即可，<br />英文-&gt; -nl "zh_US"<br />繁体-&gt; -nl "zh_TW"<br />简体-&gt; -nl "zh_CN"。<br />(其它语系以此类推)<br />像我2.1.2中文化后，我在我桌面的Eclipse快捷方式加入参数-n1 "zh_US"。<br />"C:\Program Files\eclipse\eclipse.exe" -n "zh_US"<br />接口就会变回英文语系噜。</p>
		<p>利用Eclipse，在Word编辑文书时可不必将程序代码重新编排：<br />将Eclipse程序编辑区的程序代码整个复制下来(Ctrl+C)，直接贴(Ctrl+V)到<br />Word或WordPad上，您将会发现在Word里的程序代码格式，跟Eclipse<br />所设定的完全一样，包括字型、缩排、关键词颜色。我曾试过JBuilder<br />、GEL、NetBeans...使用复制贴上时，只有缩排格式一样，字型、颜<br />色等都不会改变。</p>
		<p>外挂篇：<br />外挂安装：将外挂包下载回来后，将其解压缩后，您会发现features、<br />plugins这2个资料夹，将里面的东西都复制或移动到Eclipse的features<br />、plugins资料夹内后，重新激活Eclipse即可。</p>
		<p>让Eclipse可以像JBuilderX一样使用拖拉方式建构GUI的外挂：<br />1.Jigloo SWT/Swing GUI Builder ：<br /><a href="http://cloudgarden.com/jigloo/index.html">http://cloudgarden.com/jigloo/index.html</a><br />下载此版本：Jigloo plugin for Eclipse (using Java 1.4 or 1.5)<br />安装后即可由档案-&gt;新建-&gt;其它-&gt;GUI Form选取要建构的GUI类型。</p>
		<p>2.Eclipse Visual Editor Project：<br /><a href="http://www.eclipse.org/vep/">http://www.eclipse.org/vep/</a><br />点选下方Download Page，再点选Latest Release 0.5.0进入下载。<br />除了VE-runtime-0.5.0.zip要下载外，以下这2个也要：<br />EMF build 1.1.1: (build page) (download zip) <br />GEF Build 2.1.2: (build page) (download zip) </p>
		<p>3.0 M8版本，请下载：<br />EMF build I200403250631<br />GEF Build I20040330<br />VE-runtime-1.0M1</p>
		<p>安装成功后，便可由File-&gt;New-&gt;Visual Class开始UI设计。<br />安装成功后，即可由新建-&gt;Java-&gt;AWT与Swing里选择<br />所要建构的GUI类型开始进行设计。VE必须配合着对应<br />版本，才能正常使用，否则即使安装成功，使用上仍会<br />有问题。</p>
		<p>使用Eclipse来开发JSP程序：<br />外挂名称：lomboz(下载页面)<br /><a href="http://forge.objectweb.org/project/showfiles.php?group_id=97">http://forge.objectweb.org/project/showfiles.php?group_id=97</a><br />请选择适合自己版本的lomboz下载，lomboz.212.p1.zip表示2.1.2版，<br />lomboz.3m7.zip表示M7版本....以此类推。<br />lomboz安装以及设置教学：<br />Eclipse开发JSP-教学文件</p>
		<p>Java转exe篇：<br />实现方式：Eclipse搭配JSmooth(免费)。<br />1.先由Eclipse制作包含Manifest的JAR。<br />制作教学<br />2.使用JSmooth将做好的JAR包装成EXE。<br />JSmooth下载页面：<br /><a href="http://jsmooth.sourceforge.net/index.php">http://jsmooth.sourceforge.net/index.php</a><br />3.制作完成的exe文件，可在有装置JRE的Windows上执行。</p>
		<p>Eclipse-Java编辑器最佳设定：<br />编辑器字型设定：工作台-&gt;字型-&gt;Java编辑器文字字型。<br />(建议设定Courier New -regular 10)</p>
		<p>编辑器相关设定：窗口-&gt;喜好设定-&gt;Java-&gt;编辑器</p>
		<p>外观：显示行号、强调对称显示的方括号、强调显示现行行、<br />显示打印边距，将其勾选，Tab宽度设4，打印编距字段设80。<br />程序代码协助：采预设即可。<br />语法：可设定关键词、字符串等等的显示颜色。<br />附注：采预设即可。<br />输入：全部字段都勾选。<br />浮动说明：采预设即可。<br />导览：采预设即可。</p>
		<p>使自动排版排出来的效果，最符合Java设计惯例的设定：<br />自动排版设定：窗口-&gt;喜好设定-&gt;Java-&gt;程序代码制作格式。</p>
		<p>换行：全部不勾选。<br />分行：行长度上限设：80。<br />样式：只将强制转型后插入空白勾选。<br />内缩空格数目：设为4。</p>
		<p>Eclipse的教学文件：<br />sungo发表：<br />Eclipse 3.0系列热键表 - 中英对照解说版 (by sungo) ~New~<br />Window+GCC+CDT用Eclipse开发C、C++ (by sungo) ~New~</p>
		<p>其它：<br />扩充Eclipse的Java 开发工具(中文)<br />使用Eclipse开发J2EE 应用程序(中文)<br />使用Eclipse平台进行除错(中文)<br />用Eclipse进行XML 开发(中文)<br />开发Eclipse外挂程序(中文)<br />国际化您的Eclipse外挂程序(英文)<br />将Swing编辑器加入Eclipse(英文)<br />如何测试你的Eclipse plug-in符合国际市场需求(英文)</p>
		<p>Eclipse的相关网站：<br /><a href="http://eclipse-plugins.2y.net/eclipse/index.jsp">http://eclipse-plugins.2y.net/eclipse/index.jsp</a><br /><a href="http://www.eclipseplugincentral.com/">http://www.eclipseplugincentral.com/</a><br />Eclipse相关教学[简体]</p>
<img src ="http://www.blogjava.net/jaunt/aggbug/105366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2007-03-21 20:52 <a href="http://www.blogjava.net/jaunt/archive/2007/03/21/105366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么样解决myeclipse资源文件中的中文编码问题</title><link>http://www.blogjava.net/jaunt/archive/2006/12/15/87956.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 15 Dec 2006 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/12/15/87956.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/87956.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/12/15/87956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/87956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/87956.html</trackback:ping><description><![CDATA[
		<p>方法一: 编辑玩了后在dos在用jdk自带的native2ascii命令把资源文件转换一下就可以了<br /><br />命令为native2ascii 资源文件名 新的资源文件名 <br />执行完后便会在新的资源文件中看见中文全变成/u...什么了样子~~这样就可以了<br /><br />把旧的删掉 新的资源文件改回旧的资源文件名<br /><br />方法二:使用插件PropertiesEdit,下载地址: <br />http://propedit.sourceforge.jp/eclipse/updates/<br /><br />方法三: 修改properties的源代码.主要是修改saveConvert()方法和loadConvert()方法，大家可以自己建立一个类，然后把properties类的代码拷贝过来，然后修改这两个方法就可以了。<br />或者直接将我下面的代码拷贝过去就可以了。<br /><br />package xiaotang.util;<br />import java.util.*;<br />package xiaotang.util;<br /><br />import java.io.IOException;<br />import java.io.PrintStream;<br />import java.io.PrintWriter;<br />import java.io.InputStream;<br />import java.io.InputStreamReader;<br />import java.io.BufferedReader;<br />import java.io.OutputStream;<br />import java.io.OutputStreamWriter;<br />import java.io.BufferedWriter;<br />import java.util.Hashtable;<br />import java.util.*;<br />/**<br />* <br />* &lt;p&gt;Title: &lt;/p&gt; <br />* <br />* &lt;p&gt;Description: &lt;/p&gt; <br />* <br />* &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt; <br />* <br />* &lt;p&gt;Company: 哈尔滨商业大学&lt;/p&gt;<br />* <br />* @author Onlyfor_love<br />* @version 1.0<br />*/<br /><br />public class PropertiesExt extends Hashtable {<br /><br />private static final long serialVersionUID = 4112578634029874840L;<br />protected PropertiesExt defaults;<br />public PropertiesExt() {<br />this(null);<br />}<br />public PropertiesExt(PropertiesExt defaults) {<br />this.defaults = defaults;<br />}<br />public synchronized Object setProperty(String key, String value) {<br />return put(key, value);<br />}<br /><br />private static final String keyValueSeparators = "=: \t\r\n\f";<br /><br />private static final String strictKeyValueSeparators = "=:";<br /><br />private static final String specialSaveChars = "=: \t\r\n\f#!";<br /><br />private static final String whiteSpaceChars = " \t\r\n\f";<br /><br />public synchronized void load(InputStream inStream) throws IOException {<br />//把所有的8859-1全部换成GBK<br />BufferedReader in = new BufferedReader(new InputStreamReader(inStream, "GBK"));<br />while (true) {<br />// Get next line<br />String line = in.readLine();<br />if (line == null)<br />return;<br /><br />if (line.length() &gt; 0) {<br /><br />// Find start of key<br />int len = line.length();<br />int keyStart;<br />for (keyStart=0; keyStart&lt;len; keyStart++)<br />if (whiteSpaceChars.indexOf(line.charAt(keyStart)) == -1)<br />break;<br /><br />// Blank lines are ignored<br />if (keyStart == len)<br />continue;<br /><br />// Continue lines that end in slashes if they are not comments<br />char firstChar = line.charAt(keyStart);<br />if ((firstChar != '#') &amp;&amp; (firstChar != '!')) {<br />while (continueLine(line)) {<br />String nextLine = in.readLine();<br />if (nextLine == null)<br />nextLine = "";<br />String loppedLine = line.substring(0, len-1);<br />// Advance beyond whitespace on new line<br />int startIndex;<br />for (startIndex=0; startIndex&lt;nextLine.length(); startIndex++)<br />if (whiteSpaceChars.indexOf(nextLine.charAt(startIndex)) == -1)<br />break;<br />nextLine = nextLine.substring(startIndex,nextLine.length());<br />line = new String(loppedLine+nextLine);<br />len = line.length();<br />}<br /><br />// Find separation between key and value<br />int separatorIndex;<br />for (separatorIndex=keyStart; separatorIndex&lt;len; separatorIndex++) {<br />char currentChar = line.charAt(separatorIndex);<br />if (currentChar == '\\')<br />separatorIndex++;<br />else if (keyValueSeparators.indexOf(currentChar) != -1)<br />break;<br />}<br /><br />// Skip over whitespace after key if any<br />int valueIndex;<br />for (valueIndex=separatorIndex; valueIndex&lt;len; valueIndex++)<br />if (whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)<br />break;<br /><br />// Skip over one non whitespace key value separators if any<br />if (valueIndex &lt; len)<br />if (strictKeyValueSeparators.indexOf(line.charAt(valueIndex)) != -1)<br />valueIndex++;<br /><br />// Skip over white space after other separators if any<br />while (valueIndex &lt; len) {<br />if (whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)<br />break;<br />valueIndex++;<br />}<br />String key = line.substring(keyStart, separatorIndex);<br />String value = (separatorIndex &lt; len) ? line.substring(valueIndex, len) : "";<br /><br />// Convert then store key and value<br />key = loadConvert(key);<br />value = loadConvert(value);<br />put(key, value);<br />}<br />}<br />}<br />}<br /><br />/*<br />* Returns true if the given line is a line that must<br />* be appended to the next line<br />*/<br />private boolean continueLine(String line) {<br />int slashCount = 0;<br />int index = line.length() - 1;<br />while ((index &gt;= 0) &amp;&amp; (line.charAt(index--) == '\\'))<br />slashCount++;<br />return (slashCount % 2 == 1);<br />}<br /><br />/**<br />* <br />* &lt;p&gt;Title: &lt;/p&gt; <br />* <br />* &lt;p&gt;Description: &lt;/p&gt; <br />* <br />* &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt; <br />* <br />* &lt;p&gt;Company: 哈尔滨商业大学&lt;/p&gt;<br />* <br />* @author Onlyfor_love<br />* @version 1.0<br />*/<br />private String loadConvert(String theString) {<br />//该功能主要是将存储的key和value提取出来，因为存储的中文在原来的properties类中被转换成了别的编码<br />//存储的中文在*.properties文件中以乱码出现<br />char aChar;<br />int len = theString.length();<br />StringBuffer outBuffer = new StringBuffer(len);<br />//<br />// for (int x=0; x&lt;len; ) {<br />// aChar = theString.charAt(x++);<br />// if (aChar == '\\') {<br />// aChar = theString.charAt(x++);<br />// if (aChar == 'u') {<br />// // Read the xxxx<br />// int value=0;<br />// for (int i=0; i&lt;4; i++) {<br />// aChar = theString.charAt(x++);<br />// switch (aChar) {<br />// case '0': case '1': case '2': case '3': case '4':<br />// case '5': case '6': case '7': case '8': case '9':<br />// value = (value &lt;&lt; 4) + aChar - '0';<br />// break;<br />// case 'a': case 'b': case 'c':<br />// case 'd': case 'e': case 'f':<br />// value = (value &lt;&lt; 4) + 10 + aChar - 'a';<br />// break;<br />// case 'A': case 'B': case 'C':<br />// case 'D': case 'E': case 'F':<br />// value = (value &lt;&lt; 4) + 10 + aChar - 'A';<br />// break;<br />// default:<br />// throw new IllegalArgumentException(<br />// "Malformed \\uxxxx encoding.");<br />// }<br />// }<br />// outBuffer.append((char)value);<br />// } else {<br />// if (aChar == 't') aChar = '\t';<br />// else if (aChar == 'r') aChar = '\r';<br />// else if (aChar == 'n') aChar = '\n';<br />// else if (aChar == 'f') aChar = '\f';<br />// outBuffer.append(aChar);<br />// }<br />// } else<br />outBuffer.append(theString);<br />// }<br />return outBuffer.toString();<br />}<br /><br />/**<br />* <br />* &lt;p&gt;Title: &lt;/p&gt; <br />* <br />* &lt;p&gt;Description: &lt;/p&gt; <br />* <br />* &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt; <br />* <br />* &lt;p&gt;Company: 哈尔滨商业大学&lt;/p&gt;<br />* <br />* @author Onlyfor_love<br />* @version 1.0<br />*/<br /><br />private String saveConvert(String theString, boolean escapeSpace) {<br />//该功能主要是将存储key和value，因为中文的存储在原来的properties类中被转换成了别的编码<br />//存储的中文在*.properties文件中以乱码出现<br />int len = theString.length();<br />StringBuffer outBuffer = new StringBuffer(len*2);<br />outBuffer.append(theString);<br /><br />// for(int x=0; x&lt;len; x++) {<br />// char aChar = theString.charAt(x);<br />// switch(aChar) {<br />// case ' ':<br />// if (x == 0 || escapeSpace)<br />// outBuffer.append('\\');<br />//<br />// outBuffer.append(' ');<br />// break;<br />// case '\\':outBuffer.append('\\'); outBuffer.append('\\');<br />// break;<br />// case '\t':outBuffer.append('\\'); outBuffer.append('t');<br />// break;<br />// case '\n':outBuffer.append('\\'); outBuffer.append('n');<br />// break;<br />// case '\r':outBuffer.append('\\'); outBuffer.append('r');<br />// break;<br />// case '\f':outBuffer.append('\\'); outBuffer.append('f');<br />// break;<br />// default:<br />//<br />// if ((aChar &lt; 0x0020) || (aChar &gt; 0x007e)) {<br />// outBuffer.append('\\');<br />// outBuffer.append('u');<br />// outBuffer.append(toHex((aChar &gt;&gt; 12) &amp; 0xF));<br />// outBuffer.append(toHex((aChar &gt;&gt; 8) &amp; 0xF));<br />// outBuffer.append(toHex((aChar &gt;&gt; 4) &amp; 0xF));<br />// outBuffer.append(toHex( aChar &amp; 0xF));<br />// } else {<br />// if (specialSaveChars.indexOf(aChar) != -1)<br />// outBuffer.append('\\');<br />// outBuffer.append(aChar);<br />// }<br />// }<br />// }<br />return outBuffer.toString();<br />}<br /><br />/**<br />* Calls the &lt;code&gt;store(OutputStream out, String header)&lt;/code&gt; method<br />* and suppresses IOExceptions that were thrown.<br />*<br />* @deprecated This method does not throw an IOException if an I/O error<br />* occurs while saving the property list. As of the Java 2 platform v1.2, the preferred<br />* way to save a properties list is via the &lt;code&gt;store(OutputStream out,<br />* String header)&lt;/code&gt; method.<br />*<br />* @param out an output stream.<br />* @param header a description of the property list.<br />* @exception ClassCastException if this &lt;code&gt;Properties&lt;/code&gt; object<br />* contains any keys or values that are not &lt;code&gt;Strings&lt;/code&gt;.<br />*/<br />public synchronized void save(OutputStream out, String header) {<br />try {<br />store(out, header);<br />} catch (IOException e) {<br />}<br />}<br /><br />public synchronized void store(OutputStream out, String header)<br />throws IOException<br />{<br />BufferedWriter awriter;<br />awriter = new BufferedWriter(new OutputStreamWriter(out, "GBK"));<br />if (header != null)<br />writeln(awriter, "#" + header);<br />writeln(awriter, "#" + new Date().toString());<br />for (Enumeration e = keys(); e.hasMoreElements();) {<br />String key = (String)e.nextElement();<br />String val = (String)get(key);<br />key = saveConvert(key, false);<br /><br />/* No need to escape embedded and trailing spaces for value, hence<br />* pass false to flag.<br />*/<br />val = saveConvert(val, false);<br />writeln(awriter, key + "=" + val);<br />}<br />awriter.flush();<br />}<br /><br />private static void writeln(BufferedWriter bw, String s) throws IOException {<br />bw.write(s);<br />bw.newLine();<br />}<br /><br />public String getProperty(String key) {<br />Object oval = super.get(key);<br />String sval = (oval instanceof String) ? (String)oval : null;<br />return ((sval == null) &amp;&amp; (defaults != null)) ? defaults.getProperty(key) : sval;<br />}<br /><br />public String getProperty(String key, String defaultValue) {<br />String val = getProperty(key);<br />return (val == null) ? defaultValue : val;<br />}<br /><br />public Enumeration propertyNames() {<br />Hashtable h = new Hashtable();<br />enumerate(h);<br />return h.keys();<br />}<br /><br />public void list(PrintStream out) {<br />out.println("-- listing properties --");<br />Hashtable h = new Hashtable();<br />enumerate(h);<br />for (Enumeration e = h.keys() ; e.hasMoreElements() ;) {<br />String key = (String)e.nextElement();<br />String val = (String)h.get(key);<br />if (val.length() &gt; 40) {<br />val = val.substring(0, 37) + "...";<br />}<br />out.println(key + "=" + val);<br />}<br />}<br /><br />public void list(PrintWriter out) {<br />out.println("-- listing properties --");<br />Hashtable h = new Hashtable();<br />enumerate(h);<br />for (Enumeration e = h.keys() ; e.hasMoreElements() ;) {<br />String key = (String)e.nextElement();<br />String val = (String)h.get(key);<br />if (val.length() &gt; 40) {<br />val = val.substring(0, 37) + "...";<br />}<br />out.println(key + "=" + val);<br />}<br />}<br /><br />private synchronized void enumerate(Hashtable h) {<br />if (defaults != null) {<br />defaults.enumerate(h);<br />}<br />for (Enumeration e = keys() ; e.hasMoreElements() ;) {<br />String key = (String)e.nextElement();<br />h.put(key, get(key));<br />}<br />}<br /><br />private static char toHex(int nibble) {<br />return hexDigit[(nibble &amp; 0xF)];<br />}<br /><br />/** A table of hex digits */<br />private static final char[] hexDigit = {<br />'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'<br />};<br />}<br /><br /><br />/////////////////////////////////////////////////////////////////<br />然后写一个常用的配置文件操作类：<br />package xiaotang.util;<br />import java.io.*;<br /><br />public class writeToProperty {<br />private String fileName;<br />private PropertiesExt prop = new PropertiesExt();<br />private InputStream fileStream = null;<br />private OutputStream outStream = null;<br />/**<br />*构造函数<br />* @param fileName 文件名字，包含路径<br />*/<br />public writeToProperty(String fileName) {<br />this.fileName = fileName;<br />}<br /><br />//读取文件，不存在则创建文件<br />private void readFile() {<br />try {<br />File f = new File(fileName);<br />fileStream = new FileInputStream(f);<br />prop.load(fileStream);<br />}<br />catch (Exception e) {<br />e.printStackTrace();<br />}<br />finally {<br />try {<br />if (fileStream != null)<br />fileStream.close();<br />}<br />catch (IOException ex) {<br />ex.printStackTrace();<br />}<br />}<br /><br />}<br /><br />private void writeFile() {<br />try {<br />File f = new File(fileName);<br />outStream = new FileOutputStream(f);<br />}<br />catch (Exception e) {<br />e.printStackTrace();<br />}<br />}<br /><br />/**<br />* 返回指定key的vlaue<br />* @param key<br />* @return<br />*/<br />public String getValue(String key) {<br />readFile();<br />if (key != null &amp;&amp; !key.equals(""))<br />return prop.getProperty(key);<br />else<br />return "";<br />}<br /><br />/**<br />*返回指定key的vlaue,如果key不存在则返回defaultValue值<br />* @param key<br />* @param defaultValue<br />* @return<br />*/<br />public String getValue(String key, String defaultValue) {<br />if (key != null &amp;&amp; !key.equals(""))<br />return prop.getProperty(key, defaultValue);<br />else<br />return "";<br />}<br /><br />/**<br />* 设置对应key的数值，如果key存在的覆盖value的数值，如果key不存则创建<br />* @param key<br />* @param value<br />*/<br />public void setValue(String key, String value) {<br />readFile();<br />writeFile();<br />prop.setProperty(key, value);<br />try {<br />prop.store(outStream, "GBK");<br />}<br />catch (IOException ex) {<br />ex.printStackTrace();<br />}<br />finally {<br />try {<br />outStream.close();<br />}<br />catch (IOException ex1) {<br />ex1.printStackTrace();<br />}<br />}<br />}<br />}<br />////////////////////////////////////////////////////////////<br />接着写一个测试类就可以了：<br />package xiaotang.util;<br /><br />import xiaotang.util.PropertiesExt;<br />import java.io.*;<br />/**<br />* <br />* &lt;p&gt;Title: &lt;/p&gt; <br />* <br />* &lt;p&gt;Description: &lt;/p&gt; <br />* <br />* &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt; <br />* <br />* &lt;p&gt;Company: 哈尔滨商业大学&lt;/p&gt;<br />* <br />* @author Onlyfor_love<br />* @version 1.0<br />*/<br />public class PropertyFile {<br />public static void main(String[] args) {<br />writeToProperty wt = new writeToProperty("d:\\config1.properties");<br />wt.setValue("一","我是谁？");<br />wt.setValue("二","我是陈晓棠");<br />String one = wt.getValue("一");<br />String two = wt.getValue("二");<br />System.out.println(one);<br />System.out.println(two);<br />}<br /><br />}<br />回头你再看看你的配置文件，中文依然是中文。</p>
		<p>原载:<a href="/rickhunter/articles/16180.html">http://www.blogjava.net/rickhunter/articles/16180.html</a></p>
<img src ="http://www.blogjava.net/jaunt/aggbug/87956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-12-15 15:35 <a href="http://www.blogjava.net/jaunt/archive/2006/12/15/87956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个理解“单例模式”最好的例子</title><link>http://www.blogjava.net/jaunt/archive/2006/11/26/83596.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Sun, 26 Nov 2006 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/26/83596.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83596.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/26/83596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83596.html</trackback:ping><description><![CDATA[
		<font color="#a52a2a">
				<p class="storytitle" id="post-49">
						<font size="2">原文出处: </font>
						<a href="http://www.javatang.com/archives/2006/06/27/512049.html">
								<font size="2">http://www.javatang.com/archives/2006/06/27/512049.html </font>
						</a>
						<br />
						<font size="2">编辑: Jaunt<br />声明: 请维持文章的完整性任意转载</font>
				</p>
				<p>
						<strong>SingletonTest.java：</strong>
				</p>
		</font>
		<br />public class SingletonTest {<br />    public static void main(String[] args) {<br />        Singleton s1 = Singleton.getInstance();<br />        Singleton s2 = Singleton.getInstance();<br />        System.out.println("s1=s2?" + (s1==s2));<br />        System.out.println("s1.getNextID = " + s1.getNextID());<br />        System.out.println("s2.getNextID = " + s2.getNextID());<br />        System.out.println("s1.getNextID = " + s1.getNextID());<br />        System.out.println("s1.getNextID = " + s1.getNextID());<br />        System.out.println("s2.getNextID = " + s2.getNextID());<br />        System.out.println("s2.getNextID = " + s2.getNextID());<br />    }<br />} 
<p>class Singleton {<br />    private static int nextID = 0;<br />    private static Singleton instance = null;</p><p>    private Singleton() {};</p><p>    public static synchronized Singleton getInstance() {<br />        if (instance == null) {<br />            instance = new Singleton();<br />        }<br />        return instance;<br />    }<br />    // inside data<br />    public synchronized int getNextID() {<br />        return ++nextID;<br />    }<br />}<br /><br /><font color="#a52a2a"><strong>输出结果：</strong></font><br /><br />s1=s2?true<br />s1.getNextID = 1<br />s2.getNextID = 2<br />s1.getNextID = 3<br />s1.getNextID = 4<br />s2.getNextID = 5<br />s2.getNextID = 6<br /><br /></p><img src ="http://www.blogjava.net/jaunt/aggbug/83596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-26 13:57 <a href="http://www.blogjava.net/jaunt/archive/2006/11/26/83596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员自创的一首歌 - “Java EE 5″</title><link>http://www.blogjava.net/jaunt/archive/2006/11/26/83552.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Sat, 25 Nov 2006 18:47:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/26/83552.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83552.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/26/83552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83552.html</trackback:ping><description><![CDATA[
		<div class="storycontent">
				<p>Sun公司一名员工自己创作的歌，关于Java EE 5，很有意思的一首歌，程序员业余生活也可以这么丰富！</p>
				<blockquote>
						<p>Ladies and gentlemen, this is Java EE 5! </p>
						<p>One, two, three, four, five<br />There’s a technology I use day and night<br />For my application with a web frontend<br />They told me to use .Net<br />But I really don´t wanna </p>
						<p>So many bugs I fixed last week.<br />My code is neat and talk is a cheap<br />I like Glassfish, JSF, persistence API<br />And as I continue you know they´re gettin´ sweeter </p>
						<p>So what can I do I really beg you my Lord<br />To me codin’ it´s just like a sport<br />All the bad code from the past, let me dump it<br />Please set in the trumpet </p>
						<p>A little bit of injection in my life<br />A little bit of persistence by my side<br />A little bit of NetBeans is all I need<br />A little bit of EJB’s what I see<br />A little bit of standards in the sun<br />A little bit of XML all night long<br />A little bit web services here I am<br />A little bit of code makes me real man </p>
						<p>This is Java EE 5! </p>
						<p>Jump up and down and move your code around<br />Shake your head to the sound bury bad code under ground<br />Move one step left and one step right<br />One to the front and one to the side<br />Refactor it once and refactor it twice<br />If it looks like this you’re doin´ it right </p>
						<p>A little bit of injection in my life<br />A little bit of persistence by my side<br />A little bit of NetBeans is all I need<br />A little bit of EJB’s is what I see<br />A little bit of standards in the sun<br />A little bit of XML all night long<br />A little bit web services here I am<br />A little bit of code makes me real man </p>
						<p>This is Java EE 5! </p>
						<p>
								<br />MP3地址下载：<a href="http://tap.javalobby.org/javaee5.mp3">远程</a>  <a href="http://www.javatang.com/_download/javaee5.mp3">本地</a></p>
				</blockquote>
		</div>
<img src ="http://www.blogjava.net/jaunt/aggbug/83552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-26 02:47 <a href="http://www.blogjava.net/jaunt/archive/2006/11/26/83552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之十：Java 5.0（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83290.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83290.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83290.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83290.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">Java越来越有影响力了……"Tiger"代表什么，似老虎一样的威力吗？一句话：Java ， I  love you ！</font>
		<br />
		<br />2004：Java 5.0<br />                                                                                                  莫映 / 文<br /><br />2004年9月30日，代号为“Tiger”，研发历时近三年的J2SE 5.0发布正式版本，这是Java平台历来发布版本中改动面波及最大的一次。<br /><br />纵观Tiger，“Ease of development”是其核心主题，这一点着重体现于语言特性上的改进，这在很大程度上，简化了开发人员日常的编程任务，以往一些琐碎的手工劳动都代之以轻松自然，而又安全可靠的自动化实现。其中的注解功能，以及随之而来的声明式编程，还对构筑于J2SE 5.0之上的J2EE 5.0产生了巨大影响。尽管Tiger在语言特性上做了很大的动作，但作为Java技术的基础支撑，这些改动都是深思熟虑的结果。<br /><br />Tiger发布至今也有大半年了，那么Sun又是如何规划J2SE的未来蓝图的呢？据悉，J2SE的下两个版本分别是代号为“Mustang”的J2SE 6.0和代号为“Dolphin”的J2SE 7.0，预计Mustang将于明年发布。在吸取了Tiger研发周期过长的教训之后，Sun副总裁Graham Hamilton表示，Mustang的发布周期将不会那么长。并且，Sun还将“Becoming more open”作为Mustang的主题之一。未来JCP对Java技术的影响将会愈加深入，而整个研发过程也将会愈加透明。Mustang在正式发布前的内部版本也会陆续见诸于众，如此，广大Java开发者便可以更加及时的了解到Java发展的最新情况。<br /><br />在语言层面上的扩展依然会比较谨慎，比如像AOP这样的当下热门技术，依然不太可能会见诸其中。据Hamilton所言，一个有可能被引入的语法特性被称作“friends”import机制，它将使由多个包组成的大型项目变得易于管理。<img src ="http://www.blogjava.net/jaunt/aggbug/83290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 16:02 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之九：JBoss和Eclipse （转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83286.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83286.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83286.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83286.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">Eclipse确实是一个很好的开源工具，尤其MyEclipse插件，如果一些程序员把Eclipse里面智能提示为来提高效率，省得去写的话，我很不提倡这种做法！因为它会让一个程序员变“懒惰”起来了，个人比较喜欢Emacs文本编辑器，也是一个很固老的发开工具，一担你用习惯发挥的功能很强大……</font>
		<font color="#000000">
				<font color="#0000ff">  Jaunt</font>
				<br />2000-2004：JBoss和Eclipse——Java开源软件的王者<br />                                                                                                        莫映 / 文<br /><br />Java 和开源几乎就是天生的一对，这可以从无比兴盛繁荣的Java开源软件社区得到佐证。目前最有影响力的Java开源软件项目，要数JBoss和 Eclipse。可以说，几乎所有的Java开发人员都获多或少的听到过或接触和使用过它们。前者是目前最优秀、应用最为广泛的企业级开源J2EE应用服务器，后者是功能完全可以替代商业产品的Java IDE。二者的覆盖功能之全、支持工具之广、子项目之多，几乎可以仅凭借它俩来完成企业应用的开发构建到部署实施的全过程，而软件开发者和客户也都可以最大程度上享受高质量，高可靠Java开源软件所带来的低成本优势。<br /><br />JBoss和Eclipse的巨大成功，几乎令各自领域的商用竞争者抓狂，其中 BEA的WebLogic和IBM的WebSphere在商业利润上受到JBoss的巨大侵蚀，而Borland的JBuilder、JetBrains 的IDEA等诸多优秀的商用开发工具也不得不面对Eclipse独大的现实。JBoss的CEO兼创始人Marc Fleury曾直言不讳地表示，希望占据市场主导地位。“我们希望打败IBM，成为中间件领域里最大的厂商。”JBoss在4.0以前还只是以一个 Group存在，盈利手段主要靠服务和销售文档。但在最近，JBoss已经发展成为一个有限公司，并吸纳多家风险投资，专注于获取利润为目标之一的第二代开源软件模式（JBoss自己称为“Professional Open Source”）的创新和运营。这区别于以理论研究为爱好的学院型开源或大公司为基础的非盈利组织开源，如Linux和Apache。当然JBoss的这种运营方式势必会导致更多的代码控制和专有修改权，但按JBoss的说法是这样更能获得企业客户的信赖。JBoss的这种模式是否能获得成功还要我们拭目以待。<br /><br />不管JBoss和Eclipse的未来发展如何，JBoss和Eclipse的成功已经让我们看到了Java开源软件的威力，祝愿它们一路走好。 <br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350883.aspx"><font face="Verdana" size="2">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350883.aspx</font></a><br /></font>
<img src ="http://www.blogjava.net/jaunt/aggbug/83286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 15:51 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之八：官司最终以喜剧收场（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83272.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83272.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83272.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83272.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#0000ff">好友易求，知已难寻！"人与人"和"公司与公司"本存在性质上的不同，公司是建立在商业性，利益性基础上的。其实人与代码也能成为知己：<br />      <font style="BACKGROUND-COLOR: #ffffff">代码带有人性，你越是轻视她，越是看不起她，越是对她不尊重，你能从她身上得到的回报率越小，甚至她还可能让你损失惨重。 <br />      代码具有人性，那是因为她是人写的，里面夹者开发者对她的情绪。开发者对她感情越深，她所表现得越出色，她就越健康，对你的回报越大</font>。             Jaunt</font>
				<br />
				<br />2002-2004：Sun与微软的法律碰撞最终以喜剧收场<br />                                                                                                                         恶魔 / 文<br /><br />2003年4月2 日，Sun与微软达成16亿美元的法律和解。如果不是晚了一天，许多人会以为这是一个在4月1日愚人节开的玩笑。尽管当时所有人都像是看到“太阳从西边出来了”那样张大了嘴巴，但这的确是事实。<br /><br />根据两家公司达成的版权协议，双方会为采用对方的技术而支付专利费用，微软向Sun提前支付3.5亿美元使用费，Sun则承诺，如果Sun集成微软的某些技术，也会向微软付款。毫无疑问，“私下了结”的方式对双方而言都是最好的结果。就在协议签署的当天，在美国旧金山由Sun和微软为“抛弃十年恩怨、携手合作“举行的新闻发布会上，尽管比尔•盖茨没有到场，但这并没有防碍现场看起来异常轻松的气氛。麦克尼利和鲍尔默各自穿了一件密歇根州底特律“Red Wings”曲棍球队的运动服，并谈及了一起在哈佛大学读书的经历，麦克尼利还说：“当时我们两人是非常要好的朋友，当然我们也有吵架的时候。”<br /><br /><font color="#008000">人与人当然可能成为终生的知己，但是公司与公司之间有的只能是利益上的分分合合</font>。<br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350868.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350868.aspx</a></p>
<img src ="http://www.blogjava.net/jaunt/aggbug/83272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 15:20 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之七：WebLogic打开J2EE的魔匣（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83261.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83261.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83261.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83261.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">虽然我不怎么用WebLogic Server，只用Tomcat多点，但也感觉到WebLogic Server不错……</font>
		<br />
		<br />1998：WebLogic打开J2EE的魔匣<br />                                                                                                    霍泰稳 / 文<br /><br />Java 语言的出现使得互联网络有了良好的交互性能，但这些很“酷”的技术仅被人们认为是一些小花招，它还无法消除企业级用户对它的怀疑。1998年，BEA公司宣布收购WebLogic公司，并接着推出由Sun公司第一个授权使用J2EE许可证的WebLogic Server应用服务器，这个Java版的AppServer一推出就引起业界极大的兴趣。WebLoigc Server以其对标准的支持、强悍的运算能力和安全的架构设计等特性也很快征服了那些怀疑J2EE应用的人们。推出市场后不到一年，WebLogic Server就成为业内第一Java应用服务器。<br /><br />这里我们援引一些当时著名咨询公司的调查数据来说明问题，“在IDC的报告中，BEA在应用服务器和交易服务器领域市场份额第一；在Gartner的报告中，BEA WebLogic Server拥有业内最广泛的EJB应用安装基础；在Giga Group的报告中，BEA WebLogic Server市场份额占32%”。因为应用服务器市场极大的发展潜力，在WebLogic Server之后，其它的很多公司也推出了自己的AppServer，如IBM的WebSphere、Sun公司的iPlanet等，逐渐地应用服务器取代了传统意义上的各类中间件，成为企业应用的基础平台。应用服务器的出现使得Java有了真正意义上的发展。<br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350861.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350861.aspx</a><img src ="http://www.blogjava.net/jaunt/aggbug/83261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 15:05 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之六：Java开源社群开始蓬勃发展（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83245.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83245.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83245.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83245.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83245.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">软件开发是一种似艺术创作，不只是似了，已经是一种艺术了，记得Pete McBreen所著的Software Craftsmanship（中文版名为《软件工艺》，人民邮电出版社出版）出版后，“软件工艺”为软件行业的从业者带来了“软件工程”之外的另一个重要的隐喻。在此之前，“软件工程” 这个隐喻在软件行业中一直占据着绝对的话语权。软件工艺并非是为了彻底颠覆软件工程，而是为了促使大家将目光更多地投向精研软件建造过程中的工艺问题。这本书将软件开发者分成了三个层次：学徒开发者（Apprentice Developer）、技师开发者（Journeymen Developer）和软件工匠（Craftsman）。有人说出了中国软件IT问题，<font style="BACKGROUND-COLOR: #66ccff">国内的软件行业正是缺乏一大批对于自己的工作精益求精的软件工匠，这才是国内软件行业的主要问题所在</font>。本人极力支持这样的说法，同时默默在向"软件工匠"的目标而奋斗著…… Jaunt <br /></font>
		<br />1998：JCP成立并正式运作，Java开源社群开始蓬勃发展<br />                                                                                                        黄海波 / 文<br /><br />1998 年，JCP组织成立，并且开始把握Java的发展方向。JCP组织的开放性，不但使得所有对Java感兴趣的商业公司可以参与Java的发展，更重要的是 JCP允许个人、非盈利组织、学校等加入，这就给Java带来了巨大的活力。随之兴起的Java开源运动的最大贡献是实现和鼓励了知识共享，在众多热情的开源程序员们的努力和分享下，很多原先只被商业公司掌握的技术、思想和产品可以被所有需要的开发人员免费或者以较低的价格获得使用权，并通过开放源代码更容易的获得反馈和改进意见从而进一步演化发展。<br /><br />我们知道，<font color="#008000"><strong>所谓知识不是孤立发展认知，而是人们的经验，认识是思考交流和积累的产物</strong></font>。而开源运动所带来的开放、反馈、交流的风气正是符合人类社会知识形成和发展的规律。<br /><br />开源运动起源于西方的发达国家，有其现实背景和文化根源。1990年代可以说是IT 产业的一个黄金时代。信息时代的兴起对IT人员，特别是软件人员有着巨大的需求。而<font color="#008000"><strong>软件开发又是一种类似艺术创作的脑力活动，和所有的艺术家、作家们一样，在作品打上自己的印记并流传在世界上是每一个创作人员的梦想。</strong></font>互联网时代下的高收入的舒适生活，早九晚五的编写公司的代码并不能满足很多有激情的软件开发人员的梦想，再加上西方传统的基督教文化中十分推崇的分享和交流，开源的出现和兴起也就水到渠成了。<br /><br />今天，开源运动已经不仅仅是一些个人天才程序员们的游乐园地，而是发展成为一项开源软件产业。<br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350858.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350858.aspx</a><img src ="http://www.blogjava.net/jaunt/aggbug/83245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 14:24 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之五：Java 2平台发布（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83236.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83236.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83236.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83236.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">任何一门程序语言都要经历过岁月的考验，市场的竞争才走向更成熟，体现出价值的存在，生命期的长短！好坚信比尔•盖茨给予了这样的评价：“<strong><font style="BACKGROUND-COLOR: #ffffff">Java是很长时间以来最优秀的程序设计语言。</font></strong>”<br />                                                            Jaunt<br /></font>
		<br />1998：Java 2平台发布<br />                                                                                                                 陶文 / 文<br /><br />1998 年，Java 2平台正式发布。经过了三年时间的发展、热热闹闹的攻关宣传、红红火火的众厂商的热情参与，Sun终于知道Java适合干什么了。对比Java刚发明时的技术定位，与Java的戏剧性触“网”的那段历史，Java 2平台的发布可真算得上是有的放矢了。<br /><br />根据官方的文档，Java 2是Sun意识到“one size doesn’t fit all”之后，把最初的Java技术打包成三个版本的产物，也就是著名的J2ME、J2SE、J2EE。之所以说Java自从Java 2平台发布之后，进入了现代。那是因为之前的历史怎么看来都和现在程序员日常开发使用的技术无什么关系，比如Applet，已经很少有人使用了。Java 2之后的历史就不一样了，至少人们在推崇轻量级开发，猛批EJB时还不时会引用J2EE这个词是如何诞生的。而Java 2的三大版本中，除了J2EE得到了长足发展和广泛使用之外，J2ME也在手机市场上取得了遍地开花的结果。相较之下，J2SE难免落寞，只剩SWT这个血统不纯的家伙在Rich Client回归的时代吸引着人们的眼球了。<br /><br />无论今天看来当时的Java 2有多么的不成熟，至少经过市场和时间的检验，Java 2规划出来的三大方向把Java技术指向了光明的方向是勿庸置疑的。<br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350825.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350825.aspx</a><img src ="http://www.blogjava.net/jaunt/aggbug/83236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 13:29 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之四：微软与Sun的Java官司（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83226.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 05:13:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83226.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83226.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83226.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">本人并不怎么看好微软，或许它也有些优势，但觉得它商业化了，技术水平高不到哪里去，但并不是否认没有技术，任何企业如果把技术当成商业利润为最终目的都不会好到哪里去，或达到什么高峰！Google发展的很好，睇好它，本人也极情于google，更钟情于Java。如果拿百度与它比，google绝对是优势的。或许你讲我说话或思想过于偏激，我会跟你讲：难得偏激下……                                                           Jaunt<br /></font>
		<br />1997-2001：微软与Sun的Java官司<br />                                                                                                               孟岩 / 文<br /><br />Java 诞生的1995年，正是微软在软件产业地位达到巅峰的时代，Windows 95发布时的风光场面给人们留下的深刻印象至今难忘。尽管如此，作为最卓越的技术领袖，比尔•盖茨仍然敏锐地注意到Java。当他了解了Java的一些细节之后，给予了这样的评价：“<strong><font style="BACKGROUND-COLOR: #3399cc">Java是很长时间以来最优秀的程序设计语言</font></strong>。”基于此，微软于1996年3月申请并获得了Java许可证。微软对于 Java的这一热情态度在当时大大提高了人们对Java的兴趣和信心，但也有不少人担心微软会依靠自己强大的影响力在标准之外另立标准，从而破坏Java 的纯洁性。<br /><br />果然，从1997年发布Visual J++的第一个版本开始，微软就开始在Java中掺入自己的私有扩展。这毫无疑问引起Sun的高度重视。1997年10月，Sun向美国加州地方法院起诉微软公司违反两公司就微软使用Java技术所签定的合同，指控微软公司在自己的Java产品中做了“不恰当的修改”，违反了合同中承诺向用户提供Java 兼容产品的条款。这一官司旷日持久，直到2001年1月双方达成和解，微软将继续提供采用Sun开发的Java技术的现有产品（包括测试版）。不过， Sun有限制地仅对包括Java 1.1.4的微软产品提供许可。到了2001年7月，微软公布新版的Windows XP将不再支持Sun的JVM，并且推出了.NET平台与Java分庭抗礼。<br />现在回过头去看，当时的这一场官司对Java世界产生了深远的影响。如果没有这一场官司，也许很多Java程序员都在使用Visual J++，基于WFC开发Windows客户端程序，同时不得不面对被两个不同的事实标准所分裂的Java世界。 <br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350819.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350819.aspx</a><img src ="http://www.blogjava.net/jaunt/aggbug/83226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 13:13 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之三：盟主地位就此定（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83222.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83222.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83222.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83222.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83222.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">本人看好Java，相信它的发展前景无限好的!期待著，奋斗著……   Jaunt</font>
		<br />
		<br />1996：Java大跃进，盟主地位就此定<br />                                                                                                            马伟 / 文<br />Sun在1996年一开始首先成立了JavaSoft组织，并在1月23日正式发布自己的Java 1.0，作为20世纪业界出现的最重要的技术之一，Java引起了编程世界的革命。直到现在，Java仍然是互联网上最流行的语言。<br /><br />在Sun 正式发布Java 1.0之后，Java这门新生的语言就拥有了自己的会议——JavaOne，这次会议初试啼音就吸引了600多名参与者。除了拥有这么多的积极参与者来进行Java的开发之外，各大知名公司也纷纷向Sun申请Java的许可。一时间，NetScape、惠普、IBM、Oralce、Sybase甚至当时刚推出Windows 95的微软都是Java的追随者。<br /><br />Java的应用就像是世界上的顶级玩家们组成的一个公开联盟，告诉全世界我们大家就是都在用着Java。也正是因为如此，Java也找到了自己的归宿。现在的J2EE已经成为中大型企业级应用的标准，成为承接数据库和Web之间的一个重要桥梁。<br /><br />当年Java的机会实在太多了，以至于很难知道到底该做什么。最终Java在应用服务器市场获得了难以取代的地位，也确定了J2EE的发展方向，并且仍将延续下去。 <br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350806.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350806.aspx</a><img src ="http://www.blogjava.net/jaunt/aggbug/83222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 12:48 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Java十大事件之二：Java香浓世界（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83210.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83210.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83210.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83210.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">本人觉得：Java就像一杯咖啡，有一种好香，好特别的味道吸引著开发者，特别喜欢它有"只写一次，随处运行"特性，尽管有人说它可能是由Sun公司掌控，要跟著它发展方向走，没有像C++没有受到任何公司或谁的掌控与限制，可以发挥自己最大优势，其实并不然，学一门语言，不对，不是学语言，而是学一种思想(thinking)，难道它(Sun)能掌控我们的思想吗？毫无疑问，思想是我们自己的，问题是看你什么样的心态，什么样的思想去thinking，这样发挥出来的一股能量才是大的……     Jaunt</font>
		<br />
		<br />1995：Java香浓世界<br />                                                                                                            马伟 / 文<br />1995 年，Sun正式对外公布了Java，并且发布了JDK 1.0。这种外形酷似C++，却包含一颗Smalltalk般纯洁的面向对象之心的全新程序设计语言及其平台，几乎在一夜之间就成为软件产业的新宠儿。 <br /><br />Java当时仅仅被用来为网站制作一些动态应用，诸如动画图片之类，但这仍然引起了很多Web开发者们的注意，他们非常渴望有一种安全的语言，可以在静态的HTML网页上制作动画图片。Sun最终把Java集成到NetScape浏览器。同时因为它具有“只写一次，随处运行”的特性，而引起了很多开发者的注意，他们可以再也不用为了使程序能够在不同型号的硬件上运行而耗费大量的时间来编译代码了。<br /><br />当时的Web浏览器的出现也为Java的出现起到了很好的推动作用，通过Java和Web浏览器的结合，人们似乎看到了什么，有人甚至预言PC将在一两年内退出历史的舞台，取而代之的是基于Java的浏览器应用程序，通过网络计算设备来进行应用。Java的出现为当时的软件产业带来了无限的遐想。 <br /><br />Trackback:<a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350792.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350792.aspx</a><img src ="http://www.blogjava.net/jaunt/aggbug/83210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 12:12 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java十大事件之一：Java源起（转载）</title><link>http://www.blogjava.net/jaunt/archive/2006/11/24/83207.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Fri, 24 Nov 2006 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/24/83207.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83207.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/24/83207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83207.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">其实要学一门语言，一种编程思想，对于了解过去的起源，发展是很有必要的，这关乎到一门语言的前景，同时把握好、清楚自己的方向更为之重要，就像历史一样，你没有去了解它的起源，发展就难以更好地学好现在，甚至未来……</font>                        <font color="#0000ff">Jaunt</font><br /><br />1990-1994：Java源起<br />                                                                                                               孟岩 / 文<br /><br />LarryWall说，优秀程序员应有的三个特点：懒惰、急躁和傲慢。Java就是诞生在一群懒惰、急躁而傲慢的程序天才之中。<br /><br />1990 年12月，Sun的工程师Patrick Naughton被当时糟糕的Sun C++工具折磨的快疯了。他大声抱怨，并威胁要离开Sun转投当时在Steve Jobs领导之下的NeXT公司。领导层为了留住他，给他一个机会，启动了一个叫做Stealth（秘密行动）的项目。随着James Gosling等人的加入，这个项目更名为Green。其目标是使用C++为嵌入式设备开发一种新的基础平台技术，James Gosling本人负责开发一个SGML编辑器。<br /><br />正如人们事后分析的那样，这位天才的程序员：<br /><font color="#008000">太懒惰——所以没有把C++学好，开发中碰了一头包；<br />太急躁——所以不愿意停下来读读Scott Meyers的新书《Effective C++》；<br />太傲慢——所以轻易地决定开发一中新的编程语言。</font><br /><br />他把这种语言命名为C++++--，意思是C++“加上一些好东西，减去一些坏东西”。显然这个糟糕的名字不可能长命百岁，很快这种颇受同伴喜爱的小语言被命名为Oak。<br /><br />到了1992年9月，Oak语言连同Green OS和一些应用程序一起发布在称做Start 7的小设备上，从而使之有了第一次精彩的亮相。随后，Sun开了一家名为FirstPerson的公司，整个团队被转移到这家公司里研发机顶盒，以投标时代华纳公司的一个项目。这帮天才被技术狂热所鼓舞，开发出了一个高交互性的设备，结果没想到时代华纳公司和有线电视服务商并不愿意用户拥有那么大的控制权，从而在竞标之战中败给了SGI。Oak的锋芒之锐，竟然把客户都给吓懵了。Sun沮丧地关闭了FirstPerson，召回了整个团队。事实证明，传统行业中那些脑满肥肠的保守主义者是腐朽没落的。回去！回到激情澎湃的IT产业，抓住互联网的大潮，这才是出路！<br /><br />1994年，Oak被命名为Java，针对互联网的新一轮开发如火如荼，一切已经就绪，熔岩在地下奔流，火山即将喷发。<br /><br />Trackback: <a href="http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350759.aspx">http://blog.csdn.net/programmer_editor/archive/2006/10/25/1350759.aspx</a><img src ="http://www.blogjava.net/jaunt/aggbug/83207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-24 11:46 <a href="http://www.blogjava.net/jaunt/archive/2006/11/24/83207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何将字符串或者数字转换成大写货币</title><link>http://www.blogjava.net/jaunt/archive/2006/11/23/83087.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Thu, 23 Nov 2006 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/jaunt/archive/2006/11/23/83087.html</guid><wfw:comment>http://www.blogjava.net/jaunt/comments/83087.html</wfw:comment><comments>http://www.blogjava.net/jaunt/archive/2006/11/23/83087.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jaunt/comments/commentRss/83087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jaunt/services/trackbacks/83087.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">
						<font face="Verdana">
								<font color="#0000ff">
										<font color="#008000">
												<font color="#0000ff">今天去面试却遇到了这样一道题“如何将字符串或者数字转换成大写货币”，当时没有做出来，很气愤，于是就在网上查涉及如何将字符串或者数字转换成大写货币的方法，终于找出了如何做的方法^_^</font>
												<br />
												<br />
										</font>主要功能：<br /><br /></font>1.   String convertToCapitalMoney(String moneyStr) <br />      将字符串转换成中文的大写货币值<br /><br />2.   String convertToCapitalMoney(double moneyValue)<br />      将数字转换成中文的大写货币值<br /><br /><font color="#0000ff">文件：MoneyConvert.java</font><br /></font>
				</font>
				<br />public class MoneyConvert {<br />     <font color="#008000">/*<br />      *  &lt;p&gt;Description: 字符串处理的公共类&lt;/p&gt;<br />      *  &lt;p&gt;Copyright 2006 &lt;/p&gt;<br />      *  @author  jaunt<br />      *  @Create Date : 2006-11-23<br />      */<br />    <br />     /*<br />      *  将字符串转换成中文的大写货币值<br />      *  @param   moneyStr<br />      *  @return<br />      */ <br /></font>    public static String convertToCapitalMoney(String moneyStr) {<br />     double money = 0;<br />     try {<br />      money = Double.parseDouble(moneyStr);<br />     }<br />     catch (Exception e) {<br />      <br />     }<br />     return convertToCapitalMoney(money);<br />    }<br />    <font color="#008000">/*<br />     *  将数字转换成中文的大写货币值<br />     *  @param   moneyValue<br />     *  @return<br />     */ <br /></font>    public static String convertToCapitalMoney(double moneyValue) {<br />     double money = moneyValue + 0.005;  <font color="#008000">//  防止浮点数四舍五入造成误差</font><br />     String Result = "";<br />     String capitalLetter = "零壹贰叁肆伍陆柒捌玖";<br />     String moneytaryUnit = "分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟亿拾佰仟";    <br />     String tempCapital, tempUnit;<br />     <br />     <br />     int integer;   <font color="#008000">//  钱的整数部分</font><br />     int point;     <font color="#008000">//  钱的小数部分<br /></font>     int tempValue;<font color="#008000"> //  钱的每一位的值<br /></font>     integer = (int)money;<br />     point = (int)(100 * (money - (float)integer));<br /> <br />     if (integer == 0)<br />      Result = "零圆";<br />        <font color="#008000">/*<br />         *     货币整数部分操作<br />         *     1.    依次取得每一位上的值<br />         *     2.    转换成大写<br />         *     3.    确定货币单位<br />        */<br /></font>     for (int i = 1; integer &gt; 0; i++) {<br />      tempValue = (integer % 10);    <br />      tempCapital = capitalLetter.substring(tempValue, tempValue + 1);     <br />      tempUnit = moneytaryUnit.substring(i + 1, i + 2);     <br />      Result = tempCapital + tempUnit + Result;    <br />      integer =  integer / 10;<br />     }<br />        <font color="#008000">/*<br />        *  货币小数部分操作<br />        */<br /></font>     tempValue = (point / 10); <br />     for (int i = 1; i &gt; -1; i--) {     <br />      tempCapital = capitalLetter.substring(tempValue, tempValue + 1);    <br />      tempUnit = moneytaryUnit.substring(i, i + 1);    <br />      Result = Result + tempCapital + tempUnit;    <br />      tempValue = point % 10;<br />     }<br />     return Result;<br />    }   <br />}<br /><br /><font face="Verdana" size="2"><font color="#0000ff">测试代码：</font><br /></font><br /> public static void main(String[] args) {<br /> <br />     String money1 = MoneyConvert.convertToCapitalMoney("33333.214");<br />        System.out.println(money1);<br />        String money = MoneyConvert.convertToCapitalMoney(33333.214);<br />        System.out.println(money);<br />}<br /><br /><font size="2"><font color="#0000ff">输出</font><font face="Verdana"><font color="#0000ff">结果：<br /></font><br /><span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁万<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁</font></span></span>仟<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁</font></span></span>佰<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁</font></span></span>拾<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁圆<span id="Code_Open_Text_155343" style="DISPLAY: inline"><span id="Codehighlighter1_205_1665_Open_Text"><span id="Codehighlighter1_607_1663_Open_Text"><font face="Verdana"><font size="2"><span style="COLOR: rgb(0,0,0)">贰</span></font></font></span></span></span></font></span></span>角<span id="Code_Open_Text_155343" style="DISPLAY: inline"><span id="Codehighlighter1_205_1665_Open_Text"><span id="Codehighlighter1_607_1663_Open_Text"><font face="Verdana"><font size="2"><span style="COLOR: rgb(0,0,0)">壹</span></font></font></span></span></span>分<br /><span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁万<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁</font></span></span>仟<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁</font></span></span>佰<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁</font></span></span>拾<span id="Code_Open_Text_155609" style="DISPLAY: inline"><span style="COLOR: rgb(0,0,0)"><font face="Verdana" size="2">叁圆<span id="Code_Open_Text_155343" style="DISPLAY: inline"><span id="Codehighlighter1_205_1665_Open_Text"><span id="Codehighlighter1_607_1663_Open_Text"><font face="Verdana"><font size="2"><span style="COLOR: rgb(0,0,0)">贰</span></font></font></span></span></span></font></span></span>角<span id="Code_Open_Text_155343" style="DISPLAY: inline"><span id="Codehighlighter1_205_1665_Open_Text"><span id="Codehighlighter1_607_1663_Open_Text"><font face="Verdana"><font size="2"><span style="COLOR: rgb(0,0,0)">壹</span></font></font></span></span></span>分</font></span></span></font></span></span></font></font></p>
		<p> </p>
<img src ="http://www.blogjava.net/jaunt/aggbug/83087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jaunt/" target="_blank">Jaunt</a> 2006-11-23 17:51 <a href="http://www.blogjava.net/jaunt/archive/2006/11/23/83087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>