- 浏览: 401431 次
- 性别:
- 来自: 北京
最新评论
-
c253898303:
求和的时候说是调用store的基础方法,这个能重写吗?如果可以 ...
给Extjs的GridPanel增加“合计”行 -
rhhao:
这个附件怎么用呢?
自己写段代码批量修改照片的Exif数据 -
AndLong:
【转】关于烂代码的那些事(下) -
TonyLian:
无意中翻出这篇老博文,文章中留下的遗憾“纯JSP如何获取req ...
Spring获得各种客户端HttpServletRequest的方法 -
TonyLian:
注释中应该写“这里为什么要做XXX”,“为什么这里没有做XXX ...
【转】关于烂代码的那些事(中)
文章列表
如果一个方法抛出的异常与它所执行的任务没有明显关联关系的话,会使人感到不知所措。为了避免这个问题,应该在高层的实现中俘获底层抛出的“低级”异常,并同时用另一“高级”异常继续向外抛。
例如,如我们在方法中,有一段循环,一个一个地取集合的一下元素。当catch到一个 NoSuchElementException 或 NullPointerException 时,说明已经到头儿了。这时我们可以 new 一个 IndexOutOfBoundsException 并向上抛出。对于此方法的调用者来说,这个异常显然比前两个更有实际意义。这被称为异常转译。
但是,尽管异常转 ...
- 2009-06-09 16:52
- 浏览 1489
- 评论(0)
代码重用,是程序员们“千百年来”所追求的目标,同样Exception也是代码,也该尽量被重用。所以,应该尽量使用标准的异常,而不是轻易地使用自造的异常。
很多的类库都定义了自己的异常,我本人所参与设计的几个项目大多数也有自己的异常。但这些异常都是仅适用于项目自身的某些情形的,换个角度说,就是这些情形下没有太合适的标准异常来表示,加之自造异常还可以做某些处理,如信息的反馈,日志、错误消息的封装等。
但是,当那些常见的“低级”错误发生时,应使用相应的“定式”。记住以下标准异常吧:
IllegalArgumentException
参数的值不 ...
- 2009-06-09 16:37
- 浏览 1380
- 评论(0)
也就是说,在使用checkedException时,你必须确认这里的的确确是应该抛出一个异常,否则不要乱抛。如果一个方法会抛出一个或者多个被检查的异常,那么调用该方法的代码就必须要么在一个或几个try-catch块中处理这些异常,要么就要声明(throws)它们,以便向上抛出去。而无论哪种方法,都给程序员增添了不可忽略的负担。
回想一下上一条最后一段关于.Net为什么选择了更为简单化的异常处理,避免这种负担或许就是其中一大原因。(.Net中根本就没有throws这个语法)
解决方案是:
1)尽量在API内部处理掉checkedException。如输出错误 ...
- 2009-06-09 16:21
- 浏览 1445
- 评论(0)
Java一共有三种可抛出的东东(trhowable):被检查的异常(checkedException),运行时异常(runtimeException),错误(error)。我们最常见的是前两者,但是什么时候该使用哪种异常,可能是一件非常让人头疼的事情。为此,搜索 ...
《第8章 异常》
异常是Java语言中非常重要、而又容易被轻视的、一个出于非常奇妙的地位的一个东东。这一章讲了关于有效使用异常的指导性原则。
【第39条】只针对不正常的条件才使用异常
异常只应该被用于不正常的情况,它们永远不应该被用于正常的控制流。书中举了一个特殊的例子,在这个例子中,循环的结束条件是当数组下标出界时引发的一个 ArrayIndexOutOfBoundsException。这段程序的作者“自作聪明”地认为“传统”的 for 循环 或 while 循环 需要在每次进行大小判断,是要额外耗费时间的,所以“发明”了这种每次执行完循环体不必“浪费时 ...
- 2009-06-09 11:28
- 浏览 1314
- 评论(0)
自定义一个变量如下: ( {@TotalWithTax} 是要显示成人民币大写金额的变量 )
________________________________________________
Global StringVar Array PreDotUnit; Global StringVar Array ChineseDollar; Global StringVar Array ResultPreDot; Global StringVar Array ResultAftDot; ...
- 2009-06-08 16:42
- 浏览 5536
- 评论(0)
网上的一篇《C# 和 Java 的比较》(或者叫《Java 和 C# 的比较》)写的挺不错的,今天忽然搜索到。
自己刚刚接触C#,也不由自主地随时都拿来和Java做对比,所以就心血来潮在原作者的每一条之后斗胆都写了些文字。就当是给自己再加深一遍印象吧。
【非常抱歉,由于网上此文章已经被转载多次,所以真的找不到原出处了,所以没法贴出作者原贴的连接】
开始吧...
2007年11月1日 1。访问控制方面:C#有public、internal、protected、private,比java多了个internal,其实它跟java的包访问差不多,internal表示同一个编 ...
Java平台(其实整个编程界)有着一套很好的命名惯例。所谓惯例,可以理解为“约定俗成”。类似我们常见的《命名规则》《编码规则》《SQL文规则》等,经过提炼,可以基本看出里面的“规律”。
“约定”对于 ...
这一条我没有什么好评价的,记住作者的忠告就好。
作者的意思大概有三点吧:
1)任何优化都存在风险,有时候弄不好反而带来其他的问题
2)并不是 性能 优先。努力编写好的程序而不是快的程序。
3)对前人,尤其是类似于Java API这样的成熟代码,进行优化,是不明智的(要是能优化,人家早就做了)
其实,不仅仅是优化。随着项目的进展,尤其是到了后期和交付后,再做任何代码的改动都是非常危险的,必须十分小心,还要之后的大量、充分地测试。不论改动的目的是 需求变更/增加 还是 Debug 或是 性能优化。
【Effec ...
- 2009-06-03 15:57
- 浏览 1474
- 评论(0)
Java Native Interface(JNI,Java本地接口),可以调用本地方法。这里的“本地”是指用其他语言(如 C, C++) 编写的特殊方法。
从历史上看,使用JNI主要有三个用途:
1)由于Java程序是运行在虚拟机之上的,虚拟机作为中间件,带来的平台无关性的好处的同时,也使得那些要求访问OS甚至硬件的底层操作变得无所适从。通过JNI可以调用C/C++等编写的代码,来提Java完成,比如读写Windows的注册表,取得硬盘的序列号等。
2)由于一些“古老”的资源要使用“古老”的代码库,为其再开发一个Java版本是不划算的。于是JNI又派上用 ...
- 2009-06-03 15:50
- 浏览 1490
- 评论(0)
今天终于调试成功!后台是Java,前台是 Flex or .Net 同时工作
功能强大而稳定,有着跨平台、集群化优势的Java,就像勤劳勇敢的“牛郎”;极具用户亲和力与体验感、天生与Office系列有着良好关系的.Net,就像美貌的“织 ...
我个人更觉得,“映像机制”翻译为“反射机制”应该更好一些。反射是Java中的一个重要特性,给定一个字符串的类名称,可以得到这个类的一个实例、构造函数、公有的域和方法,并可调用这些方法。这种通过类名称反向等到类的实例和具体信息的能力,给Java带来了很多强大的功能,但同时也会带来不安定因素。
如果使用反射机制,就意味着:
● 损失了编译时类型检查的好处
● 要求执行反射的代码非常笨拙和冗长,意味着阅读这些代码也很困难
● 性能损失,1.4版本后大幅提高了性能,但也只有普通访问速度的一半(1.3之前仅有1/40)
如果只是在很有限的情况下使用反射,那么虽 ...
- 2009-05-31 15:18
- 浏览 1188
- 评论(0)
在【第25条】中已经讲过“应该使用接口,而不是类作为参数的类型”。更进一步地讲,应该优先使用接口而不是类来引用对象。也就是说,当我们在考虑引入一个引用变量的时候,应该首先考虑的是,我们需要一个具有什么样功能的变量,也就是选择一个什么接口。之后才是在众多的实现类中选择一个合适的实现进行初始化。
// Interface object = new Class();
Map myTable = new Hashtable();
如果你养成了使用接口作为类型的习惯,那么你的程序将会更加灵活。 如果没有合适的接口存在的话,那么,用类而不是接口来引用一个对象,是完全合适 ...
C#基础知识(MSDN整理)
一:C# 介绍pC# 是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在 .NET Framework 上运行的各种安全、可靠的应用程序。 pC# 作为一种面向对象的语言,支持封装、继承和多态性概念。所有的变量和方法,包括 Main 方法(应用程序的入口点),都封装在类定义中。 二:C#述语p访问修饰符:
- 2009-05-27 22:14
- 浏览 3616
- 评论(0)
这一条是一个良好的“习惯”,你可能一直没有注意到,但也没出什么问题,但是学会这一条会有不少性能的提高。
两个字符串连接,一般是通过 + 操作符进行的。如
String s = "a" + "b";
String str = "Hello: ";
str = str + someone.getName().toString();
但是,由于String是非可变类型(请参考【第13条】),所以这样做的代价其实挺大的。以 str1 = str1 + str2; 为例,执行时将原str ...
- 2009-05-27 15:58
- 浏览 1339
- 评论(0)