Java 异常处理和程序逻辑

Java 异常处理和程序逻辑,java,exception-handling,Java,Exception Handling,我们都知道,使用异常处理来控制程序的逻辑流是不好的。也就是说,你永远不会这样做: public void someMethod(Object someObject) { try { someObject.doSomething(); } catch (NullPointerException npe) { //handle Null case } } 结束 我的问题是,这条规则有哪些好的例外(哈!)?在Java中,我可以考虑使用Malf

我们都知道,使用异常处理来控制程序的逻辑流是不好的。也就是说,你永远不会这样做:

public void someMethod(Object someObject) {
    try {
        someObject.doSomething();
    } catch (NullPointerException npe) {
        //handle Null case
    } 
}
结束


我的问题是,这条规则有哪些好的例外(哈!)?在Java中,我可以考虑使用
MalformedURLException
来确定字符串是否为URL。您还看到过哪些异常处理的酷滥用

当您将它们抛出服务边界时(从服务器到客户端)(如WCF中的故障异常,有一种很好的方法可以将意外错误从服务器传递回客户端,或从sql server传递回SQLExpetion…)


有时使用它们可以节省编程时间(例如将字符串转换为其他内容时的格式异常)等…..

.NET Framework 1.0和1.1没有太多的trparse方法。在过去,我经常做这样的事情:

bool IsInteger(string str)
{
  try
  {
    Int32.Parse(str);
    return true;
  } 
  catch (FormatException)
  {
    return false;
  }
}

在使用java reflect时,我经常使用这个

例如,如果某个字段出现在某个更高级别的类(我指的是一个超类)中,而不是该类本身,我编写了如下内容-

try{
//some stuff like follows
Field f = cls.getDeclaredField(fieldName);
}
catch(NoSuchFieldException e){
cls = cls.getSuperClass();
}
当然,这是在循环下进行的,循环退出条件是cls为null时

try{
//some stuff like follows
Field f = cls.getDeclaredField(fieldName);
}
catch(NoSuchFieldException e){
cls = cls.getSuperClass();
}