﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Studyoo，Happyoo，Flyoo-文章分类-杂</title><link>http://www.blogjava.net/studyoo/category/28075.html</link><description>好好活，做有意义的事！</description><language>zh-cn</language><lastBuildDate>Wed, 19 Dec 2007 21:15:52 GMT</lastBuildDate><pubDate>Wed, 19 Dec 2007 21:15:52 GMT</pubDate><ttl>60</ttl><item><title>Hibernate主键生成方式 Key Generator --zz</title><link>http://www.blogjava.net/studyoo/articles/168802.html</link><dc:creator>yoo</dc:creator><author>yoo</author><pubDate>Wed, 19 Dec 2007 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/studyoo/articles/168802.html</guid><wfw:comment>http://www.blogjava.net/studyoo/comments/168802.html</wfw:comment><comments>http://www.blogjava.net/studyoo/articles/168802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/studyoo/comments/commentRss/168802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/studyoo/services/trackbacks/168802.html</trackback:ping><description><![CDATA[<p><font face="Arial">Hibernate主键生成方式&nbsp; Key Generator<br />
主键产生器<br />
可选项说明：<br />
1) assigned<br />
主键由外部程序负责生成，无需Hibernate参与。</font></p>
<p><font face="Arial">2) hilo<br />
通过hi/lo 算法实现的主键生成机制，需要额外的数据库表保存主<br />
键生成历史状态。</font></p>
<p><font face="Arial">3) seqhilo<br />
与hilo 类似，通过hi/lo 算法实现的主键生成机制，只是主键历史<br />
状态保存在Sequence中，适用于支持Sequence的数据库，如Oracle。</font></p>
<p><font face="Arial">4) increment<br />
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持<br />
一个变量，以保存着当前的最大值，之后每次需要生成主键的时候<br />
将此值加1作为主键。<br />
这种方式可能产生的问题是：如果当前有多个实例访问同一个数据<br />
库，那么由于各个实例各自维护主键状态，不同实例可能生成同样<br />
的主键，从而造成主键重复异常。因此，如果同一数据库有多个实<br />
例访问，此方式必须避免使用。</font></p>
<p><font face="Arial">5) identity<br />
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL<br />
中的主键生成机制。</font></p>
<p><font face="Arial">6) sequence<br />
采用数据库提供的sequence 机制生成主键。如Oralce 中的<br />
Sequence。</font></p>
<p><font face="Arial">7) native<br />
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence<br />
其中一种作为主键生成方式。</font></p>
<p><font face="Arial">8) uuid.hex<br />
由Hibernate基于128 位唯一值产生算法生成16 进制数值（编码后<br />
以长度32 的字符串表示）作为主键。</font></p>
<p><font face="Arial">9) uuid.string<br />
与uuid.hex 类似，只是生成的主键未进行编码（长度16）。在某些<br />
数据库中可能出现问题（如PostgreSQL）。</font></p>
<p><font face="Arial">10) foreign<br />
使用外部表的字段作为主键。<br />
一般而言，利用uuid.hex方式生成主键将提供最好的性能和数据库平台适<br />
应性。</font></p>
<p><font face="Arial">另外由于常用的数据库，如Oracle、DB2、SQLServer、MySql 等，都提<br />
供了易用的主键生成机制（Auto-Increase 字段或者Sequence）。我们可以在数<br />
据库提供的主键生成机制上，采用generator-class=native的主键生成方式。<br />
不过值得注意的是，一些数据库提供的主键生成机制在效率上未必最佳，<br />
大量并发insert数据时可能会引起表之间的互锁。<br />
数据库提供的主键生成机制，往往是通过在一个内部表中保存当前主键状<br />
态（如对于自增型主键而言，此内部表中就维护着当前的最大值和递增量），<br />
之后每次插入数据会读取这个最大值，然后加上递增量作为新记录的主键，之<br />
后再把这个新的最大值更新回内部表中，这样，一次Insert操作可能导致数据<br />
库内部多次表读写操作，同时伴随的还有数据的加锁解锁操作，这对性能产生<br />
了较大影响。<br />
因此，对于并发Insert要求较高的系统，推荐采用uuid.hex 作为主键生成<br />
机制。 </font></p>
<img src ="http://www.blogjava.net/studyoo/aggbug/168802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/studyoo/" target="_blank">yoo</a> 2007-12-19 17:02 <a href="http://www.blogjava.net/studyoo/articles/168802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员该做的事-转载</title><link>http://www.blogjava.net/studyoo/articles/167410.html</link><dc:creator>yoo</dc:creator><author>yoo</author><pubDate>Thu, 13 Dec 2007 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/studyoo/articles/167410.html</guid><wfw:comment>http://www.blogjava.net/studyoo/comments/167410.html</wfw:comment><comments>http://www.blogjava.net/studyoo/articles/167410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/studyoo/comments/commentRss/167410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/studyoo/services/trackbacks/167410.html</trackback:ping><description><![CDATA[<font color="#000000" face="arial,sans-serif">程序员每天该做的事&nbsp;<br />
1、总结自己一天任务的完成情况&nbsp;<br />
最好的方式是写工作日志，把自己今天完成了什么事情，遇见了什么问题都记录下来，日后翻看好处多多&nbsp;<br />
<br />
2、考虑自己明天应该做的主要工作&nbsp;<br />
把明天要做的事情列出来，并按照优先级排列，第二天应该把自己效率最高的时间分配给最重要的工作&nbsp;<br />
<br />
3、考虑自己一天工作中失误的地方，并想出避免下一次再犯的方法&nbsp;<br />
出错不要紧，最重要的是不要重复犯相同的错误，那是愚蠢&nbsp;<br />
<br />
4、考虑自己一天工作完成的质量和效率能否还能提高&nbsp;<br />
一天只提高1%，365天你的效率就能提高多少倍你知道吗？&nbsp;(1+0.01)^365&nbsp;=&nbsp;37&nbsp;倍&nbsp;<br />
<br />
5、看一个有用的新闻网站或读一张有用的报纸，了解业界动态&nbsp;<br />
闭门造车是不行的，了解一下别人都在做什么，对自己能带来很多启示&nbsp;<br />
<br />
6、记住一位同事的名字及其特点&nbsp;<br />
你认识公司的所有同事吗？你了解他们吗？&nbsp;<br />
<br />
7、清理自己的代码&nbsp;<br />
今天完成的代码，把中间的调试信息，测试代码清理掉，按照编码风格整理好，注释都写好了吗？&nbsp;<br />
<br />
8、清理自己的桌面&nbsp;<br />
当日事当日毕，保持清洁干劲的桌面才能让你工作时不分心，程序员特别要把电脑的桌面清理干净&nbsp;<br />
<br />
程序员每周该做的事&nbsp;<br />
1、向你的老板汇报一次工作&nbsp;<br />
让你的老板知道你在做什么，这很重要。可以口头、书面、邮件，看你老板的工作方式而定&nbsp;<br />
<br />
2、进行一次自我总结（非正式）&nbsp;<br />
这周之内自己表现得怎么样？该加分还是扣分？&nbsp;<br />
<br />
3、制定下周计划&nbsp;<br />
把下周要做的事情列出来，一样要分清楚优先级&nbsp;<br />
<br />
4、整理自己的文件夹、书柜和电脑文件&nbsp;<br />
把桌面以外的地方也要清理干净，电脑的文件夹，收到的邮件，把过时的垃圾全部清理掉&nbsp;<br />
<br />
5、与一个非公司的朋友沟通&nbsp;<br />
它山之石，可以攻玉&nbsp;<br />
<br />
6、看一本杂志&nbsp;<br />
找一本适合自己的专业杂志&nbsp;<br />
<br />
7、纠正自己或同事一个细节上的不正确做法&nbsp;<br />
《细节决定成败》看过了吗？没看过强烈建议先看看&nbsp;<br />
<br />
程序员每月该做的事&nbsp;<br />
1、至少和一个同事一起吃饭或喝茶&nbsp;<br />
不光了解自己工作伙伴的工作，还要了解他们的生活&nbsp;<br />
<br />
2、自我考核一次&nbsp;<br />
相对正式地考核自己一下，你对得起这个月的工资吗？&nbsp;<br />
<br />
3、对你的同事考核一次&nbsp;<br />
你的同事表现怎么样？哪些人值得学习，哪些人需要帮助？&nbsp;<br />
<br />
3、制定下月的计划，确定下月的工作重点&nbsp;<br />
<br />
4、总结自己工作质量改进状况&nbsp;<br />
自己的质量提高了多少？&nbsp;<br />
<br />
5、有针对性地对一项工作指标做深入地分析并得出改进的方案&nbsp;<br />
可以是对自己的，也可以是对公司的，一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话，做的成事，工作上功夫要做足。&nbsp;<br />
<br />
6、与老板沟通一次&nbsp;<br />
最好是面对面地沟通，好好表现一下自己，虚心听取老板的意见，更重要的是要了解老板当前关心的重点&nbsp;<br />
<br />
程序员每年该做的事&nbsp;<br />
1、年终总结&nbsp;<br />
每个公司都会做的事情，但你真正认真地总结过自己吗？&nbsp;<br />
<br />
2、兑现给自己、给家人的承诺&nbsp;<br />
给老婆、儿子的新年礼物买了没有？给自己的呢？&nbsp;<br />
<br />
3、下年度工作规划&nbsp;<br />
好好想想自己明年的发展目标，争取升职/加薪、跳槽还是自己出来干？&nbsp;<br />
<br />
4、掌握一项新技术&nbsp;<br />
至少是一项，作为程序员一年要是一项新技术都学不到手，那就一定会被淘汰。&nbsp;<br />
掌握可不是看本书就行的，要真正懂得应用，最好你能够写一篇教程发表到你的blog&nbsp;<br />
<br />
5、推出一种新产品&nbsp;<br />
可以是一个真正的产品，也可以只是一个类库，只要是你创造的东西就行，让别人使用它，也为世界作点贡献。当然如果真的很有价值，收点注册费也是应该的&nbsp;<br />
<br />
6、与父母团聚一次&nbsp;<br />
常回家看看，常回家看看 </font>
<img src ="http://www.blogjava.net/studyoo/aggbug/167410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/studyoo/" target="_blank">yoo</a> 2007-12-13 10:42 <a href="http://www.blogjava.net/studyoo/articles/167410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>专家传授面试10个小诀窍-转贴</title><link>http://www.blogjava.net/studyoo/articles/167409.html</link><dc:creator>yoo</dc:creator><author>yoo</author><pubDate>Thu, 13 Dec 2007 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/studyoo/articles/167409.html</guid><wfw:comment>http://www.blogjava.net/studyoo/comments/167409.html</wfw:comment><comments>http://www.blogjava.net/studyoo/articles/167409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/studyoo/comments/commentRss/167409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/studyoo/services/trackbacks/167409.html</trackback:ping><description><![CDATA[<font color="#000000" face="arial,sans-serif">      参加面试的求职者，就像见未来公婆的丑媳妇一样，难免有种惴惴的心理，只有那些极具信心者才可顺利过关。哥斯达黎加行为研究院的专家加洛。格拉近日在哥《今日报》上撰文，传授了面试者必须掌握的10个诀窍。&nbsp;<br />
<br />
格拉的文章说，对面试者来说，最重要的是做好充分准备和保持积极心态，此外还要注意以下细节问题：<br />
<br />
1、第一印象很重要。和主考官握手一定要有力，以说明你的自信和热情；要两眼平视主考官，注意和考官们目光交流，而不要环顾四周；<br />
<br />
2、面试时要集中注意力。对主考官提出的任何问题都不要忽略；<br />
<br />
3、少说话。要避免滔滔不绝、夸夸其谈的陈述，回答问题时要具体明了；<br />
<br />
4、准时抵达面试地点。准时到达说明你重诺守信；<br />
<br />
5、不要在面试中表现出你非常迫切地希望得到这份工作，但也不要表现出你对这份工作毫无兴趣；<br />
<br />
6、着装要得体；<br />
<br />
7、要注意礼貌，多使用&#8220;请&#8221;&#8220;谢谢&#8221;&#8220;非常荣幸&#8221;之类的话语；<br />
<br />
8、不要有过多的小动作。面试中任何一个不经意的小动作，如不停地摸头发、玩圆珠笔、不停地舔嘴唇等，都会让主考官对你的印象大打折扣，因为这些行为反映了面试者的紧张情绪；<br />
<br />
9、让主考官更好地认识你。向主考官简明扼要地介绍你的才能以及你打算怎样在工作岗位上发挥作用；<br />
<br />
10、在面试之前一定要仔细了解用人单位的特点和工作范畴。</font>
<img src ="http://www.blogjava.net/studyoo/aggbug/167409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/studyoo/" target="_blank">yoo</a> 2007-12-13 10:40 <a href="http://www.blogjava.net/studyoo/articles/167409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 编码规范推荐-转载</title><link>http://www.blogjava.net/studyoo/articles/167408.html</link><dc:creator>yoo</dc:creator><author>yoo</author><pubDate>Thu, 13 Dec 2007 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/studyoo/articles/167408.html</guid><wfw:comment>http://www.blogjava.net/studyoo/comments/167408.html</wfw:comment><comments>http://www.blogjava.net/studyoo/articles/167408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/studyoo/comments/commentRss/167408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/studyoo/services/trackbacks/167408.html</trackback:ping><description><![CDATA[<h1><br />
</h1>
<h1>SpringSide代码规范</h1>
<h2>前言</h2>
<p>&nbsp;&nbsp;&nbsp; 本文档反映的是SpringSide 团队的编码规范，同时推荐所有使用SpringSide框架的开发人员遵循。</p>
<p>&nbsp;&nbsp;&nbsp; 本文档基本遵循<a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html" title="Visit page outside Confluence" rel="nofollow">Sun's Coding Conventions<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>，补充了其中没有说明或者有所改动的地方。</p>
<h3>版权声明&nbsp;&nbsp;&nbsp;</h3>
<p>&nbsp;&nbsp;&nbsp; 本规范由<a href="http://www.springside.org.cn/team.php" title="Visit page outside Confluence" rel="nofollow">springside团队<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>维护，相关评论与意见请发至springside@gmail.com，转载请注明出处。</p>
<h3>规范等级说明</h3>
<ul>
    <li><font color="#000000">级别I:&nbsp;&nbsp; 默认级别，要求所有项目中的所有成员遵守。</font> </li>
    <li><font color="#cc6600">级别II: &nbsp;建议所有项目中的所有成员遵守。</font> </li>
    <li><font color="#3333ff">级别III: 鼓</font><font color="#3333ff">励各个项目根据实际情况执行。</font> </li>
</ul>
<h2>1.格式与命名规范(Formating and Naming Conventions)</h2>
<h3>1.1&nbsp;&nbsp;缩进</h3>
<p>&nbsp; 使用Tab缩进，而不是空格键--将缩进2，4，8字符的选择权留给阅读者。</p>
<h3>1.2 换行</h3>
<p>&nbsp;&nbsp; 每行120字符--因为已是1024*768的年代。</p>
<p>&nbsp; &nbsp;if,for,while语句只有单句时，如果该句可能引起阅读混淆，需要用" {"和"}"括起来，否则可以省略。</p>
<div>
<div>
<pre>//错误，需要使用花括号{}括起来<br />
if (condition)<br />
if(condition) doSomething();<br />
else<br />
doSomething();</pre>
</div>
</div>
<h3>1.3&nbsp;命名规则&nbsp;</h3>
<ul>
    <li>不允许使用汉语拼音命名&nbsp; </li>
    <li>遇到缩写如XML时，仅首字母大写，即loadXmlDocument()而不是loadXMLDocument() </li>
    <li>Package名必须全部小写，尽量使用单个单词 </li>
    <li>Interface名可以是一个名词或形容词(加上'able','ible', or 'er'后缀)，如Runnable，Accessible。<br />
    为了基于接口编程，不采用首字母为I或加上IF后缀的命名方式，如IBookDao,BookDaoIF。 </li>
    <li>页面部件名建议命名为：btnOK、lblName或okBtn、nameLbl。<font color="#cc6600">(II)</font><br />
    其中btn、lbl缩写代表按钮(Button)、标签(Label)。 </li>
    <li>局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外) </li>
</ul>
<h3>1.4 声明</h3>
<ul>
    <li>修饰符应该按照如下顺序排列：public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp。 </li>
    <li>类与接口的声明顺序(可用Eclipse的source-&gt;sort members功能自动排列):&nbsp;
    <ol>
        <li>静态成员变量 / Static Fields </li>
        <li>静态初始化块 / Static Initializers </li>
        <li>成员变量 / Fields </li>
        <li>初始化块 / Initializers </li>
        <li>构造器 / Constructors </li>
        <li>静态成员方法 / Static Methods </li>
        <li>成员方法 / Methods </li>
        <li>重载自Object的方法如toString(), hashCode() 和main方法 </li>
        <li>类型(内部类) / Types(Inner Classes) </li>
    </ol>
    </li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 同等的类型，按public, protected, private的顺序排列。</p>
<h2>2.注释规范(Document Convertions)</h2>
<h3>2.1 注释类型</h3>
<h4>2.1.1 JavaDoc注释</h4>
<p>&nbsp; 略。</p>
<h4>2.1.2 失效代码注释</h4>
<p>&nbsp; 由/*<strong>...*</strong>/界定，标准的C-Style的注释。专用于注释已失效的代码。</p>
<div>
<div>
<pre>/*<br />
&nbsp;* Comment out the code<br />
&nbsp;* String s = "hello";<br />
* System.out.println(s);<br />
&nbsp;*/</pre>
</div>
</div>
<h4>2.1.3 代码细节注释</h4>
<p>&nbsp; 由//界定，专用于注释代码细节，即使有多行注释也仍然使用//，以便与用/**/注释的失效代码分开</p>
<p>&nbsp; 除了私有变量外，不推荐使用行末注释。</p>
<div>
<div>
<pre>class MyClass {<br />
<br />
private int myField; // An end-line comment.<br />
<br />
public void myMethod {<br />
<br />
//a very very long<br />
//comment.<br />
if (condition1) {<br />
//condition1 comment<br />
...<br />
} else {<br />
//elses condition comment<br />
...<br />
}<br />
}<br />
}</pre>
</div>
</div>
<h3>2.2&nbsp;注释的格式</h3>
<ul>
    <li>注释中的第一个句子要以（英文）句号、问号或者感叹号结束。Javadoc生成工具会将注释中的第一个句子放在方法汇总表和索引中。 </li>
    <li>为了在JavaDoc和IDE中能快速链接跳转到相关联的类与方法，尽量多的使用@see xxx.MyClass，@see xx.MyClass#find(String)。 </li>
    <li>Class必须以@author 作者名声明作者，不需要声明@version与@date，由版本管理系统保留此信息。<font color="#cc6600">(II)</font> </li>
    <li>如果注释中有超过一个段落，用
    <p>分隔。<font color="#cc6600">(II)</font>
    </p>
    </li>
    <li>示例代码以包裹。<font color="#cc6600">(II)</font> </li>
    <li>标识(java keyword, class/method/field/argument名，Constants) 以包裹。<font color="#cc6600">(II)</font> </li>
    <li>标识在第一次出现时以{@linkxxx.Myclass}注解以便JavaDoc与IDE中可以链接。<font color="#cc6600">(II)</font> </li>
</ul>
<h3>2.3&nbsp;注释的内容</h3>
<h4>2.3.1 可精简的注释内容</h4>
<p>&nbsp;&nbsp;&nbsp; 注释中的每一个单词都要有其不可缺少的意义，注释里不写"@param name -名字"这样的废话。<br />
&nbsp;&nbsp;&nbsp; 如果该注释是废话，连同标签删掉它，而不是自动生成一堆空的标签，如空的@param name，空的@return。</p>
<h4>2.3.2 推荐的注释内容</h4>
<ul>
    <li>对于API函数如果存在契约，必须写明它的前置条件(precondition)，后置条件(postcondition)，及不变式(invariant)。<font color="#cc6600">(II)</font> </li>
    <li>对于调用复杂的API尽量提供代码示例。<font color="#cc6600">(II)</font> </li>
    <li>对于已知的Bug需要声明。<font color="#cc6600">(II)</font> </li>
    <li>在本函数中抛出的unchecked exception尽量用@throws说明。<font color="#cc6600">(II)</font> </li>
</ul>
<h4>2.3.3 Null规约</h4>
<p>&nbsp;&nbsp; 如果方法允许Null作为参数，或者允许返回值为Null，必须在JavaDoc中说明。<br />
&nbsp;&nbsp;&nbsp;如果没有说明，方法的调用者不允许使用Null作为参数，并认为返回值是Null Safe的。</p>
<div>
<div>
<pre>/**<br />
&nbsp;* 获取对象.<br />
&nbsp;*<br />
&nbsp;* @ return the object to found or null if not found.<br />
&nbsp;*/<br />
Object get(Integer id){<br />
...<br />
}</pre>
</div>
</div>
<h4>2.3.4 特殊代码注释</h4>
<ul>
    <li>代码质量不好但能正常运行，或者还没有实现的代码用//TODO: 或 //XXX:声明&nbsp; </li>
    <li>存在错误隐患的代码用//FIXME:声明 </li>
</ul>
<h2>3.编程规范(Programming Conventions)</h2>
<h3>3.1基本规范</h3>
<ol>
    <li>当面对不可知的调用者时，方法需要对输入参数进行校验，如不符合抛出IllegalArgumentException，建议使用Spring的Assert系列函数。&nbsp; </li>
    <li>隐藏工具类的构造器，确保只有static方法和变量的类不能被构造实例。 </li>
    <li>变量，参数和返回值定义尽量基于接口而不是具体实现类，如Map map = new HashMap(); </li>
    <li>代码中不能使用System.out.println()，e.printStackTrace()，必须使用logger打印信息。 </li>
</ol>
<h3>3.2 异常处理</h3>
<ol>
    <li>重新抛出的异常必须保留原来的异常，即throw new NewException("message", e); 而不能写成throw new NewException("message")。 </li>
    <li>在所有异常被捕获且没有重新抛出的地方必须写日志。&nbsp; </li>
    <li>如果属于正常异常的空异常处理块必须注释说明原因，否则不允许空的catch块。 </li>
    <li>框架尽量捕获低级异常，并封装成高级异常重新抛出，隐藏低级异常的细节。<font color="#3333ff">(III)</font> </li>
</ol>
<h3>3.3 代码度量</h3>
<h4>3.3.1 耦合度度量</h4>
<ul>
    <li>DAC度量值不要不大于7 <font color="#3333ff">( III )</font><br />
    解释：DAC(Data Abstraction Coupling)数据抽象耦合度是描述对象之间的耦合度的一种代码度量。DAC度量值表示一个类中有实例化的其它类的个数。 </li>
    <li>CFO度量值不要不大于20 <font color="#3333ff">( III )</font><br />
    解释：CFO(Class Fan Out)类扇出是描述类之间的耦合度的一种代码度量。CFO度量值表示一个类依赖的其他类的个数。 </li>
</ul>
<h4>3.3.2 方法度量</h4>
<ul>
    <li>方法（构造器）参数在5个以内 <font color="#cc6600">( II )</font><br />
    太多的方法（构造器）参数影响代码可读性。考虑用值对象代替这些参数或重新设计。 </li>
    <li>方法长度150行以内 <font color="#cc6600">( II )</font> </li>
    <li>CC&nbsp;度量值不大于10<font color="#3333ff">(III )</font><br />
    <font color="#000000">解释：CC(CyclomaticComplexity)圈复杂度指一个方法的独立路径的数量，可以用一个方法内if,while,do,for,catch,switch,case,?:语句与&amp;&amp;,||操作符的总个数来度量。</font> </li>
    <li>NPath度量值不大于200 <font color="#3333ff">( III )</font><br />
    解释：NPath度量值表示一个方法内可能的执行路径的条数。 </li>
</ul>
<h4>3.3.3 其他度量</h4>
<ul>
    <li>布尔表达式中的布尔运算符(&amp;&amp;,||)的个数不超过3个<font color="#3333ff">(III)</font>&nbsp; </li>
    <li>if语句的嵌套层数3层以内<font color="#cc6600">(II)</font> </li>
    <li>文件长度2000行以内<font color="#cc6600">(II)</font> </li>
    <li>匿名内部类20行以内 <font color="#cc6600">( II )</font><br />
    太长的匿名内部类影响代码可读性，建议重构为命名的（普通）内部类。 </li>
</ul>
<h3>3.4 JDK5.0</h3>
<ol>
    <li>重载方法必须使用@Override，可避免父类方法改变时导致重载函数失效。 </li>
    <li>不需要关心的warning信息用@SuppressWarnings("unused"), @SuppressWarnings("unchecked"), @SuppressWarnings("serial") 注释。 </li>
</ol>
<h2>4.自动代码检查</h2>
<p>&nbsp;&nbsp; 使用<a href="http://www.eclipse.org/" title="Visit page outside Confluence" rel="nofollow">Eclipse<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>与 <a href="http://www.jetbrains.com/" title="Visit page outside Confluence" rel="nofollow">Inellij IDEA<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>的代码校验功能已经排除了很多问题。</p>
<p>&nbsp;&nbsp; 再配合使用<a href="http://checkstyle.sf.net/" title="Visit page outside Confluence" rel="nofollow">Checkstyle<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>，<a href="http://pmd.sf.net/" title="Visit page outside Confluence" rel="nofollow">PMD<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>，<a href="http://findbugs.sf.net/" title="Visit page outside Confluence" rel="nofollow">FindBugs<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>三重检查，总共五层的校验涵盖了Java编码大部分的Guide Line。</p>
<p>&nbsp;&nbsp; 如果要求不苛刻，可以只使用Eclipse或IDEA 搭配 Checkstyle的两重保湿效果。</p>
<ol>
    <li><strong>Eclipse</strong>：在Windows-&gt;Preferences-&gt;Java-Compiler-&gt;Errors/Warnings中，按本文档将一些原来Ignore的规则打开。<br />
    也可以将springside团队预设在/tools/codereviewer/eclipse.check.prefs的内容拷贝到项目的.setting/org.eclipse.jdt.core.prefs 文件中。 </li>
    <li><strong>IDEA</strong>：在Setting-&gt;Errors中设定规则，调用Analyzer-&gt;Inspece Code进行校验。 </li>
    <li><strong>CheckStyle</strong>：安装<a href="http://eclipse-cs.sourceforge.net/" title="Visit page outside Confluence" rel="nofollow">CheckStyle的Eclipse插件<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>，在Windows-&gt;Preferences-&gt;CheckStyle导入springside团队预设在/tools/codereviewer/springside_check.xml的规则。 </li>
    <li><strong>PMD</strong>：安装<a href="http://pmd.sourceforge.net/eclipse/" title="Visit page outside Confluence" rel="nofollow">PMD的Eclipse插件<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>，Windows-&gt;Preferences-&gt;PMD清除原来所有规则，导入springside团队预设在/tools/codereviewer/springside_pmd.xml的规则。 </li>
    <li><strong>FindBugs</strong>：安装<a href="http://findbugs.sourceforge.net/manual/eclipse.html" title="Visit page outside Confluence" rel="nofollow">FindBugs的Eclipse插件<sup><img src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a>，在项目属性-&gt;FindBugs中，取消下列警告MS/EI/EI2/ ，&nbsp;SnVI/SE/WS/RS ，ST/NP/UwF/SS/UuF|UrF|SIC。</li>
</ol>
<br />
原文：http://wiki.springside.org.cn/display/springside/Coding+Standards<br />
<img src ="http://www.blogjava.net/studyoo/aggbug/167408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/studyoo/" target="_blank">yoo</a> 2007-12-13 10:37 <a href="http://www.blogjava.net/studyoo/articles/167408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>