给JAVA设计开发新手的一些建议与意见(2)
发表时间:2024-05-23 来源:明辉站整理相关软件相关文章人气:
[摘要]【处理好你的异常】 ----------------- 异常处理是Java编程中非常重要的一个部分。建议在使用异常之前阅读或者。 下面从书中摘出几条建议: *绝对不要忽略异常 *千万不要隐藏异常*** *仅在不正常的情况下使用异常 *对可恢复的情况使用可检查异常,...
【处理好你的异常】 -----------------
异常处理是Java编程中非常重要的一个部分。建议在使用异常之前阅读或者。
下面从书中摘出几条建议:
*绝对不要忽略异常
*千万不要隐藏异常***
*仅在不正常的情况下使用异常
*对可恢复的情况使用可检查异常,对程序错误使用运行时异常(RunTimeException)
*给方法引发的异常做文档
*在详细信息里面包括失败捕获信息
*使用finally避免资源泄漏
*。。。。
在这里特别提出的是,在开发中要特别处理NULL的情况,否则经常引发NullPointException异常,在Java里这是一个最令人头疼的异常了。
如果你的程序因为一个NULL值,而报了几十个NullPointException的话,不但得让人烦死,而且还非常难以找到错误所在。所以在Java中一定要注意这个问题。
如果你的函数不允许Null值,那么可以截获它,抛出一个异常,或者给客户更友好的提示,难道不好吗?
让我们来看一个例子:
public String getName(User aUser)
{
//如果aUser为Null,会发生什么情况
return aUser。getName();
}
很明显,如果参数为Null,就会抛出异常。应该改为:
public String getName(User aUser)
{
if(null=aUser)
{
return "";
}
else
{
return aUser。getName();
}
}
或者你要求参数不能为空,还可以抛出一个异常,强制使用者不能传入空值。
还有经常被忽略的是RunTimeException和普通异常的区别,在Java中,这是一个特殊的异常类,程序中如果遇到这个异常,用户可以不截获它,而如果是其他的普通异常,就不许要截获它。我们的代码经常这么写:
try
{
//your code here
}
catch(Exception e)
{
//do warn
}
这样写的话,就截获了所有异常,当然也包括了RunTimeException。 在很多情况下,这是不合适的处理方式,我们只应截获必要的异常,而应该忽略RuntimeException。
关于RunTimeException,在Spring中还有更好的利用方式,建议阅读Spring框架中在事务中对异常的处理代码,例如对Jdbc抛出的SqlException的转换。
关于异常处理,我提出几点建议:
*捕获异常而且再次抛出时要包含原来的异常信息
*不要忘了RunTimeException,除非必要,否则不要用catch(Exception e)的方式捕获所有异常。
*不要用异常做流程控制,异常的性能代价比较高昂。(对此,可能有人不同意。此处不详细讨论)
*不要把异常处理都抛给别人,本函数有能力处理的就不要抛出。
在此建议读者详细阅读或者。
我们可以看到,这个类的主要目的是得到计算结果,所以正确的接口应该类似:
public interface Counter
{
int getResult();
}
但是很多情况下,经常是这样的接口:
public interface Counter
{
int getResult();
int getN1();
int getN2();
void setN1(int n1);
void setN2(int n2);
}
我们想一想,这样做有2个后果:
1。除了getResult之外,其他的函数我们根本用不到,所以是多余的。
2。如果我们要自己实现一个Counter,如果接口中仅仅定义了getResult,我们仅仅需要实现它就可以了。我们自己的类可能是多个数运算,有乘除加减等等各种运算,参数也有可能是一些数组。但是如果按照第二种方法声明接口的话,我们就必须实现后面的四个方法,如果这样的话,实现这样东西不仅没用,而且浪费时间。我们恐怕要大声骂娘了吧。
所以,接口有好的作用,但是不要滥用。
■ 如果你的接口永远只有一个类实现,那么可能就没有必要用接口。
■ 你的接口只需要声明别人用到的函数即可。