最近在读<<Agile Java Crafting Code with Test-Driven Development>>.
这是我在去年买了Kent Benk的<<Test-Driven Development>>后读的第三本关于Agile development
的书.<<TDD>>告诉我了测试驱动开发的大概方法,至于细节就没有面面俱到了.而<<Agile Java ...>>这本
书以JDK5.0,用一个学生MIS系统的例子展示了敏捷开发的完整过程.
我是边看书边一步步跟着作者写代码的.收获颇丰.
同时自己也看到了自己的许多不足.用Java这样的面向对象的语言写程序,非常重要的一点就是"面向对象",自己应该尽量用接口编程,不要用具体类;每个类尽量只完成属于自己的任务;而每个方法也尽量做到只完成一个任务,等等这样能够让代码更易于维护和阅读.就是这些最基本的问题,我自己平时根本没有注意到,我有个坏习惯,就是不会去看我1个月时间之前写的代码.归根到底还是自己的代码写的可读性太差!而扩展性更是没有.
老外的代码基本上都是非常面向对象的,我很羡慕这一点.一直以来,包括我还有很多象我一样的学生朋友一直追求学新的技术,这本来是没有什么不好,但是我现在在考虑:象图形界面如Swing,Swt/Jface,或是web框架如struts或spring,或是eclipse技术的插件,RCP等等,它们是否值得我们在本科时间里花大力气去学??它们不过是老外开发的技术框架罢了,无论是谁只要不笨,在参加工作后都能够很快掌握.或许值得学.但是我们首先要问问自己:基础打好了没?很多人基础没有打好就去学这学那,我觉得我就是个典型,比如:我根本就没有很好得理解面向对象是什么.我的代码没有什么可读性,更谈不上维护和扩展了.更加糟糕的是:我对有些Java最基本的概念都还没弄清楚!很多问题归根到底还是源于自己的懒惰.
再回来谈谈我对敏捷开发的感受吧,敏捷开发的基本步骤是:1.写测试代码2.写可以通过测试的代码3.重构代码4.重构
测试代码5.回到1向前推进.我觉得最重要的步骤在于重构这一步.重构消除了重复的代码.重构后的代码能变得非常漂亮.因此我也准备在读完<<Agile Java>>后阅读<<Refactoring-Improving the Design of Existing Code>>
前两天在一个国外的论坛看到一个帖子,发帖子的人问了一个这样的问题:
如何比较3个字符串?
他是这样写的:
if ( (s1.equals(s2) )&& ( s2.equals(s3) ) 他问有没有更好的办法?如果是多于3个呢?
有个人给出一个精彩的回答:
String[] s = {"one", "two", "two"};List list = Arrays.asList(s);Set set = new HashSet(list);System.out.println(list.size() == set.size()); // false呵呵,非常有意思的一个解决办法.
另外还看到一个有趣的帖子:
如何不借用第三个变量对换两个变量的值?
马上有人给出答案:
A = A + B B = A - B A = A - B 但是高手总是喜欢开点小玩笑:)
有人给出了这样的办法:
a = a ^ b;b = a ^ b; ((a ^ b) ^ b == a)a = a ^ b; ((a ^ b) ^ a == b)不仅解答有意思,就是连发帖子的那个人为何想到这个问题我都觉得搞笑:P
还有一个帖子,它给了我沉重一击,到现在我连Java最基本的问题都没弄清楚!
看了后我自己写了个测试程序:
package reference;import junit.framework.TestCase;public class ReferenceTest extends TestCase { public void testReference(){ int i = 0; change(i); assertEquals(0, i);//测试1:这里的i没变 } public void testArray(){ int[] j = new int[3]; expand(j); assertEquals(3, j.length);//测试2:这里数组j的长度也没变 } public void testArray2(){ int[] j = new int[3]; for(int p = 0; p < j.length; p++){ j[p] = 1; } zero(j); assertEquals(0, j[0]);//测试3:数组的每个值都变为0了 } /** * 把100赋给i */ private void change(int i){ i = 100; } /** * 把数组的长度扩展为原来的两倍 */ private void expand(int[] array) { array = new int[2*array.length]; } /** * 给数组的每个变量赋值0 */ private void zero(int[] array) { for (int i = 0; i<array.length; i++) array[i] = 0; }}测试1的结果还简单.测试2和测试3的原因我就有点晕头转向了.看了两篇文章后才知道为什么.
Java是按值传递的.
http://www.javaranch.com/campfire/StoryCups.jsp
http://www.javaranch.com/campfire/StoryPassBy.jsp
分享到:
相关推荐
完整的学习JAVA的随笔
java记录随笔
主要讲Java debug的概述,调试,以及使用
之前上传了JAVA笔记1 那么这次是JAVA笔记2 衔接上一次的
一年级数学第一学期教学随笔.pdf
曾仕强管理随笔3则.doc
【Java - 框架 - Knife4j】随笔
主要讲述Java数组的元素访问,数组的遍历,获取最值方法,数组元素的求和,查找,后面也给大家列举了一个案例:评委打分(用Java实现)
java课堂随笔,我这还有很多,有需要的话可以联系我,我会为大家提供很多的资料
一年级语文教学随笔.pdf
主要讲述Java方法的定义和调用,以及带参数方法的定义和调用,方法的重载,方法的参数传递
主要简述Java中不同进制的写法,以及快速进制转换法,包括原码补码反码的讲解,还包括Java中的位运算,最后,给大家了一个Java案例:反转
关于小学一年级数学下册教学随笔.docx
一年级上册道德与法治教学随笔.docx
教师随笔-小班教师政治随笔5篇.docx
【Java-框架-SpringSecurity】单点登录(认证和授权)- 随笔
苏教版一年级数学教学随笔.docx
容斋随笔
留守儿童教育随笔.doc
工作随笔一瞬间的心动.docx