﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小 猪 宝 贝-文章分类-Java Programming </title><link>http://www.blogjava.net/selina/category/1192.html</link><description>&lt;hr&gt;
&lt;div align="center"&gt;&lt;a href="http://www.blogjava.net/selina/"&gt;..::[Selina ★ AlleNny]::..&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
Sunny day with the rain together&lt;br&gt;
像苦与甜交织的景色&lt;br&gt;
春天的花冬天的寒冷&lt;br&gt;
都是色彩缤纷的人生&lt;br&gt;
&lt;br&gt;
Sunny day with the rain together&lt;br&gt;
时间转动着古老的缘份&lt;br&gt;
黑暗的夜明亮的早晨&lt;br&gt;
那都是我们丰盛的旅程&lt;br&gt;
&lt;br&gt;
&lt;div align="center"&gt;&lt;a href="http://www.flashempire.com/top10/top10play.php?id=1881"&gt;Turn Left Turn Right&lt;/a&gt;&lt;/div&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:36:18 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:36:18 GMT</pubDate><ttl>60</ttl><item><title>写java程序最容易犯的21种错误&lt;转载&gt;</title><link>http://www.blogjava.net/selina/articles/34619.html</link><dc:creator>Selina</dc:creator><author>Selina</author><pubDate>Fri, 10 Mar 2006 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/selina/articles/34619.html</guid><wfw:comment>http://www.blogjava.net/selina/comments/34619.html</wfw:comment><comments>http://www.blogjava.net/selina/articles/34619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/selina/comments/commentRss/34619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/selina/services/trackbacks/34619.html</trackback:ping><description><![CDATA[1．Duplicated Code <br>
代码重复几乎是最常见的异味了。他也是Refactoring 的主要目标之一。代码重复往往来自于copy-and-paste 
的编程风格。与他相对应OAOO 是一个好系统的重要标志（请参见：http://www.erptao.org/download.php?op=viewsdownload&sid=6）。 <br>
2．Long method <br>
它是传统结构化的“遗毒“。一个方法应当具有自我独立的意图，不要把几个意图放在一起，我的《大类和长方法》一文中有详细描述。 <br>
3．Large Class <br>
大类就是你把太多的责任交给了一个类。这里的规则是One Class One Responsibility。 <br>
4．Divergent Change  <br>
一个类里面的内容变化率不同。某些状态一个小时变一次，某些则几个月一年才变一次；某些状态因为这方面的原因发生变化，而另一些则因为其他方面的原因变一次。面向对象的抽象就是把相对不变的和相对变化相隔离。把问题变化的一方面和另一方面相隔离。这使得这些相对不变的可以重用。问题变化的每个方面都可以单独重用。这种相异变化的共存使得重用非常困难。 <br>
5．Shotgun Surgery  <br>
这正好和上面相反。对系统一个地方的改变涉及到其他许多地方的相关改变。这些变化率和变化内容相似的状态和行为通常应当放在同一个类中。 <br>
6．Feature Envy  <br>
对象的目的就是封装状态以及与这些状态紧密相关的行为。如果一个类的方法频繁用get 方法存取其他类的状态进行计算，那么你要考虑把行为移到涉及状态数目最多的那个类。 <br>
7．Data Clumps  <br>
某些数据通常像孩子一样成群玩耍：一起出现在很多类的成员变量中，一起出现在许多方法的参数中…..，这些数据或许应该自己独立形成对象。 <br>
8．Primitive Obsession  <br>
面向对象的新手通常习惯使用几个原始类型的数据来表示一个概念。譬如对于范围，他们会使用两个数字。对于Money，他们会用一个浮点数来表示。因为你没有使用对象来表达问题中存在的概念，这使得代码变的难以理解，解决问题的难度大大增加。 
好的习惯是扩充语言所能提供原始类型，用小对象来表示范围、金额、转化率、邮政编码等等。 <br>
9．Switch Statement  <br>
基于常量的开关语句是OO 的大敌，你应当把他变为子类、state 或strategy。 <br>
10．Parallel Inheritance Hierarchies  <br>
并行的继承层次是shotgun surgery 的特殊情况。因为当你改变一个层次中的某一个类时，你必须同时改变另外一个层次的并行子类。 <br>
11．Lazy Class  <br>
一个干活不多的类。类的维护需要额外的开销，如果一个类承担了太少的责任，应当消除它。 <br>
12．Speculative Generality  <br>
一个类实现了从未用到的功能和通用性。通常这样的类或方法唯一的用户是testcase。不要犹豫，删除它。 <br>
13．Temporary Field <br>
一个对象的属性可能只在某些情况下才有意义。这样的代码将难以理解。专门建立一个对象来持有这样的孤儿属性，把只和他相关的行为移到该类。最常见的是一个特定的算法需要某些只有该算法才有用的变量。 <br>
14．Message Chain  <br>
消息链发生于当一个客户向一个对象要求另一个对象，然后客户又向这另一对象要求另一个对象，再向这另一个对象要求另一个对象，如此如此。这时，你需要隐藏分派。 <br>
15．Middle Man  <br>
对象的基本特性之一就是封装，而你经常会通过分派去实现封装。但是这一步不能走得太远，如果你发现一个类接口的一大半方法都在做分派，你可能需要移去这个中间人。 <br>
16．Inappropriate Intimacy <br>
某些类相互之间太亲密，它们花费了太多的时间去砖研别人的私有部分。对人类而言，我们也许不应该太假正经，但我们应当让自己的类严格遵守禁欲主义。 <br>
17．Alternative Classes with Different Interfaces <br>
做相同事情的方法有不同的函数signature，一致把它们往类层次上移，直至协议一致。 <br>
18．Incomplete Library Class  <br>
要建立一个好的类库非常困难。我们大量的程序工作都基于类库实现。然而，如此广泛而又相异的目标对库构建者提出了苛刻的要求。库构建者也不是万能的。有时候我们会发现库类无法实现我们需要的功能。而直接对库类的修改有非常困难。这时候就需要用各种手段进行Refactoring。 <br>
19．Data Class  <br>
对象包括状态和行为。如果一个类只有状态没有行为，那么肯定有什么地方出问题了。 <br>
20．Refused Bequest  <br>
超类传下来很多行为和状态，而子类只是用了其中的很小一部分。这通常意味着你的类层次有问题。 <br>
21．Comments  <br>
经常觉得要写很多注释表示你的代码难以理解。如果这种感觉太多，表示你需要Refactoring。 
 
 
<img src ="http://www.blogjava.net/selina/aggbug/34619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/selina/" target="_blank">Selina</a> 2006-03-10 10:49 <a href="http://www.blogjava.net/selina/articles/34619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高效J2ME应用程序秘诀二十招&lt;转载&gt; </title><link>http://www.blogjava.net/selina/articles/33577.html</link><dc:creator>Selina</dc:creator><author>Selina</author><pubDate>Sat, 04 Mar 2006 02:46:00 GMT</pubDate><guid>http://www.blogjava.net/selina/articles/33577.html</guid><wfw:comment>http://www.blogjava.net/selina/comments/33577.html</wfw:comment><comments>http://www.blogjava.net/selina/articles/33577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/selina/comments/commentRss/33577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/selina/services/trackbacks/33577.html</trackback:ping><description><![CDATA[　　J2me程序由于其特殊的运行环境限制，所以优化就显得比较重要，以下是我在学习j2me编程所收集的一些技巧和自己的心得。 <br>
　　本文主要是说明j2me平台上的特殊优化方法，与j2se重复的一些技巧就不再赘述了。 <br>
　　1.显示图象时确定好你的fps，最好先做几次小实验，这样能让你在显示效果和运行速度上有比较好的平衡。<br>
　　2.GamaCanvas.getGraphics()每次都会产生一个全新的对象，但是对这些对象的操作都是对同一个graphics，所以还是只取一次供后面使用。<br>
　　3.让多个对象使用同样的监听器，比如让主MIDlet类实现CommandListener和ItemStateListener接口。<br>
　　4.考虑使用手机开发商提供的一些sdk，没人会比他们更了解他们手机，所以有些时候能显著提高速度，特别是图片，视频使用方面。<br>
　　5.使用监视工具分析MIDlet的瓶颈，wtk和各个公司提供的开发包里都会有，可以找到程序的弱点。如果是在手机上，用timer测试你认为有可以的地方。<br>
　　6.使用System.gc()，在无线程阻塞的情况下可以有效的缓解内存压力，但是有些公司不是太推荐使用(如nokia).sun的说法也是越低端的机子执行的越慢，总之，慎用吧。<br>
　　7.用固定的数组代替使用Vector。<br>
　　8.图片的优化。考虑使用设备的规格，可能高分辨率的图片不一定显示的出来。<br>
　　9.不用的对象赋值为null，为更快的回收。<br>
　　10.用混淆器处理你的类文件，防止反编译，还有一个好的副作用就是它减小class文件的大小，因为混淆器往往用较短的字符串代替原来的变
量或方法名。<br>
　　11.若数据太大，可以将数据编码为字符串，运行时解码，或把数据存为二进制文件并与程序打包，用类装载器的getResourceAsStream方法在运行时存取。<br>
　　12.使用现有的类，比如你使用了GameCanvas，就不用自己生成off-screen，另外像CLDC的profile没有构造集合类，所以我们可以用内建的Hashtable和Vector类来实现。<br>
　　13.用优化软件jPresto(http://www.s5systems.com/jPresto.htm)---没用过，不过暂且写上吧。<br>
　　如果对文件大小，内存限制非常严格，这时候就只能用一些非常规的方法了，可能这些方法背离了OO思想，但是多数情况下，它是起到了非常积极的作用的(但是也可能)，假如你更在意于程序的维护和扩展方面，我建议你还是跳过吧。-_-||<br>
　　14.把所有资源文件做成一个数据文件。<br>
　　15.把所有的小图片文件做成一个文件，在运行时再"切割"开。<br>
　　16.使用有限的面向对象，因为纯粹的OO往往意味着更多的虚方法，更多的层次关系，更多的class。<br>
　　17.生成尽可能少的class，class都有一定的系统开销。 <br>
　　18.class中生成尽可能少的方法。速度比较：同步方法&lt;接口方法&lt;实例方法&lt;final方法&lt;静态方法。<br>
　　19.用final static限定方法可以获得小幅的速度提高。<br>
　　20.对数据成员用public限定，来代替get和set方法，不过要注意安全性。<br>
　　J2ME优化可能使你的程序在不同的模拟器，不同的设备下有不同的运行效果，所以 优化一定要建立在开发设备的规格上。<br>
　　以上所列举的方法不一定在所有midp设备上都起作用，也不一定都适合每一个程序，总之，应该根据自身的情况。<img src ="http://www.blogjava.net/selina/aggbug/33577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/selina/" target="_blank">Selina</a> 2006-03-04 10:46 <a href="http://www.blogjava.net/selina/articles/33577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java文件操作大全&lt;转载&gt;</title><link>http://www.blogjava.net/selina/articles/1569.html</link><dc:creator>Selina</dc:creator><author>Selina</author><pubDate>Mon, 28 Feb 2005 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/selina/articles/1569.html</guid><wfw:comment>http://www.blogjava.net/selina/comments/1569.html</wfw:comment><comments>http://www.blogjava.net/selina/articles/1569.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/selina/comments/commentRss/1569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/selina/services/trackbacks/1569.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 文件的建立/检查与删除&lt;%@&nbsp;page&nbsp;contentType="text/html;charset=gb2312"%&gt;&nbsp;&lt;%@&nbsp;page&nbsp;import="java.io.*"%&gt;&nbsp;&lt;html&gt;&nbsp;&lt;head&gt;&nbsp;&lt;title&gt;文件的建立、检查与删除&lt...&nbsp;&nbsp;<a href='http://www.blogjava.net/selina/articles/1569.html'>阅读全文</a><img src ="http://www.blogjava.net/selina/aggbug/1569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/selina/" target="_blank">Selina</a> 2005-02-28 20:47 <a href="http://www.blogjava.net/selina/articles/1569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>