﻿<?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-呆子的生活</title><link>http://www.blogjava.net/adaiye/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 05:32:54 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 05:32:54 GMT</pubDate><ttl>60</ttl><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记(3) 命名规范</title><link>http://www.blogjava.net/adaiye/archive/2007/10/11/151935.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 11 Oct 2007 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/10/11/151935.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/151935.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/10/11/151935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/151935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/151935.html</trackback:ping><description><![CDATA[<p>一组一致的的命名约定对框架的可用性及其重要。 名字要易于理解，同时必须传达每个元素的功能。</p> <h2>大小写约定</h2> <p>标识符的大小写规则</p> <p>PascalCasing：如HtmlTag&nbsp; IOStream</p> <p>camelCasing：如htmlTag&nbsp; ioStream</p> <ul> <li>要把PascalCasing用于由多个单词构成的名字空间、类型、以及成员的名字；  <li>要把camelCasing用于参数的名字。</li></ul> <h2>通用命名约定</h2> <h3><strong>单词的选择</strong></h3> <p>对框架中标识符的名字来说，很重要的一点是一目了然。</p> <p>名字的意思清楚比长度短更重要。名字应该与场景、系统的逻辑组成或物理组成以及为人熟知的概念相对应，而不应该与技术或框架相对应。</p> <ul> <li>要为标识符选择易于阅读的名字；  <li>要更看重可读性，而不是更看重简短性；  <li>不要使用下划线、连字符以及其他任何既非字母也非数字的字符；  <li>不要使用匈牙利命名法；  <li>避免使用与广泛使用的编程语言的关键字有冲突的标识符。</li></ul> <h3><strong>使用单词缩写和首字母缩写词</strong></h3> <p>一般来说，不要在标识符中使用单词缩写或首字母缩写：宁可名字长一点，也不要别人看不懂。&nbsp; 尤其不要使用未被广泛接受的单词缩写和首字母缩写词。</p> <ul> <li>不要使用缩写词或缩略词作为标识符名字的一部分<br>用GetWindow&nbsp; 不用GetWin  <li>不要使用未被广泛接受的首字母缩写词<br>多谓广泛接受：用搜索引擎在网上搜索该首字母缩写词，如果返回的前几个结果与期望相符，那么该首字母缩写词才有资格被称为众所周知。</li></ul> <h3><strong>避免使用语言特有的名字</strong></h3> <ul> <li>要给类型名使用语义上有意义的名字，而不要使用特有的关键字<br>GetLength比GetInt要好  <li>要使用CLR的通用类型名，而不要使用语言特有的别名  <li>要使用常见的名字，比如value或item，而不要重复类型的名字</li></ul> <h3><strong>为已有API的新版本命名</strong></h3> <p>当用新类型和新成员接替或取代已有的类型或成员时，如何选择名字：</p> <ul> <li>使用与旧API相似的名字  <li>要优先使用后缀而不是前缀来表示已有API的新版本<br>这样有助于在浏览文档或使用Intellisense时发现新版本：按字母排序  <li>可以考虑使用全新但有意义的标识符  <li>要使用数字后缀来表示已有API的新版本<br>有些名字（或工业标准）不宜添加后缀或改名  <li>不要在标识符中使用“Ex”“New”等类似的后缀来区分相同API的不同版本  <li>要在引入64位整数（long）而非32位整数进行操作的新版本API时使用“64”后缀，反之亦然。</li></ul> <h2>程序集和DLL的命名</h2> <p>程序集是一个部署单元，同时还代表托管代码程序的身份。虽然程序集可以分布一个或多个文件中，但一般来说一个程序集仅与一个DLL相对应。</p> <p>名字空间与DLL程序集的区别：</p> <blockquote> <p>名字空间：一组逻辑实体</p></blockquote> <blockquote> <p>DLL和程序集：打包和部署时的一个单</p></blockquote> <ul> <li>要为程序集和DLL选择提示性的名字，比如System.Data，这样很容易就知道它的大致功能。  <li>DLL命名：&lt;Company&gt;.&lt;Component&gt;.dll</li></ul> <h2>名字空间的命名</h2> <p>&lt;Company&gt;.(&lt;Product&gt;|&lt;Technology&gt;)[.&lt;Feature&gt;][.&lt;Subnamespace&gt;]</p> <ul> <li>要用公司名称作为名字空间的前缀，不要用缩写  <li>要用稳定的与版本无关的产品名称作为名字空间的第二层  <li>不要根据公司的组织架构来决定名字空间的层次结构，因为公司内部组织的名称一般来说不会持续太长的时间  <li>要使用PascalCasing大小写风格，并用点号来分隔名字空间的各部分。<br>如Microsoft.Office.PowerPoint  <li>考虑适当的时候在名字空间中使用复数形式。&nbsp; 首字母缩写词例外<br>System.Collections<br>System.IO  <li>不要用相同的名字来命名名字空间与位于该名字空间中的类型<br>如：不要将名字空间命名为Debug，然后又在该名字空间中提供一个名为Debug的类。</li></ul> <h3><strong>名字空间和类型冲突</strong></h3> <ul> <li>不要引入太一般化的类型名，比如Element、Node、Log以及Message。</li></ul> <p>不同类型的名字空间，有不同的规范来避免类型名的冲突：</p> <ul> <li>应用程序模型名字空间（application model namespace）<br>属于单个应用程序模型的名字空间经常一起使用，但是它们几乎不合属于其他应用程序模型的名字空间一起使用<br>System.Windows*<br>System.UI*  <li>基础设施名字空间（infrastructure namespace）<br>此类别包含一些在开发常用应用程序时很少会导入的名字空间  <li>核心名字空间（core namespace）<br>包含了所有的System名字空间，但应用程序模块名字空间和基础设施名字空间除外。&nbsp; 包括System、System.IO、System.Xml以及System.Net等等  <li>技术名字空间组（technology namespace group）<br>此类别包含所有那些以相同的两个前缀（&lt;Company&gt;.&lt;Technology&gt;*）开始的名字空间。</li></ul> <h2>类、结构和接口的命名</h2> <p>一般来说类型名应该是名词词组。如果无法为类型找到一个名词词组，那么应该重新考虑类型的总体设计。</p> <p>另一个中重要的考虑因素：最易于识别的名字应该用于最常用的类型。</p> <p>最常用的类型名应该反映出使用场景，而不是继承层次。</p> <ul> <li>要用名词词组来给类型命名。使用PascalCasing风格  <li>不要给类名加前缀<br>只有接口才能（可以）被加前缀“I”，那是因为.NET框架受到COM及Java的影响  <li>考虑让派生类的名字以其基类结尾<br>public class FileStream : Stream {...}  <li>要确保一对类/接口的名字只差一个“I”前缀，如果该类是该接口的标准实现。<br>public interface IComponent {...}<br>public class Component : IComponent {...}</li></ul> <h3><strong>泛型类型参数的命名</strong></h3> <ul> <li>要用描述性的名字来命名  <li>考虑用T来命名参数类型  <li>要给描述性的类型参数名加上T前缀  <li>考虑在类型参数中显示出施加于该类型参数上的限制</li></ul> <h3><strong>枚举类型的命名</strong></h3> <ul> <li>要用单数名词来命名枚举类型，除非它表示的是位域（bit field）  <li>不要给枚举类型的名字添加“Enum”后缀，也不要添加“Flag”、“Flags”等后缀  <li>不要给枚举类型值的名字添加前缀<br>此规范与C++中通常所使用的恰好相反。在C++中给枚举的每个成员加上完成的限定符是很重要的，因为它们可能在枚举名的作用域之外被访问。但是在托管代码中，枚举成员只能通过枚举名的作用域来访问。</li></ul> <h2>类型成员的命名</h2> <p>类型：方法、属性、事件、构造函数、字段</p> <h3><strong>方法的命名</strong></h3> <p>要尽量根据方法所对应的任务来给它们命名，而不要根据一些实现细节。</p> <ul> <li>要用动词或动词词组来命名方法</li></ul> <h3><strong>属性的命名</strong></h3> <ul> <li>要用名词、名词词组或形容词来命名属性  <li>不要让属性名看起来与“Get”方法的名字相似  <li>要用肯定性的短语（CanSeek而不是CantSeek）来命名布尔属性  <li>考虑用属性的类型名来命名属性<br>public enum Color {...}<br>public class Control<br>{<br>&nbsp;&nbsp;&nbsp; public Color Color<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get {...}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set {...}<br>&nbsp;&nbsp;&nbsp; }<br>}</li></ul> <h3><strong>事件的命名</strong></h3> <ul> <li>要用动词或动词短语来命名事件<br>事件总是表示一些动作，要么正在发生，要么已经发生  <li>要用现在时和过去时来赋予事件名之前和之后的概念<br>窗口关闭之前发生的close事件：Closing<br>窗口关闭之后发生的close时间：Closed  <li>不要用Before和After前缀或后缀来区分前置和后置事件  <li>要在命名事件处理函数（用作事件类型的委托）时加上“EventHandler”后缀  <li>要在事件处理函数中用sender和e作为两个参数的名字<br>sender：触发事件的对象，在整个.NET框架中，sender为object类型  <li>要在命名事件的参数类型时加上“EventArgs”后缀</li></ul> <h3><strong>字段的命名</strong></h3> <ul> <li>PascalCasing风格  <li>名词或名词短语  <li>不要给字段名添加前缀</li></ul> <h2>参数的命名</h2> <ul> <li>camelCasing风格  <li>要使用描述性的参数名<br>参数名要具备足够的描述性，使得在大多数情况下，用户根据参数的名字和类型就能够确定它的意思  <li>考虑根据参数的意思而不是参数的类型来命名参数</li></ul> <h2>资源的命名</h2> <p>本地化的资源就好比是属性，可以通过特定的对象来引用。因此，它的命名规范与属性的相似。</p> <ul> <li>要在命名属性关键字（resource key）时使用PascalCasing大小写风格  <li>要使标识符的名字具有描述性而不是使名字变短  <li>不要使用各主要CLR编程语言特有的关键字  <li>要在命名资源时使用字母、数字和下划线  <li>要用点号来给标识符清楚地划分层次  <li>要在为异常消息资源命名是遵循下面的命名约定：<br>资源标识符应该是异常的类型名加一个简短的异常标识符，之间以点号分隔</li></ul><img src ="http://www.blogjava.net/adaiye/aggbug/151935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-10-11 09:22 <a href="http://www.blogjava.net/adaiye/archive/2007/10/11/151935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于考SUN JAVA PROGRAMMER的几点建议</title><link>http://www.blogjava.net/adaiye/archive/2007/10/06/150735.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Sat, 06 Oct 2007 13:02:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/10/06/150735.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/150735.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/10/06/150735.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/150735.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/150735.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/10/06/150735.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/150735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-10-06 21:02 <a href="http://www.blogjava.net/adaiye/archive/2007/10/06/150735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Adobe Flex 3最有趣的特征之一 :Web设计者和开发者的相遇</title><link>http://www.blogjava.net/adaiye/archive/2007/09/21/147099.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Fri, 21 Sep 2007 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/21/147099.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/147099.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/21/147099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/147099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/147099.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/21/147099.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/147099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-21 14:26 <a href="http://www.blogjava.net/adaiye/archive/2007/09/21/147099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈C#之关键字（1）</title><link>http://www.blogjava.net/adaiye/archive/2007/09/20/146824.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 20 Sep 2007 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/20/146824.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/146824.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/20/146824.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/146824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/146824.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 每一种语言都有非常多的关键字，而且这些关键字也都大同小异，不过毕竟还是有些许的不一样。有些关键字大家碰到的多了，自然就熟悉了，但是有些关键字用得不大多，或者是新引入的，所以就不大熟悉了。我平常在用的时候，就是会碰到一些关键字，感觉有点生疏，平常也会把这些我不懂的关键字的用法了解一下并记录下来。想到应该也有很多跟我同样的人，所以就把我的记录跟大家分享一下。请各位tx多多指正！<br><strong>访问关键字</strong><br>&nbsp;&nbsp;&nbsp; base：用于派生类中访问基类的成员  <ul> <li>调用基类上已被其他方法重写的方法  <p>1 public override void&nbsp;GetInfo()<br>2 {<br>3 base.GetInfo();&nbsp;//&nbsp;调用基类上的GetInfo方法<br>4 }</p> <li>指定创建派生类实例时应用的基类构造函数  <p>1 public&nbsp;MyDerived()&nbsp;:&nbsp;base()&nbsp;//&nbsp;调用基类的构造函数<br>2 {<img alt="" src="http://www.cnblogs.com/Images/dot.gif">}</p></li></ul>&nbsp;&nbsp;&nbsp; 从静态方法中使用base关键字是错误的。<br><strong>转换关键字<br></strong>explicit：用于声明用户定义的显式类型转换运算符  <p>1 class&nbsp;MyType<br>2 {<br>3 public static explicit operator&nbsp;MyType(int&nbsp;i)<br>4 &nbsp;&nbsp;&nbsp;&nbsp;{<br>5 //&nbsp;从int转换到MyType类型的代码<br>6 &nbsp;&nbsp;&nbsp;&nbsp;}<br>7 }  <p><strong></strong>显式转换运算符必须通过类型转换调用  <p>1 int&nbsp;i;<br>2 MyType&nbsp;x&nbsp;=&nbsp;(MyType)i;&nbsp;//&nbsp;int到MyType类型的转换需要进行类型转换  <p>&nbsp;&nbsp;&nbsp; 如果转换操作可能导致异常或信息丢失，则应用explicit关键字标记它。<br>&nbsp;&nbsp;&nbsp; implicit：用于声明用户定义的隐式转换运算符&nbsp;  <p>1 class&nbsp;MyType<br>2 {<br>3 public static implicit operator int(MyType&nbsp;m)<br>4 &nbsp;&nbsp;&nbsp;&nbsp;{<br>5 //&nbsp;从MyType转换到int类型的代码<br>6 &nbsp;&nbsp;&nbsp;&nbsp;}<br>7 }  <p>1 MyType&nbsp;x;<br>2 int&nbsp;i&nbsp;=&nbsp;x;&nbsp;&nbsp;//&nbsp;隐式地调用MyType的MyType到int类型的转换运算符  <p><strong></strong>隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。<br>&nbsp;&nbsp;&nbsp; 一般情况下，调用某一个隐式转换时，应当绝不会引发异常，并且不会造成信息丢失。否则，应将其标记为explicit。<br><strong>方法参数关键字</strong><br>&nbsp;&nbsp;&nbsp; 如果声明方法的参数时没有指明ref或out，该参数将具有与该方法相关的值。这个值在方法中能被更改，但是当程序返回到调用过程时，这种改动不会被保留。<br><strong><br></strong>&nbsp;&nbsp;&nbsp; params：用于指定在参数数目可变时带有参数的方法参数<br>&nbsp;&nbsp;&nbsp; 在方法声明中的params关键字之后不允许引入任何其他参数，但在其前面可以有其他参数。而且在方法声明中只允许使用一个params关键字。  <p>&nbsp;1 public static void&nbsp;UseParams(params int[]&nbsp;list)<br>&nbsp;2 {<br>&nbsp;3 for(int&nbsp;i&nbsp;= 0;&nbsp;i&nbsp;&lt;&nbsp;list.Length;&nbsp;i++)<br>&nbsp;4 &nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(list[i]);<br>&nbsp;6 &nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;7 }<br>&nbsp;8<br>&nbsp;9 public static void&nbsp;Main()<br>10 {<br>11 &nbsp;&nbsp;&nbsp;&nbsp;UseParams（1,2,3）;<br>12 int[]&nbsp;myArray&nbsp;= new int[3]&nbsp;{&nbsp;10,11,12&nbsp;};<br>13 &nbsp;&nbsp;&nbsp;&nbsp;UseParams(myArray);<br>14 }  <p>&nbsp;&nbsp;&nbsp; ref、out&nbsp; 使方法可以引用传递到该方法的那一个变量，当程序转至调用方法时，在方法中对参数所做的任何改动都将传给该变量。<br>&nbsp;&nbsp;&nbsp; ref参数的值将被传递到ref参数，故必须首先初始化；而out参数不然，它的值不会被传递到该out参数，故不必首先初始化，但它必须在方法返回以前为out参数赋值。<br>&nbsp;&nbsp;&nbsp; 属性不是变量，不能作为ref/out参数。</p><img src ="http://www.blogjava.net/adaiye/aggbug/146824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-20 17:11 <a href="http://www.blogjava.net/adaiye/archive/2007/09/20/146824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大四啦！</title><link>http://www.blogjava.net/adaiye/archive/2007/09/10/144093.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Mon, 10 Sep 2007 13:16:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/10/144093.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/144093.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/10/144093.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/144093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/144093.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/10/144093.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/144093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-10 21:16 <a href="http://www.blogjava.net/adaiye/archive/2007/09/10/144093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>人生轨迹的改变，首要在于思维方式的改变。－－转贴 CSDN.NET公司内部论坛：迈向成功的“脑力操” </title><link>http://www.blogjava.net/adaiye/archive/2007/09/09/143826.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Sun, 09 Sep 2007 11:26:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/09/143826.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/143826.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/09/143826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/143826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/143826.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/09/143826.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/143826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-09 19:26 <a href="http://www.blogjava.net/adaiye/archive/2007/09/09/143826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.5）框架设计基础</title><link>http://www.blogjava.net/adaiye/archive/2007/09/06/143159.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 06 Sep 2007 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/06/143159.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/143159.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/06/143159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/143159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/143159.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 框架设计的基本原则：<br><br>    对用户而言，真正的开发效率来自能够轻易地创造非凡的产品，而并非来自能够轻易地创造垃圾。<br><br>   1. 场景驱动设计原则<br>   2. 低门栏原则<br>   3. 自说明对象原则<br>   4. 分层架构原则&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/06/143159.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/143159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-06 14:07 <a href="http://www.blogjava.net/adaiye/archive/2007/09/06/143159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java编程实战篇：设计自己的Annotation </title><link>http://www.blogjava.net/adaiye/archive/2007/09/06/143063.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Thu, 06 Sep 2007 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/06/143063.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/143063.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/06/143063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/143063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/143063.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java编程实战篇：设计自己的Annotation &nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/06/143063.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/143063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-06 09:39 <a href="http://www.blogjava.net/adaiye/archive/2007/09/06/143063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.4）分层架构原则</title><link>http://www.blogjava.net/adaiye/archive/2007/09/05/142941.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 05 Sep 2007 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/05/142941.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/142941.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/05/142941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/142941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/142941.html</trackback:ping><description><![CDATA[<p>分层设计使得在单个框架中同时提供强大的功能和易用性成为可能。</p> <ul> <li>考虑对框架进行分层，使高层API能提供最佳的开发效率，低层API能提供最强大的功能和最丰富的表现力。<br>通俗地讲，象我这样的菜鸟只能用高层API，太低层都不懂，而牛人们都是想用也更愿意用低层API的强大功能的（个人意见）。ps：这边的高层跟低层不是指高深的意思。而是从易用性方面考虑的！  <li>避免把低层API和高层API混在同一名字空间中，如果低层API非常复杂的话（即包含了许多类型）。  <li>要确保单个特性域中不同的层能很好的集成在一起。</li></ul><img src ="http://www.blogjava.net/adaiye/aggbug/142941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-05 16:54 <a href="http://www.blogjava.net/adaiye/archive/2007/09/05/142941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ListView 日期,数字,字符排序</title><link>http://www.blogjava.net/adaiye/archive/2007/09/05/142929.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 05 Sep 2007 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/05/142929.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/142929.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/05/142929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/142929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/142929.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ListView 日期,数字,字符排序&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/05/142929.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/142929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-05 16:34 <a href="http://www.blogjava.net/adaiye/archive/2007/09/05/142929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.3）自说明对象原则</title><link>http://www.blogjava.net/adaiye/archive/2007/09/05/142869.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 05 Sep 2007 05:11:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/05/142869.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/142869.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/05/142869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/142869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/142869.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在简单的使用场景中，一定要让框架无需文档就能使用。<br><br>    * 要确保API是直观的，无需查阅参考文档就能用于基本场景<br>      你总不希望写个“Hello World”都去查阅API文档吧。<br>    * 要为所有的API提供优秀的文档。<br>      一方面，并非所有的API都能自说明。不同的人会认为不同的API是自说明的；<br>      另一方面，有些人想在开始使用API之前完全理解它们。&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/05/142869.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/142869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-05 13:11 <a href="http://www.blogjava.net/adaiye/archive/2007/09/05/142869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做礼拜</title><link>http://www.blogjava.net/adaiye/archive/2007/09/03/142242.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Mon, 03 Sep 2007 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/03/142242.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/142242.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/03/142242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/142242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/142242.html</trackback:ping><description><![CDATA[<p>又是一周过去了，星期一又来了！早上，在公司里偷个空，写点东东：</p> <p>昨天是星期日：基督徒做礼拜的日子！</p> <p>自从呆子去年去了英国，也有一年多没见到她了。昨天我们越好见面的，还有冲哥和晓丹！昨天也是她要做礼拜的日子：她在英国受洗了！我以前也从来没有见识过基督教做礼拜的场景，所以跟呆子说，也想看看。我到富阳的时候他们的仪式已经开始了，我到的时候，上面是长老在做报告类似的，因为讲得是富阳话，我不大听得懂；不过这个很快也就结束了（大概是在我来之前已经讲了很久了:-P）。然后，他们就开始唱圣歌，唱了很多，我个人感觉那个旋律还不错，也很容易上口，也跟着唱了几首。圣歌中都是些赞颂耶稣，赞颂主的，也有一些是说希望主不要摒弃他们的，还有就是希望主收留他们。呆子，一直都在非常虔诚的唱，而且每次低头祷告的时候都非常虔诚（我作为外人，自然体会不到其中的滋味）。唱完圣歌，过后是讲了一段圣经上的内容，我们四个人，除了呆子，其他的都没有认真的在听，所以也不知道具体地讲了些什么。不过我听到一个故事印象非常深刻：有一对夫妻，妻子是基督徒。故事就讲到那个丈夫，如果打他妻子，她绝对不会还手，而且还是笑脸相迎！ 这个也许就是常说的那个故事：如果有人打你左脸，你要把右脸让他打！这个礼拜好像还有圣餐，不过呆子说我们没有受洗过，不能接受的！</p> <p>后来，也跟呆子聊了很多。也大致了解了基督教的一些东西。她也说她自己变了很多，在英国最重要的事就是找到了自己的主。在我看来她在英国最重要的的确是找到了自己的主，找到了自己一生的寄托。</p> <p>我从来不会觉得因为有宗教信仰，呆子就是另类了。在我看来呆子还是呆子，唯独变的只是她找到了一个可以倾诉的对象！</p><img src ="http://www.blogjava.net/adaiye/aggbug/142242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-03 11:39 <a href="http://www.blogjava.net/adaiye/archive/2007/09/03/142242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2.2）低门栏原则</title><link>http://www.blogjava.net/adaiye/archive/2007/09/03/142204.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Mon, 03 Sep 2007 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/03/142204.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/142204.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/03/142204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/142204.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/142204.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 框架必须以易于使用的方式来为普通用户提供一个低门栏。&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/03/142204.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/142204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-03 10:03 <a href="http://www.blogjava.net/adaiye/archive/2007/09/03/142204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java程序员需要了解的几个开源协议</title><link>http://www.blogjava.net/adaiye/archive/2007/09/02/142137.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Sun, 02 Sep 2007 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/09/02/142137.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/142137.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/09/02/142137.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/142137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/142137.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java程序员需要了解的几个开源协议&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/09/02/142137.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/142137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-09-02 21:48 <a href="http://www.blogjava.net/adaiye/archive/2007/09/02/142137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>连接数据库和相关数据库操作——之我的方法 利用OLEDB</title><link>http://www.blogjava.net/adaiye/archive/2007/08/31/141689.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Fri, 31 Aug 2007 04:25:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/08/31/141689.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/141689.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/08/31/141689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/141689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/141689.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 数据库连接与操作！&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/08/31/141689.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/141689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-08-31 12:25 <a href="http://www.blogjava.net/adaiye/archive/2007/08/31/141689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一位软件工程师的6年总结（转）</title><link>http://www.blogjava.net/adaiye/archive/2007/08/31/141677.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Fri, 31 Aug 2007 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/08/31/141677.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/141677.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/08/31/141677.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/141677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/141677.html</trackback:ping><description><![CDATA[一位软件工程师的6年总结 <br />
<br />
作者：成晓旭 <br />
&nbsp;<br />
<br />
&#8220;又
是一年毕业时&#8221;，看到一批批学子离开人生的象牙塔，走上各自的工作岗位；想想自己也曾经意气风发、踌躇满志，不觉感叹万千&#8230;&#8230;本文是自己工作6年的经历沉
淀或者经验提炼，希望对所有的软件工程师们有所帮助，早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议，前
面几点旨在确定大的方向，算是废话吧。 <br />
<br />
谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员：PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。 <br />
<br />
1、
分享第一条经验：&#8220;学历代表过去、能力代表现在、学习力代表未来。&#8221;其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道
理有些体会吧。但我相信这一点也很重要：&#8220;重要的道理明白太晚将抱憾终生！&#8221;所以放在每一条，让刚刚毕业的朋友们早点看到哈！ <br />
<br />
2、
一定要确定自己的发展方向，并为此目的制定可行的计划。不要说什么，&#8220;我刚毕业，还不知道将来可能做什么？&#8221;，&#8220;跟着感觉走，先做做看&#8221;。因为，这样的观
点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术，将来成为专家级人物？向管理方向走，成为职业经理人？先熟悉行业和领域，将来自立门
户？还是先在行业里面混混，过几年转行做点别的？这很重要，它将决定你近几年、十年内&#8220;做什么事情才是在做正确的事情！&#8221;。 <br />
<br />
3、
软件开发团队中，技术不是万能的，但没有技术是万万不能的！在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软
件项目团队中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基
础。算我孤陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个&#8220;高学历的
牛人&#8221;(非技术型)带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句&#8220;再也受不了啦！&#8221;四分五裂、各奔东西。那个项目的&#8220;成功度&#8221;大家可想
而知了。 <br />
<br />
4、
详细制定自己软件开发专业知识学习计划，并注意及时修正和调整(软件开发技术变化实在太快)。请牢记：&#8220;如果一个软件开发人员在1、2年内都没有更新过自
己的知识，那么，其实他已经不再属于这个行业了。&#8221;不要告诉自己没有时间。来自时间管理领域的著名的&#8220;三八原则&#8221;告诫我们：另外的那8小时如何使用将决定
你的人生成败！本人自毕业以来，平均每天实际学习时间超过2小时。 <br />
<br />
5、
书籍是人类进步的阶梯，对软件开发人员尤其如此。书籍是学习知识的最有效途径，不要过多地指望在工作中能遇到&#8220;世外高人&#8221;，并不厌其烦地教你。对于花钱买
书，我个人经验是：千万别买国内那帮人出的书！我买的那些家伙出的书，!00%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖
掉。&#8220;拥有书籍并不表示拥有知识；拥有知识并不表示拥有技能；拥有技能并不表示拥有文化；拥有文化并不表示拥有智慧。&#8221;只有将书本变成的自己智慧，才算是
真正拥有了它。 <br />
<br />
6、
不要仅局限于对某项技术的表面使用上，哪怕你只是偶尔用一、二次。&#8220;对任何事物不究就里&#8221;是任何行业的工程师所不应该具备的素质。开发Windows应用
程序，看看Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序；用VC＋＋、
Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码；除了会用J2EE、
JBoss、Spring、Hibernate等等优秀的开源产品或者框架，抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。
试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你&#8220;知其然且知其所以然&#8221;！ <br />
&nbsp;<br />
7、
在一种语言上编程，但别为其束缚了思想。&#8220;代码大全&#8221;中说：&#8220;深入一门语言编程，不要浮于表面&#8221;。深入一门语言开发还远远不足，任何编程语言的存在都有其
自身的理由，所以也没有哪门语言是&#8220;包治百病&#8221;的&#8220;灵丹妙药&#8221;。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是：用
面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式？用传统的桌面开发工具(目前主要有VC++、Delphi)进行系
统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源
框架？在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式？为什么一切都必须以个
人、团队在当然开发语言上的传统或者经验来解决问题？？？&#8220;他山之石、可以攻玉&#8221;。 <br />
<br />
8、
养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知，对软件开发人员
而言，有、无经验的一个显著区别是：无经验者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题（其实这个结论不应该被
局限在软件开发领域、可以延伸到很多方面）。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识
库中。但是，最好还是自己实现，这样没有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。 <br />
<br />
9、
理论与实践并重，内外双修。工程师的内涵是：以工程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思
想精髓的人（个人观点、欢迎探讨）。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度
来看，这只是外在的东西，并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思
想来解决具体的软件产品研发问题，才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想
与方式，最终形成自己的理论体系和实用方法论。 <br />
<br />
10、心态有多开放，视野就有多开阔。不要抱着自己的技术和成果，等到它们都已经过时
变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机
会。想想自己2000年间开发的那些Windows系统工具，5、6年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但
进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思想，尽可能地与人交流与分享，或者传授给开发团队的成员。&#8220;与人交换苹果之后，每个人还
是只有一个苹果；但交换思想之后，每个人都拥有两种思想&#8221;，道理大家都懂，但有多少人真正能做到呢？ <br />
<br />
11、尽量参加开源项目的开发、
或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。网络早已不再只是&#8220;虚拟世界&#8221;，网上有很多的开源项目、合作开发项目、外包项目，这都是
涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一
样。如果当他别人拿着合同找你合作，你却这也不会，那也不熟时，你将后悔莫及。 <br />
<br />
12、书到用时方恨少，不要将自己的知识面仅仅局限于
技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明：
&#8220;对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。&#8221;教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。
可见，掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等
知识，有空花时间看看，韬光养晦、未雨绸缪。 <br />
<br />
13、本文的总结与反思： <br />
<br />
A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。 <br />
<br />
B：提高软件知识和技术只是问题的表面，本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。 <br />
<br />
C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。<a href="http://www.blogjava.net/adaiye/"></a><a href="http://www.blogjava.net/adaiye/">adaiye</a>
<img src ="http://www.blogjava.net/adaiye/aggbug/141677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-08-31 11:51 <a href="http://www.blogjava.net/adaiye/archive/2007/08/31/141677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》&amp;mdash;&amp;mdash;学习笔记（2）框架设计的基本原则</title><link>http://www.blogjava.net/adaiye/archive/2007/08/29/141014.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Wed, 29 Aug 2007 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/08/29/141014.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/141014.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/08/29/141014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/141014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/141014.html</trackback:ping><description><![CDATA[<p>由于我怕文章的篇幅过长会使人看了头痛，所以，我打算分几篇文章把《.NET设计规范》第二章的学习笔记写出来，这样大家看着不至于太累！大概是接下去总共五篇文章是说“框架设计基础”的......</p> <p>&nbsp;</p> <p> <script type="text/javascript"><!--
google_ad_client = "pub-2823374497557651";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
//2007-08-27: FileMid
google_ad_channel = "0152175912";
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> </p> <h3><strong>对</strong>用户而言，真正的开发效率来自能够轻易地创造出非凡的产品，而并非来自能够轻易地创造垃圾。</h3> <h2><strong><font color="#0000ff">场景驱动设计的原则</font></strong></h2> <p>框架通常包含非常大的一组API。但在开发过程中，真正用到的只是其中较小的一个子集，只会涉及一小部分常用场景。</p> <p>在设计框架时，使用场景来驱动。从用户的角度，先自己编写一些对主要场景来说必不可少的代码，然后再设计对象模型（object model）来支持这些样例代码。</p> <p>于功能性规范之前，先撰写一份场景驱动的API规范，应该列出一个给定的技术领域中最常用的5—10个使用场景，并列出实现这些场景的样例代码，至少用两种语言编写。</p> <ul> <li>要确保对任何包含公用API的特性设计来说，其核心部分都是API设计规范。</li> <li>要为每个主要的特性域（feature area）定义一些最常用的场景。</li> <li>要确保使用场景与适当的抽象层次相对应。场景应该大致与最终用户的用例相对应。</li> <li>先为主要的使用场景编写样例代码，然后再定义对象模型来支持这些样例代码。</li> <li>要用至少两种不同的编程语言来为主要场景编写样例代码。<br>最好能保证所选编程语言的语法和风格差异很大。</li> <li>不要在设计框架的公用API时完全依赖于标准的设计方法。<br>标准的设计方法（包括面向对象的方法）是为了使设计的具体实现容易维护，而不是为了使得到的API易于使用。<br>以场景驱动设计为主，辅以原型制作、可用性研究以及一定数量的迭代，这种方法要比标准的设计方法好得多。<br>可用性研究是为了确定开发人员真正的需求。这跟需求获取一样，设计师此时化身为一名需求分析师，而开发人员则变成了客户。需求分析师不能想当然的认为客户的真正需求是什么，一定要通过跟客户交流才行，站在客户的角度考虑问题。跟需求获取类似，可用性研究宜早不宜迟。</li> <li>要安排可用性研究来测试用于主要场景的API。<br>如果开发人员在为主要场景编写代码时，遇到较大问题，则说明API需要重新设计。在原有API的基础上修改，开销反而大，而且是很大。</li></ul><img src ="http://www.blogjava.net/adaiye/aggbug/141014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-08-29 17:34 <a href="http://www.blogjava.net/adaiye/archive/2007/08/29/141014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《.NET设计规范》——学习笔记（1）</title><link>http://www.blogjava.net/adaiye/archive/2007/08/28/140588.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Tue, 28 Aug 2007 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/08/28/140588.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/140588.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/08/28/140588.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/140588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/140588.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如果框架的设计者能够站在使用者背后解释应该如何使用框架，那么就不需要同规范了。&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/08/28/140588.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/140588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-08-28 16:56 <a href="http://www.blogjava.net/adaiye/archive/2007/08/28/140588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java垃圾收集算法(转)</title><link>http://www.blogjava.net/adaiye/archive/2007/08/27/140121.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Mon, 27 Aug 2007 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/08/27/140121.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/140121.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/08/27/140121.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/140121.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/140121.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java垃圾回收机制算法！&nbsp;&nbsp;<a href='http://www.blogjava.net/adaiye/archive/2007/08/27/140121.html'>阅读全文</a><img src ="http://www.blogjava.net/adaiye/aggbug/140121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-08-27 20:35 <a href="http://www.blogjava.net/adaiye/archive/2007/08/27/140121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口和抽象类的定义方式举例说明(转)</title><link>http://www.blogjava.net/adaiye/archive/2007/08/26/139652.html</link><dc:creator>adaiye</dc:creator><author>adaiye</author><pubDate>Sun, 26 Aug 2007 14:59:00 GMT</pubDate><guid>http://www.blogjava.net/adaiye/archive/2007/08/26/139652.html</guid><wfw:comment>http://www.blogjava.net/adaiye/comments/139652.html</wfw:comment><comments>http://www.blogjava.net/adaiye/archive/2007/08/26/139652.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/adaiye/comments/commentRss/139652.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/adaiye/services/trackbacks/139652.html</trackback:ping><description><![CDATA[<p>本位转自中国IT实验室</p>
<p>原文地址：<a href="http://java.chinaitlab.com/oop/535440.html" target="_blank"><font color="#0000ff">接口和抽象类的定义方式举例说明</font></a></p>
<p> <script type="text/javascript"><!--
google_ad_client = "pub-2823374497557651";
google_ad_width =" 336;
google_ad_height" = 280;
google_ad_format =" "336x280_as";
google_ad_type" = "text_image";
//2007-08-26: youhua
google_ad_channel =" "1405522066";
google_color_border" = "ffffff";
google_color_bg =" "ffffff";
google_color_link" = "000000";
google_color_text =" "000000";
google_color_url" = "008000";
//-->
</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script> </p>
<p><strong>接口定义</strong><br>关于java的接口定义方式，以下三种情况下可以采用接口定义方式：<br>1.&nbsp;&nbsp;&nbsp;&nbsp;接口中声明的变量全部为final&nbsp;和static类型的，并且这个接口的作用在于定义一些值不能改变的变量。<br>举个例子：<br>public&nbsp;interface&nbsp;ObjectConstants{<br>public&nbsp;static&nbsp;final&nbsp;String&nbsp;SPACE&nbsp;=&nbsp;new&nbsp;String("&nbsp;");<br>public&nbsp;static&nbsp;final&nbsp;char&nbsp;FORMFEED&nbsp;=&nbsp;'\f';<br>}<br>2.&nbsp;&nbsp;&nbsp;&nbsp;接口中只定义可供实现的抽象方法<br>EventListener.java<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;interface&nbsp;EventListener&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;handleEvent(Event&nbsp;evt);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>Runnable.java<br>package&nbsp;java.lang;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;interface&nbsp;Runnable&nbsp;{&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;void&nbsp;run();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>3.&nbsp;&nbsp;&nbsp;&nbsp;还有一种方式是上述两种方式的组合，如非必要一般会将这样一个接口定义拆分成两个接口定义<br><strong>抽象类的定义</strong><br>1.&nbsp;&nbsp;&nbsp;&nbsp;如果一个类包含一个接口但是不完全实现接口定义的方法，那么该类必须定义成abstract型<br>例如InputStream.java类的定义方式：<br>package&nbsp;java.io;<br>public&nbsp;abstract&nbsp;class&nbsp;InputStream&nbsp;implements&nbsp;Closeable&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;SKIP_BUFFER_SIZE&nbsp;is&nbsp;used&nbsp;to&nbsp;determine&nbsp;the&nbsp;size&nbsp;of&nbsp;skipBuffer<br>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;int&nbsp;SKIP_BUFFER_SIZE&nbsp;=&nbsp;2048;<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;skipBuffer&nbsp;is&nbsp;initialized&nbsp;in&nbsp;skip(long),&nbsp;if&nbsp;needed.<br>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;byte[]&nbsp;skipBuffer;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;int&nbsp;read()&nbsp;throws&nbsp;IOException;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;read(byte&nbsp;b[])&nbsp;throws&nbsp;IOException&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;read(b,&nbsp;0,&nbsp;b.length);<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;read(byte&nbsp;b[],&nbsp;int&nbsp;off,&nbsp;int&nbsp;len)&nbsp;throws&nbsp;IOException&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(b&nbsp;==&nbsp;null)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;NullPointerException();<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;((off&nbsp;&lt;&nbsp;0)&nbsp;||&nbsp;(off&nbsp;&gt;&nbsp;b.length)&nbsp;||&nbsp;(len&nbsp;&lt;&nbsp;0)&nbsp;||<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((off&nbsp;+&nbsp;len)&nbsp;&gt;&nbsp;b.length)&nbsp;||&nbsp;((off&nbsp;+&nbsp;len)&nbsp;&lt;&nbsp;0))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;IndexOutOfBoundsException();<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(len&nbsp;==&nbsp;0)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;c&nbsp;=&nbsp;read();<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(c&nbsp;==&nbsp;-1)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;b[off]&nbsp;=&nbsp;(byte)c;<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;1;<br>&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;&nbsp;i&nbsp;&lt;&nbsp;len&nbsp;;&nbsp;i++)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;read();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(c&nbsp;==&nbsp;-1)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(b&nbsp;!=&nbsp;null)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[off&nbsp;+&nbsp;i]&nbsp;=&nbsp;(byte)c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;ee)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;public&nbsp;long&nbsp;skip(long&nbsp;n)&nbsp;throws&nbsp;IOException&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;remaining&nbsp;=&nbsp;n;<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;nr;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(skipBuffer&nbsp;==&nbsp;null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skipBuffer&nbsp;=&nbsp;new&nbsp;byte[SKIP_BUFFER_SIZE];<br>&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;localSkipBuffer&nbsp;=&nbsp;skipBuffer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n&nbsp;&lt;=&nbsp;0)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(remaining&nbsp;&gt;&nbsp;0)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nr&nbsp;=&nbsp;read(localSkipBuffer,&nbsp;0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(int)&nbsp;Math.min(SKIP_BUFFER_SIZE,&nbsp;remaining));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(nr&nbsp;&lt;&nbsp;0)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;remaining&nbsp;-=&nbsp;nr;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;n&nbsp;-&nbsp;remaining;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;available()&nbsp;throws&nbsp;IOException&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;close()&nbsp;throws&nbsp;IOException&nbsp;{}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;synchronized&nbsp;void&nbsp;mark(int&nbsp;readlimit)&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;synchronized&nbsp;void&nbsp;reset()&nbsp;throws&nbsp;IOException&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;IOException("mark/reset&nbsp;not&nbsp;supported");<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;markSupported()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br>2.&nbsp;&nbsp;&nbsp;&nbsp;抽象类的方法体中只定义抽象的方法，例如AbstractMethodError.java<br>&nbsp;&nbsp;&nbsp;&nbsp;package&nbsp;java.lang;<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;AbstractMethodError&nbsp;extends&nbsp;IncompatibleClassChangeError&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;AbstractMethodError()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;super();}<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;AbstractMethodError(String&nbsp;s)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;super(s);&nbsp;}<br>}</p><img src ="http://www.blogjava.net/adaiye/aggbug/139652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/adaiye/" target="_blank">adaiye</a> 2007-08-26 22:59 <a href="http://www.blogjava.net/adaiye/archive/2007/08/26/139652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>