<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>coolwangyu</title>
    <description>Kevin 
I like Java</description>
    <link>http://coolwangyu.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>30岁前男人需要完成的事</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/65669" style="color:red;">http://coolwangyu.javaeye.com/blog/65669</a>&nbsp;
          发表时间: 2007年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          30岁前男人需要完成的事<img src="aggbug/1542145.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/65669#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 Mar 2007 23:53:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/65669</link>
        <guid>http://coolwangyu.javaeye.com/blog/65669</guid>
      </item>
      <item>
        <title>利用sql对数据库进行分页</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/65438" style="color:red;">http://coolwangyu.javaeye.com/blog/65438</a>&nbsp;
          发表时间: 2007年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          利用sql对数据库进行分页<img src="aggbug/1539511.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/65438#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 24 Mar 2007 10:29:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/65438</link>
        <guid>http://coolwangyu.javaeye.com/blog/65438</guid>
      </item>
      <item>
        <title>Google Web Toolkit  到来！</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/58851" style="color:red;">http://coolwangyu.javaeye.com/blog/58851</a>&nbsp;
          发表时间: 2007年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Google Web Toolkit  到来！<img src="aggbug/1525879.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/58851#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 10 Mar 2007 16:05:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/58851</link>
        <guid>http://coolwangyu.javaeye.com/blog/58851</guid>
      </item>
      <item>
        <title>写给基于Struts开发的朋友</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/58852" style="color:red;">http://coolwangyu.javaeye.com/blog/58852</a>&nbsp;
          发表时间: 2007年03月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          基于Struts开发  如何提高效率<img src="aggbug/1523543.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/58852#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 Mar 2007 18:03:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/58852</link>
        <guid>http://coolwangyu.javaeye.com/blog/58852</guid>
      </item>
      <item>
        <title>关于身份证号码位数转换计算方式</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/50279" style="color:red;">http://coolwangyu.javaeye.com/blog/50279</a>&nbsp;
          发表时间: 2007年01月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          关于身份证号码位数转换计算方式<img src="aggbug/1492343.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/50279#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 24 Jan 2007 16:50:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/50279</link>
        <guid>http://coolwangyu.javaeye.com/blog/50279</guid>
      </item>
      <item>
        <title>新的一年，大家有什么计划啊？</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43261" style="color:red;">http://coolwangyu.javaeye.com/blog/43261</a>&nbsp;
          发表时间: 2007年01月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="background-color: rgb(204, 255, 255);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><font color="#808000" style="background-color: rgb(204, 255, 255);">&nbsp; </font><font size="4" color="#808000" style="background-color: rgb(204, 255, 255);">岁月如歌，上次bjug活动已是去年的事了，嘿嘿。<br />
&nbsp;在bjug上看到那么多高手，最近好像大家也没什么举动，偶尔说些看电影等业余生活，不过我们的业余时间还是有很多的，大家为什么不搞个有发展的项目一起来呢？&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看到冰云很有组织能力，为什么不继续搞个项目。</font>
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43261#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 05 Jan 2007 16:33:04 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43261</link>
        <guid>http://coolwangyu.javaeye.com/blog/43261</guid>
      </item>
      <item>
        <title>MalformedInputException 处理</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43645" style="color:red;">http://coolwangyu.javaeye.com/blog/43645</a>&nbsp;
          发表时间: 2006年11月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="4" style="color: rgb(128, 128, 0);">&nbsp;&nbsp;&nbsp;  相信很多web开发者在有些时候会遇到sun.io.MalformedInputException at sun.io.ByteToCharUTF8.convert(ByteToCharUTF8.java:262) 异常吧，我也遇到过；<br />&nbsp;&nbsp;&nbsp; 很多朋友不知道为什么，这个异常的出现我想通常是websphere应用服务器抛出来的吧。<br /><br />&nbsp; 有的时候，你用tomcat开发，所有页面都正常，当你打包后用websphere发布后，有些页面就会有这类问题的出现。通常原因有几个：<br />&nbsp; 1、tomcat容错能力强，webshpere容错能力弱，对一些tag 等 格式有不同要求，比如有些tag后面多空格，就会造成，有些tag不对称也能造成。<br />&nbsp;2、jsp页面的编码，比如我们通常在jsp第一行上加：<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &lt;%@ page language="java" contentType="text/html;charset=UTF-8" %&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 告知系统我们用utf-8采集数据。有的时候不同的开发工具保存后会修改文件的编码格式，websphere会抛出MalformedInputException异常。解决方法就是用统一的开发工具对其文件重新保存。<br />3、jsp上用到资串后，也有可能产生这个异常，需要对资源文件重新保存，如果有部分资源串多语言没写全，最好补全。<br />4、通常在团队开发时，如果大家使用不同的编译器的话，也可能造成这种影响，比如我们的团队现在大部分人使用eclipse，而以前的项目或者还有一些习惯用IDEA的开发人员还在继续使用，当我们用eclipse打开其他代码时，有的时候就会出现这种异常[一般不会，但确实有，可能中间经历了一些操作]，这个一般很好解决，用eclipse重新编译，如果不行就把代码拷到ultraEdit中保存后再拷回来。<br /><br /></font><img src="http://blog.csdn.net/charlesyy/aggbug/1377774.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43645#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Nov 2006 16:16:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43645</link>
        <guid>http://coolwangyu.javaeye.com/blog/43645</guid>
      </item>
      <item>
        <title>Java开发工具战争</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43646" style="color:red;">http://coolwangyu.javaeye.com/blog/43646</a>&nbsp;
          发表时间: 2006年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <font size="4" style="color: rgb(0, 128, 128);">最近网上常见的一个词语 xx java开发工具 大战 xx java开发工具，其实大家都知道，当前只有走向开源流域的开发工具才可能占有更大份额。目前常用的也就是Eclipse、IntelliJ IDEA、Netbeans 等。在这三者中各有各的优缺点，而且也都走向开源领域的。之前3种开发工具我都用过，感觉IntelliJ IDEA用起来非常的舒服方便，Eclipse也非常不错，Netbeans也不断的推出更多特色，&nbsp; 但是就本人之间Eclipse将会占有更多的市场。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为什么我要这么说呢？<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  相信大家对浏览器、文字处理软件、邮件软件等都很了解。IE不是最好的，但是市场份额最大，为什么，因为大家都已经习惯了使用它，各浏览器之间的兼容性也不同。过去IE横行时，各网站都支持IE，但是各种浏览器百花争鸣时，IE已经站住了脚，如果没有质的飞跃，那么这种情况就不会有质的变化。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作项目开发的人很清楚，如果项目组的人开发工具不统一，将会有非常多的麻烦，如果你感觉没有麻烦，那么说明你已经把麻烦送给了别人，呵呵。Eclipse是最先走入开源领域的，而且对插件的开发支持非常好，所有，各种插件也是层出不穷，他已经牢牢的占住了市场份额，而对于IntellJ ，虽然很好甚至由于更优于eclipse，但是起初他是收费的，只能用盗版，慢慢的也被各公司所遗弃也是必然，Newbeans感觉情况还不如IntellJ好，虽然最近炒作很盛。所以从项目的团队开发上讲、从各软件历史上讲，Eclipse将会是更好的！<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  但是我希望有越来越多的开发工具的竞争，这样对推动开发工具的革命性变化将是非常之有利，我们开发人员也会越来越方便。</font><br />&nbsp;<img src="http://blog.csdn.net/charlesyy/aggbug/1351370.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43646#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Oct 2006 23:11:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43646</link>
        <guid>http://coolwangyu.javaeye.com/blog/43646</guid>
      </item>
      <item>
        <title>也谈知识、技术、项目</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43647" style="color:red;">http://coolwangyu.javaeye.com/blog/43647</a>&nbsp;
          发表时间: 2006年10月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="4">之前在网上看到一篇文章，<a href="http://blog.csdn.net/cunruizhai/archive/2006/08/10/1046817.aspx">程序员的灯下黑：重知识轻技术</a>&rdquo;，谈到了当前程序员的一个很大的弊端；遇到知识和技术，我也常常灯下黑阿！<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;  来北京工作这段时间，开始给客户做一个比较独立的项目，而我在最开始想到的不是如何把这个项目作的如何之优秀，而是如何能在项目中学习到新知识，如何把自己学到的知识转化为技术应用到系统中，我想很多程序员也会这么想。其实，这并不是一个好想法。&nbsp; 很多项目延期就因为这个，还好有领导不停的在旁边提醒，要不就可能延期了，不过要按时做完还真的很难，每天都不停的开发，还要写同步文档、沟通客户、协调一起做项目的人、还要给做报表的人讲解如何获得，有的时候真的感觉，怎么还啥也没干时间就过去了呢，看来下周不加班，想不延期都难了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说了这么多废话，还没谈知识和技术呢；就像文章中说的那样，</font><font size="4"><span style="font-family: 宋体;">知识就是知道，你知道了某件事是怎么回事，就是有了知识。</span></font><font size="4"><span style="font-family: 宋体;">技术就是你能做出来，做得好叫技术好，做的不好叫技术差。我们做程序员的不能只学知识，要重视技术，不能只重视知识技术，更要重视如何做一个成功的项目。<br />&nbsp;&nbsp;&nbsp; 但愿下周能把工作做完，也算告一段落，也好轻松下，嘿嘿。<br /></span></font>&nbsp;<img src="http://blog.csdn.net/charlesyy/aggbug/1345864.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43647#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 22 Oct 2006 21:57:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43647</link>
        <guid>http://coolwangyu.javaeye.com/blog/43647</guid>
      </item>
      <item>
        <title>食谱-可乐鸡翅</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43648" style="color:red;">http://coolwangyu.javaeye.com/blog/43648</a>&nbsp;
          发表时间: 2006年10月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从沈阳来北京有一段时间了, 刚稳定下来, 想想也有好久没有下文章了,呵呵! 来的这段时间别的没学会,学会做菜了,当然只能是初级选手. 说说我比较喜欢吃和做的一个菜吧: 可乐鸡翅.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以前只有在饭店吃,现在可以什么时候先吃自己做了. 各位IT同行工作都很辛苦，学会做菜也不错啊，嘿嘿。下面我就讲讲怎么做。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先就是材料了：鸡翅、可乐、糖、酱油、油 、料酒、[盐、葱、姜、芗菜] <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同样是可乐鸡翅，做法有很多，怎么分呢，我就分为2种吧。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一种： 先把鸡翅洗净放在清水中煮一会，软一点后取出，从骨头节处将鸡翅切开，然后再鸡翅上用刀切一些小口以便于味道进入，然后准备一个小盆，将料酒、可乐、糖、酱油放入，其中酱油和可乐的比例大约(1：3 ~ 1：4) ，然后将切好的鸡翅放入，浸泡一会20分钟即可，然后锅中放入油，将鸡翅炸至金黄色捞起，然后将油倒出，将盆中的调料汁倒入锅中，同时将鸡翅也放入，先用大火煮，等调料汁变为原来的1/3时，调制小火，同时用筷子等在鸡翅上插眼，能让味道更好渗透。最后调料汁块没的时候，关火，这时，基本上都是糖等；放置一会即可拿出食<br />用。&nbsp; （注意：糖的多少一个人口味，真个调料汁刚抹过鸡翅为好）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二种[给懒人准备的]：用刀将鸡翅从骨结处切开，并在鸡身上切口，将将料酒、可乐、糖、酱油和鸡翅直接放入锅中先大火或小火煮。待调料汁将要干时捞出即可食用。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;<img src="http://blog.csdn.net/charlesyy/aggbug/1341651.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43648#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Oct 2006 23:08:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43648</link>
        <guid>http://coolwangyu.javaeye.com/blog/43648</guid>
      </item>
      <item>
        <title>病毒的苦恼与解决</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43649" style="color:red;">http://coolwangyu.javaeye.com/blog/43649</a>&nbsp;
          发表时间: 2006年08月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上网对我来说早已是每天必做之事。然后就在前天，电脑不知什么时候中招了。总是每隔几分钟开始向外弹出网页，我用了诺顿、&nbsp;恶意软件助手、360safe 、卡巴斯基个人版，结果都没有用处。弹出的网页经常换，有意思。&nbsp; http://www.goodrumor.com/t84271082.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.realrealities.com/t84271082.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;http://www.broadcastsnews.com/t84271082.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.greatbulletin.com/a84271082.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.cheappress.com/t84271082.html&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;上面这些都是经常弹得，无论你的电脑在干什么，都定时向外弹，包括你杀毒时。杀毒软件都不好用，也试过借助软件查找可疑的注册表然后手动删除，不过都不好用，都杀不下去，只好装网络防火墙了，skynet没有针对某个ip或进程进行隔离，最后选择了卡巴斯基Anti--Hacker 防火墙，用ping命令找上面的地址隔离，限制非explore.exe执行的IE连接，结果上面的网页真的不弹了，先别高兴，更厉害的在后面。开始弹其他的网页了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.ad-w-a-r-e.com/cgi-bin/&nbsp;&nbsp; ............&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这下是怎么搞也隔离不了了，后来看到有网友提示到网站上下载卸载工具，于是我去了http://www.ad-w-a-r-e.com/cgi-bin/UnInstaller&nbsp;这个地址，必须点击同意，然后复制key，点击下载软件。下载后运行并输入key，重起系统。&nbsp;&nbsp; OK&nbsp; ！&nbsp;&nbsp; 折磨我2天的问题解决了！</font>&nbsp; </p><img src="http://blog.csdn.net/charlesyy/aggbug/1109834.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43649#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Aug 2006 23:37:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43649</link>
        <guid>http://coolwangyu.javaeye.com/blog/43649</guid>
      </item>
      <item>
        <title>JavaCC技术手册之JJTree参考文档</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43650" style="color:red;">http://coolwangyu.javaeye.com/blog/43650</a>&nbsp;
          发表时间: 2006年08月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;<font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不知道大家了解Lucence这个项目么，一个开源的搜索引擎。不过想看懂很难，因为需要很多相关的知识，我这里就翻译了一篇文档，JavaCC技术手册之JJTree参考文档，Lucence在一些主要的文法分析中用到了JavaCC，而JJTree是JavaCC的一个预处理。下面就是翻译：</font></p>
<h3 style="MARGIN: 13pt 0cm"><font size="5"><span lang="EN-US"><font face="Times New Roman">JavaCC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术手册：</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参考文档</span><span lang="EN-US"><font face="Times New Roman"> [</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">翻译：</span><span lang="EN-US"><font face="Times New Roman">Kevin Wang]</font></span></font></h3>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">简洁</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 15pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US"><font face="Times New Roman">JavaCC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码的不同地方</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">嵌入语法树构建动作，可以理解为</span><span lang="EN-US"><font face="Times New Roman">JavaCC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的预处理工具。通过运行</span><span lang="EN-US"><font face="Times New Roman">JavaCC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建解析器生成</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输出文件。这篇文档描述了如何使用</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，以及如何从中分离你的解析器。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认为每个非终结符生成代码来创建语法分析树节点。这种行为可以被修改以便于一些非终结符不生成节点或者因为一部分内容扩充而生成一个节点。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经定义了一个所有语法分析树节点必须实现的接口</span><span lang="EN-US"><font face="Times New Roman">Node</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个接口定义诸如：设置节点的父节点、增加子节点、重新获得子节点</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等操作方法。</span><font face="Times New Roman"> </font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（为想要更多条件）可以设置</span><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman"> </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&ldquo;</span><span lang="EN-US"><font face="Times New Roman">simple</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&ldquo;</span><span lang="EN-US"><font face="Times New Roman">multi</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;两种模式之一。在&ldquo;</span><span lang="EN-US"><font face="Times New Roman">simple</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;</span><span lang="EN-US"><font face="Times New Roman">[</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">单一</span><span lang="EN-US"><font face="Times New Roman">]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式下语法分析树节点都是&ldquo;</span><span lang="EN-US"><font face="Times New Roman">SimpleNode</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;这个具体类型。而在&ldquo;</span><span lang="EN-US"><font face="Times New Roman">multi</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;</span><span lang="EN-US"><font face="Times New Roman">[</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多个</span><span lang="EN-US"><font face="Times New Roman">]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式下语法分析树节点类型取决于节点的名字。如果你不为&ldquo;</span><span lang="EN-US"><font face="Times New Roman">Node</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;接口提供实现</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会为你生成一些基于&ldquo;</span><span lang="EN-US"><font face="Times New Roman">SimpleNode</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;的样品实现，你可以修改这个实现以适应需求。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然</span><span lang="EN-US"><font face="Times New Roman">JavaCC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个从顶至下的解析器</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即</span><span lang="EN-US"><font face="Times New Roman">LL(K)<span style="mso-spacerun: yes">&nbsp; </span></font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常我们只要用</span><span lang="EN-US"><font face="Times New Roman">LL(1)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即可</span><font face="Times New Roman"> <span lang="EN-US">)</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，但是</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">构造语法树过程却是从底至上构建的。为此使用堆栈，当他们被创建后它可以把节点压入堆栈中。当它找到一个父节点时，从堆栈中弹出子节点并且将其添加到父节点下，最后把新的父节点压入堆栈。堆栈是开放的意味着你可以使用内部语法行为对其访问：入堆栈，出堆栈，另外不管你有多么的适应请熟练使用它的内容。更多的重要信息请参看下面&ldquo;节点作用域和用户行为&rdquo;章节的介绍。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供</span><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">种基本节点种类定义，可以依据造句法的缩写使其使用起来更方便。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">1、</font><span style="FONT: 7pt "Times New Roman"">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">明确节点：一个以指定子节点数创建的节点。其中许多节点可以被弹出堆栈成为新节点的子节点，然后把这个新节点压入栈。你可以像这样定义一个明确节点：</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">#ADefiniteNode(INTEGER EXPRESSION)<o:p></o:p></font></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 33pt; TEXT-INDENT: -12pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: -1.0"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span></code><code><span style="FONT-SIZE: 12pt">虽然<span lang="EN-US">INTEGER</span>是目前为止使用最多的表达式，但明确节点参数&ldquo;<span lang="EN-US">EXPRESSION</span>&rdquo;可以使用任何<span lang="EN-US">INTEGER </span>表达式。</span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">2、</font><span style="FONT: 7pt "Times New Roman"">&nbsp; </font></span></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">条件节点：当且仅当条件值为</span><span lang="EN-US"><font face="Times New Roman">True</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，带着所有被压入节点区域内部的子节点创建条件节点。如果条件值为</span><span lang="EN-US"><font face="Times New Roman">False</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点不会被创建，所有的子节点将残留在节点堆栈中。你可以像这样定义一个条件节点：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 24pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: 2.0"><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">#ConditionalNode(BOOLEAN EXPRESSION)</font></span></code></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt; TEXT-INDENT: -31.5pt; mso-char-indent-count: -3.0"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个条件节点描述符&ldquo;</span><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">EXPRESSION</span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;可以使用任何</span><code><span lang="EN-US" style="FONT-SIZE: 12pt">BOOLEAN </span></code></font></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">表达式。下边有<span lang="EN-US">2</span>个常用的条件节点内容需要记忆：</font></span></code></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp; </span>1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、不确定节点</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp; </span></font></span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">#IndefiniteNode </font></span></code></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">是 <span lang="EN-US">#IndefiniteNode(true) </span>的简写</font></span></code></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="3"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span>2</font></font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">、<span style="COLOR: blue">大节点</span></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span></font></span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">#GTNode(&gt;1) </font></span></code></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">是 <span lang="EN-US">#GTNode(jjtree.arity() &gt; 1) </span>的简写</font></span></code></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3" face="Times New Roman">&nbsp;</font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -42pt; mso-char-indent-count: -4.0"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码中，当简写的不确定节点表达跟着一个括号表达式时，可能导致歧义。在那种情况下简写必须用完全写法替代。例如：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>( ... ) #N ( a() )<span style="mso-spacerun: yes">&nbsp; </span></font></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面表达式逻辑不清，你必须明确的使用条件式：</span></font></p>
<pre style="MARGIN-LEFT: 18pt"><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>( ... ) #N(true) ( a() )</font></font></span></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：节点描述符表达式不能有副作用，</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并没有指定表达式将被计算多少次。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -42pt; mso-char-indent-count: -4.0"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认情况下</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把每一个非终结符作为一个不确定节点对待，从它的产生式的名</span><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt; mso-para-margin-left: 2.0gd; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">字衍生出节点名字。也可以用下面的语法给他一个不同的名字：</font></span></p>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void P1() #MyNode : { ... } { ... }</font></font></span></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当解析器识别出了一个</span><span lang="EN-US"><font face="Times New Roman">P1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">非终结符，它先定义一个节点，并在堆栈中进行标记，以便于一些由扩展</span><span lang="EN-US"><font face="Times New Roman">P1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">非终结符而构建和入栈的分析树节点被弹出并成为</span><font face="Times New Roman"> <span lang="EN-US">MyNode</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点的子节点。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果想要使某个产生式禁止创建节点，你可以使用下面的语法：</span></font></p>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void P2() #void : { ... } { ... }</font></font></span></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: -2.0"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样，一些根据非终结符入栈作为</span><span lang="EN-US"><font face="Times New Roman">P2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">扩展的语法分析树节点会留在堆栈中，会被将来的产生式弹出作为其子节点，</span><code><span style="FONT-SIZE: 12pt"><font face="宋体">对</font></span></code><span lang="EN-US" style="COLOR: blue"><font face="Times New Roman">non-decorated[</font></span><font face="宋体"><code><span style="FONT-SIZE: 12pt; COLOR: blue">非包装<span lang="EN-US">]</span></span></code><code><span style="FONT-SIZE: 12pt">节点</span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你也可以通过使用</span><code><span lang="EN-US" style="FONT-SIZE: 12pt">NODE_DEFAULT_VOID</span></code></font></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">选项使之成为默认行为。</font></span></code></p>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void P3() : {}</font></font></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></font></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span>P4() ( P5() )+ P6()</font></font></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></font></span></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: -2.0"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个例子中，一个不确定的节点</span><span lang="EN-US"><font face="Times New Roman">P3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被启动并标记堆栈，然后是</span><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">P4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点，</span><span lang="EN-US" style="COLOR: blue"><font face="Times New Roman">1</font></span><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个或多个</span><span lang="EN-US" style="COLOR: blue"><font face="Times New Roman">P5</font></span><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点和</span><span lang="EN-US" style="COLOR: blue"><font face="Times New Roman">1</font></span><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US" style="COLOR: blue"><font face="Times New Roman">P6</font></span><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点被解析</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。被入堆栈的任何节点都会被弹出成为</span><span lang="EN-US"><font face="Times New Roman">P3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的子节点。你可以更深一步的定制生成树：</span></font></p>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void P3() : {}</font></font></span></pre>
<pre style="tab-stops: 45.8pt 91.5pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></font></span></pre>
<pre style="tab-stops: 45.8pt 137.4pt 139.5pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>P4() ( P5() )+ #ListOfP5s P6()</font></font></span></pre>
<pre style="tab-stops: 45.8pt 137.4pt 139.5pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><font size="3"><font face="宋体"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="COLOR: red">我认为这里是<span lang="EN-US">P4() ( P5() ) #ListOfP5s + P6()<o:p></o:p></span></span></font></font></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>}</font></font></span></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-char-indent-count: -2.0"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现在</span><span lang="EN-US"><font face="Times New Roman">P3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点会有一个</span><span lang="EN-US"><font face="Times New Roman">P4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点、<span style="COLOR: blue">一个</span></span><span lang="EN-US" style="COLOR: blue"><font face="Times New Roman">ListOfP5s</font></span><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点和一个</span><span lang="EN-US" style="COLOR: blue"><font face="Times New Roman">P6</font></span><span style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点作为子节点</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US"><font face="Times New Roman">#Name</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构表示一个后缀操作符，它的区域直接就是前面的扩展单元。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点作用域和用户行为</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 16pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每个节点都有其作用域。这个作用域内的用户行为可以通过使用特殊标志符&ldquo;</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">jjtThis</font></span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;来访问已被创建的节点。这个标志符被隐含的声明为节点的正确类型，这样此节点的一些字段、方法可以轻易的被访问。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">一个作用域就是前面一个节点定义的扩展单位。这可能是一个括号表达式。当产生式符号被定义（或者是隐含定义的默认节点），它的作用域就是包括声明块在内的整个产生式的右侧。</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你可以使用一个包括&ldquo;</span><span lang="EN-US"><font face="Times New Roman">jjtThis</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;扩展引用左侧的表达式。例如：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>... ( jjtThis.my_foo = foo() ) #Baz ...</font></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里&ldquo;</span><span lang="EN-US"><font face="Times New Roman">jjtThis</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;引用了一个含有&ldquo;</span><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">my_foo</span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;字段的&ldquo;</span><code><span lang="EN-US" style="FONT-SIZE: 12pt">Baz</span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;节点。</span><code><span lang="EN-US" style="FONT-SIZE: 12pt">foo()</span></code></font><span lang="EN-US"><font face="Times New Roman"> </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产生式解析的结果是被赋给&ldquo;</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">my_foo</font></span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点作用域内用户的最终行为不同于所有的其他行为<span style="COLOR: blue">。当代码执行过程中，子节点已经被从堆栈中弹出并被添加给这个被压入堆栈的节点</span>。这些孩子节点可以通过诸如这个节点的方法</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">jjtGetChild()</font></span></code><span lang="EN-US"><font face="Times New Roman">.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行访问。除了最终用户行为之外的用户行为仅能访问堆栈中的子节点。此节点的方法对那些没有被赋给这个节点的孩子节点是无效的。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个条件计算结果为</span><span lang="EN-US"><font face="Times New Roman">False</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的条件表达式条件节点既不能被得到以添加到堆栈中，其孩子节点也不能被添加。条件节点作用域内的最终用户行为可以通过调用方法</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">nodeCreated()</font></span></code><font face="宋体"><code><span style="FONT-SIZE: 12pt">来</span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">决定此节点是否被创建。如果节点条件被满足、节点被创建、并且被压入堆栈的话结果返回</span></font><span lang="EN-US"><font face="Times New Roman">True</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则返回</span><span lang="EN-US"><font face="Times New Roman">False</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">异常处理</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 16pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个由节点作用域内扩展抛出却没有在节点作用域内捕获的异常将由</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自行处理。当这种情况发生时，那些再节点作用域内被压入堆栈的节点会被弹出堆栈并被抛弃。之后一个异常会被重新抛出。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样做的意图是使分析其可以进行错误校验并且使节点堆栈继续处于一个可知的状态。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：一般</span><span lang="EN-US"><font face="Times New Roman">JJTree </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不能识别出此异常是否由节点作用于内用户行为抛出的。这样的异常有可能被不正确的处理。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 16pt"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点范围钩子</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 16pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">NODE_SCOPE_HOOK</font></span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项被置为</span><span lang="EN-US"><font face="Times New Roman">True</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会在每个节点作用域的入口和出口处调用用户自定义的</span><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个解析器方法。这些方法必须有下面的形式：</span></font></p>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void jjtreeOpenNodeScope(Node n)</font></font></span></pre>
<pre style="tab-stops: 45.75pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void jjtreeCloseNodeScope(Node n)</font></font></span></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">如果解析器是静态的，那么这些方法也必须被声明成静态的。他们都以当前节点作为被调用的参数。</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一种用途是这些功能将用来存储节点的首尾标记符以便于输入可以很容易的被重现。例如：</span></font></p>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void jjtreeOpenNodeScope(Node n)</font></font></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>{</font></font></span></pre>
<pre style="tab-stops: 45.8pt 127.5pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>((MySimpleNode)n).first_token = getToken(1);</font></font></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>}</font></font></span></pre>
<pre><span lang="EN-US"><o:p><font size="3" face="宋体">&nbsp;</font></o:p></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>void jjtreeCloseNodeScope(Node n)</font></font></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></font></span></pre>
<pre style="tab-stops: 45.8pt 127.5pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>((MySimpleNode)n).last_token = getToken(0);</font></font></span></pre>
<pre><span lang="EN-US"><font size="3"><font face="宋体"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>}</font></font></span></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">SimpleNode</font></span></code></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">的<span lang="EN-US">MySimpleNode</span>类中有下面<span lang="EN-US">2</span>个额外的字段：<span lang="EN-US"><o:p></o:p></span></font></span></code></p>
<pre><font size="3"><font face="宋体"><code><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></code><span lang="EN-US">Token first_token, last_token;</span></font></font></pre>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外一个用途是用于将解析器对象自身存储于节点以便于状态可以被解析器提供的所有节点所共享。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点的生存周期</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 16pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">一个节点的建立经历了一个很好被确定的序列步骤。下面是从节点自身的透视图观察的序列。</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、创建节点需要一个独特的整形参量。这个参数确定了节点的种类，这在单一模式中有其有用。</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自动生成了一个声明了有效常量的类</span><font face="Times New Roman"> <em><span lang="EN-US">parser</span></em><span lang="EN-US">TreeConstants.java </span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常量的名字取决于</span><span lang="EN-US"><font face="Times New Roman">JJT</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前缀加文件中节点名字的大写字符串。用字符&ldquo;</span><span lang="EN-US"><font face="Times New Roman">.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;代替字符&ldquo;</span><span lang="EN-US"><font face="Times New Roman">_</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&rdquo;</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。为方便起见，在同一个文件中维护了一个被称为</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">jjtNodeName[]</font></span></code></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">的字符串数组，它遍历了节点的未修改名字的常量。<span lang="EN-US"><o:p></o:p></span></font></span></code></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、节点的方法</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">jjtOpen()</font></span></code></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">被调用<span lang="EN-US"><o:p></o:p></span></font></span></code></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">3</span></code><code><span style="FONT-SIZE: 12pt">、如果<span lang="EN-US">NODE_SCOPE_HOOK</span>选项被设置为<span lang="EN-US">True</span>，那么用户自定义的方<span lang="EN-US">openNodeScope()</span>将被调用并且以此节点为参数。这个方法可以初始化节点的字段或者调用节点的方法。例如，他可以存储节点的首标记符。<span lang="EN-US"><o:p></o:p></span></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">4</span></code><code><span style="FONT-SIZE: 12pt">、如果一个节点被解析时抛出了一个未捕获的异常，节点将被抛弃。</span></code></font><font size="3"><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将不再对其进行引用。虽然用户自定义的节点作用域钩子</span><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">closeNodeHook()</span></code><code><span style="FONT-SIZE: 12pt">将不再调用此节点作为参数，但</span></code><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">节点不会被关闭</span><code><span style="FONT-SIZE: 12pt">。<span lang="EN-US"><o:p></o:p></span></span></code></font></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">5</span></code><code><span style="FONT-SIZE: 12pt">、另外，如果一个条件节点的条件计算值为<span lang="EN-US">False</span>，节点将被抛弃。虽然用户自定义节点作用域钩子<span lang="EN-US">closeNodeHook()</span>可能调用此节点作为参数，但节点不会被关闭。<span lang="EN-US"><o:p></o:p></span></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">6</span></code><code><span style="FONT-SIZE: 12pt">、另外，一个明确节点通过整形表达式制定的所有孩子节点或者在一个条件节点作用域内被压入堆栈的所有节点被赋给此节点。他们的添加次序并没有被确定。<span lang="EN-US"><o:p></o:p></span></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">7</span></code><code><span style="FONT-SIZE: 12pt">、节点的方法<span lang="EN-US">jjtClose()</span>被调用。<span lang="EN-US"><o:p></o:p></span></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">8</span></code><code><span style="FONT-SIZE: 12pt">、节点被压入堆栈。<span lang="EN-US"><o:p></o:p></span></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">9</span></code><code><span style="FONT-SIZE: 12pt">、如果<span lang="EN-US">NODE_SCOPE_HOOK</span>选项被设置为<span lang="EN-US">True</span>，则用户自定义方法<span lang="EN-US">closenNodeScope()</span>将被调用并且以此节点作为参数。<span lang="EN-US"><o:p></o:p></span></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20.9pt; mso-para-margin-left: 1.99gd"><font face="宋体"><code><span lang="EN-US" style="FONT-SIZE: 12pt">10</span></code><code><span style="FONT-SIZE: 12pt">、如果节点不是根节点，他将作为其他节点的字节点被添加并且它的<span lang="EN-US">jjtSetParent()</span>方法被调用。</span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问者支持</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 16pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为访问者提供了一些基本的设计模式。如果</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">VISITOR</font></span></code><code><span style="FONT-SIZE: 12pt"><font face="宋体">选项被设置为<span lang="EN-US">True</span>，</font></span></code><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将会在生成所有节点类时插入</span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">jjtAccept()</font></span></code></font><code><span style="FONT-SIZE: 12pt"><font face="宋体">方法，并且生成一个以此节点为参数而被实现的访问者接口。<span lang="EN-US">[public Object visit(</span>具体<span lang="EN-US">Node</span>类<span lang="EN-US">,Object)]</span></font></span></code></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问者接口的名字由解析器名字加</span><span lang="EN-US"><font face="Times New Roman">Visitor</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来构造。每当</span><span lang="EN-US"><font face="Times New Roman">JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行时接口会被生成，以便于他可以准确地表现解析其所使用的那些节点。如果实现类不能被新节点更新将会产生编译时错误。只是一个特性。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 16pt"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>JJTree</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在命令行或者</span><span lang="EN-US"><font face="Times New Roman">JavaCC</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项声明中提供了下面这些选项：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="宋体">BUILD_NODE_FILES</font></span></strong></code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> (default: </font></span></strong><code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="宋体">true</font></span></strong></code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">)<o:p></o:p></font></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><span lang="EN-US"><font face="Times New Roman">SimpleNode</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及语法中使用的其它节点创建样本实现。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-shading: white; mso-pattern: gray-15 auto">MULTI (default: false) <o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">创建多模式解析树。此选项默认为</span><span lang="EN-US"><font face="Times New Roman">False</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，生成一个单一模式解析树。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="宋体">NODE_DEFAULT_VOID</font></span></strong></code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> (default: </font></span></strong><code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="宋体">false</font></span></strong></code><strong style="mso-bidi-font-weight: normal"><font face="Times New Roman"><span lang="EN-US" style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto">)</span><span lang="EN-US"><o:p></o:p></span></font></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此选项设置为</span><span lang="EN-US"><font face="Times New Roman">True</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，不在使每个<span style="COLOR: blue">非包装</span>产生式定义一个节点，取而代之为空。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="宋体">NODE_FACTORY</font></span></strong></code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> (default: </font></span></strong><code><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto"><font face="宋体">false</font></span></strong></code><strong style="mso-bidi-font-weight: normal"><font face="Times New Roman"><span lang="EN-US" style="BACKGROUND: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto">)</span><span lang="EN-US"><o:p></o:p></span></font></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用下面的方式使用一个工厂方法创建一个节点：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><code><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="宋体">public static Node jjtCreate(int id)<o:p></o:p></font></span></code></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><code><strong style="mso-bidi-font-weight: normal">span<span lang="EN-US" style="FONT-SIZE: 12pt; BACKGROUND: #d9d9d9; mso-shading: white; mso-p</strong></code></p>
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43650#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Aug 2006 01:18:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43650</link>
        <guid>http://coolwangyu.javaeye.com/blog/43650</guid>
      </item>
      <item>
        <title>如何获得免费网络空间</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43651" style="color:red;">http://coolwangyu.javaeye.com/blog/43651</a>&nbsp;
          发表时间: 2006年08月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="4" color="#339966">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相信很多朋友都有u盘，通常需要把一个地方的东西考出来，传到另一个地方，而邮件通常限制，一般都是1M，有些公司有上限10M(很少，不过我们是这样)&nbsp;。</font></p>
<p><font size="4" color="#339966">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我同学在上海一家美国公司工作，他们就代理这种网络空间，就当免费给他们做广告了，呵呵。你可以申请1G的免费空间，而且网站上有桌面管理工具更方便应用。</font></p>
<p><font size="4" color="#339966">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 地址&nbsp; </font><a href="http://www.drivehq.com"><font size="4" color="#339966">www.drivehq.com</font></a><font size="4" color="#339966">&nbsp;&nbsp; ， 大家喜欢的用用看吧，1G免费空间，上传不限制文件大小，上传和下载速度200k以上，相信对于那些喜欢考一些小说，甚至小电影的朋友很有用吧。</font></p><img src="http://blog.csdn.net/charlesyy/aggbug/1018873.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43651#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Aug 2006 14:06:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43651</link>
        <guid>http://coolwangyu.javaeye.com/blog/43651</guid>
      </item>
      <item>
        <title>足球带给我的回忆</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43652" style="color:red;">http://coolwangyu.javaeye.com/blog/43652</a>&nbsp;
          发表时间: 2006年08月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font color="#99cc00">&nbsp;&nbsp; &nbsp;&nbsp;<font size="4">&nbsp;&nbsp; </font></font><font size="4" color="#808000">来沈阳的2年中，足球给我留下了很多美好的回忆，通过足球也让我结识了不少朋友。也许很多大牛们把大多数业余时间献给了技术深造，而我把每年能踢球的那几个月大部分都献给了足球，也许是爱好的缘故吧，有的时候一天要是不踢球全身都感觉不舒服，就像刚起来没活动开一样，我想时间一长，搞我们IT这行的兄弟们可有点危险。&nbsp;&nbsp;&nbsp; 籍工作的原因，月底我可能就要去北京工作了，短时间内很难回来与沈阳的这些朋友一起玩球了，伤感之情油然而生，希望有时间回来继续足球生活。不知道北京那边又没有这样的足球环境，找一些志同道合的朋友，痛痛快快的玩一玩，希望如此吧！</font></p>
<p><font size="4" color="#808000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 北京太大了，估计到时候想找同学玩都挺难的，在沈阳就有这感觉，有同学在北行那边，而我在却在浑南最里面，还有一个妹妹在沈阳航空学院，离我也是太远了，去一次太费劲了。还不知道住在北京什么地方，如果离同学近可以找回大学玩得感觉吧！</font></p><img src="http://blog.csdn.net/charlesyy/aggbug/1011737.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43652#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Aug 2006 18:14:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43652</link>
        <guid>http://coolwangyu.javaeye.com/blog/43652</guid>
      </item>
      <item>
        <title>IBM的T60笔记本欣赏</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43653" style="color:red;">http://coolwangyu.javaeye.com/blog/43653</a>&nbsp;
          发表时间: 2006年07月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 昨天，2个同事(也是一个寝室的)&nbsp;每人买了一个IBM T60 B14&nbsp; ，我看了一下，真是爽阿。比起我1年前买的HP，真的是好的太多了，就不谈我的本本了，说说T60吧。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最感性兴趣的当然是显卡，128M独立显存，以前买本本有个64M的就老兴奋了；看型号，T60在T43之上，那么优越在哪里，双核，多任务的时候，处理自然快很多。还有就是他的主线、内存频率好像是667吧，他快了，没有具体比，不知道快多少倍。高分屏，明显看的东西多，不知道打cs的时候会不会先看到我，呵呵！80G硬盘比我的大一倍。现在水货才13000不到，值得买。</p><img src="http://blog.csdn.net/charlesyy/aggbug/948217.aspx" height="1" width="1" />
          <br/>
          <span style="color:red;">
            <a href="http://coolwangyu.javaeye.com/blog/43653#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Jul 2006 17:24:00 +0800</pubDate>
        <link>http://coolwangyu.javaeye.com/blog/43653</link>
        <guid>http://coolwangyu.javaeye.com/blog/43653</guid>
      </item>
      <item>
        <title>影响Hibernate性能的因素</title>
        <author>coolwangyu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://coolwangyu.javaeye.com">coolwangyu</a>&nbsp;
          链接：<a href="http://coolwangyu.javaeye.com/blog/43654" style="color:red;">http://coolwangyu.javaeye.com/blog/43654</a>&nbsp;
          发表时间: 2006年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h3 style="MARGIN: 13pt 0cm"><font size="5"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">影响</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">性能的因素</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></h3>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用了一段时间的</span><span lang="EN-US"><font face="Times New Roman">hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后，总结了一些开发人员应该注意的一些影响其效率的细节。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">1</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、不同的主健生成机制对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常的生成机制又</span><span lang="EN-US"><font face="Times New Roman">10</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">几种，说一些常用的吧。数据库提供的主键生成机制，往往是通过在一个内部表中保存当前主键状态（如对于自增型主键而言，此内部表中就维护着当前的最大值和递增量），之后每次插入数据会读取这个最大值，然后加上递增量作为新记录的主键，之后再把这个新的最大值更新回内部表中，这样，一次</span><span lang="EN-US"><font face="Times New Roman">Insert</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作可能导致数据库内部多次表读写操作，同时伴随的还有数据的加锁解锁操作，这对性能产生了较大影响。我们系统中就是用这这种</span><span lang="EN-US"><font face="Times New Roman">hi/lo</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">生成方式么，但是它的好处跨不同数据库没有影响。因此，对于并发</span><span lang="EN-US"><font face="Times New Roman">Insert</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要求较高的系统，推荐采用</span><span lang="EN-US"><font face="Times New Roman">uuid.hex </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为主键生成机制。在</span><span lang="EN-US"><font face="Times New Roman">hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指南中有</span><span lang="EN-US"><font face="Times New Roman">10</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">种生成主健方式，根据你们具体业务定，不同方式有不同的优缺点。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></strong></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">2</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、</span><span style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> </font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">配置文件中外健的配置方式对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在写</span><span lang="EN-US"><font face="Times New Roman">*.hbm.xml</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置文件时，多考虑业务上的需要，看看表现层是否真的需要显示关联信息。</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如合同表中存在</span><span lang="EN-US"><font face="Times New Roman">employeeid</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">外健，因为表现层需要显示，所以需要配上多对</span><span lang="EN-US"><font face="Times New Roman">1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等配置，如果，页面不一定需要显示，则只配成外健性能更好些。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3" face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">3</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、</span><span style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> </font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">保存信息时关联表保存方式对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用员工合同表举例，比如其中</span><span lang="EN-US"><font face="Times New Roman">employee</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经被配置成多对一了。那么，</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么比如在添加记录时，我们系统中，原来的写法：</span><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要设置</span><span lang="EN-US"><font face="Times New Roman">contractPO</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的相关必添信息以及需要</span><span lang="EN-US"><font face="Times New Roman">employeeid</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用查询方法，查找</span><span lang="EN-US"><font face="Times New Roman">employeePO</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，然后，</span><span lang="EN-US"><font face="Times New Roman">contractPO.setEmployee(employeePO) ;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样就多了一次查询，我试验过，可以这样写：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>EmployeePO employee = new EmloyeePO();</font></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>employee.setOid(oid)<span style="mso-spacerun: yes">&nbsp; </span>;</font></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>contractPO.setEmployee(employeePO)</font></font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样写，就可以少一次查询。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">4</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、</span><span style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> </font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">数据库方面对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本身没有什么可以提高性能的，它已经很不错了，主要是在我们的系统设计和写法上。此时，数据库的性能也是相关的一个方向，我的</span><span lang="EN-US"><font face="Times New Roman">blog</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上有一个关于<a href="http://blog.csdn.net/CharlesYY/archive/2006/06/12/791011.aspx">不同写法</a></span><span lang="EN-US"><font face="Times New Roman"><a href="javascript:void(0);/*1151774556953*/">sql</a></font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><a href="javascript:void(0);/*1151774556953*/">语句有不同的影响</a>。</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US"><font face="Times New Roman">hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发时，要将</span><span lang="EN-US"><font face="Times New Roman">sql</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句打印到控制台上，当你发现一个超作出现的查询次数和你的数据量有关系时，那么，你已经在代码设计上制造了一个很大的</span><span lang="EN-US"><font face="Times New Roman">bug</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，调试他吧。还有，数据库在使用触发器时，没必要尽量少用，当然这算数据库方面对了，呵呵。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3" face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">5</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、</span><span style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> </font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">批处理参数对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">根据你们产品的经常需要的批处理数量，适当设置配置文件属性中的配置：</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3" face="Times New Roman">[1] hibernate.jdbc.fetch_size<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>[2]<span style="mso-spacerun: yes">&nbsp; </span>hibernate.jdbc.batch_size</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个多少是好我没研究过，满江红上的开源</span><span lang="EN-US"><font face="Times New Roman">bbs</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用的是</span><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>[1]50 [2]25<span style="mso-spacerun: yes">&nbsp;&nbsp; </span></font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。我们的用的多少我没去看，你那也有代码。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">6</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、</span><span style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman"> </font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">配置文件参数对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">dynamic-update </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数设定为生成</span><span lang="EN-US"><font face="Times New Roman">Update SQL </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时候，只包括当前发生变化的字段（提高</span><span lang="EN-US"><font face="Times New Roman">DB Update</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">性能）。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font size="3" face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">7</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">JavaBean</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">的写法对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：在编写代码的时候请，对将</span><span lang="EN-US"><font face="Times New Roman">POJO</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">getter/setter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法设定为</span><span lang="EN-US"><font face="Times New Roman">public</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如果设定为</span><span lang="EN-US"><font face="Times New Roman">private</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将无法对属性的存取进行优化，只能转而采用传统的反射机制进行操作，这将导致大量的性能开销（特别是在</span><span lang="EN-US"><font face="Times New Roman">1.4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之前的</span><span lang="EN-US"><font face="Times New Roman">Sun JDK</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本以及</span><span lang="EN-US"><font face="Times New Roman">IBM JDK</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，反射所带来的系统开销相当可观）。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-tab-count: 1"><font size="3" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><font face="Times New Roman">8</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="BACKGROUND: #d9d9d9; COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-shading: white; mso-pattern: gray-15 auto">、缓存技术对性能的影响</span><span lang="EN-US" style="BACKGROUND: #d9d9d9; COLOR: green; mso-shading: white; mso-pattern: gray-15 auto"><o:p></o:p></span></strong></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果，业务中需要对某信息经常反复性的查询，但是却不进行修改，或者是很少进行修改，那么，利用缓存机制，也是一种不错的选择。我还没用上，以后尝试下。引入</span><span lang="EN-US"><font face="Times New Roman">Cache</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机制的难点是如何保证内存中数据的有效性，否则脏数据的出现将给系统带来难以预知的严重后果。</span><span lang="EN-US"><font face="Times New Roman">Hibernate </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中实现了良好的</span><span lang="EN-US"><font face="Times New Roman">Cache </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机制，我们可以借助</span><span lang="EN-US"><font face="Times New Roman">Hibernate </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内部的</span><span lang="EN-US"><font face="Times New Roman">Cache</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">迅速提高系统数据读取性能。需要注意的是：</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做为一个应用级的数据访问层封装，只能在其作用范围内保持</span><span lang="EN-US"><font face="Times New Roman">Cache</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中数据的的有效性，也就是说，在我们的系统与第三方系统共享数据库的情况下，</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">Cache</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机制可能失效。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3" face="Times New Roman">&nbsp;&nbsp; </font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="BACKGROUND: #d9d9d9; CO