java - 如何访问另一个类引发的异常

标签 java

我的要求是每当出现异常时自动发送邮件

public Connection dbConnect(String dbconnectionstring,String userid,String userpassword)
{
    Connection connection = null;
    System.out.println();
  try {
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
     connection = DriverManager.getConnection(dbconnectionstring,userid,userpassword);
     System.out.println("connected to" + dbconnectionstring );

    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

  return connection;

现在在另一个类中,如果我想访问 Exception e 的内容(如果引发任何异常),应该在我的代码中编写什么来知道是否引发任何异常?如果出现异常,则应邮寄e的内容。

最佳答案

这取决于“其他”是什么。如果是你的doConnect()的来电者方法只是不捕获异常,而是抛出异常并在调用者方法中捕获:

public void doConnect(....) throws InstantiationException, IllegalAccessException, .......{
}

public void theCaller() {
    try {
    doConnect(......)
    } catch(InstantiationException e) {
    }
    } catch(IllegalAccessException e) {
    }
/// etc
}

顺便说一句,在 java 7 中,您可以在一个 block 中捕获所有异常:

} catch(IllegalAccessException | InstantioationException | SqlException e)

或者,您可以使用其他可以检查或未检查(运行时)的异常来包装特定异常,例如

public Connection dbConnect(String dbconnectionstring,String userid,String userpassword)
{
    Connection connection = null;
    System.out.println();
  try {
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
     connection = DriverManager.getConnection(dbconnectionstring,userid,userpassword);
     System.out.println("connected to" + dbconnectionstring );

    } catch (InstantiationException | IllegalAccessException  | ClassNotFoundException  | SQLException e) {
        throw new IllegalStateException("Connection failure", e);
    }

  return connection;
}

现在调用者可能会捕获 IllegalStateException并提取其原因。

但是,如果您需要某种异步监听器来管理所有异常,您可以实现一个类,如 ExceptionManager当异常发生时,其他类正在更新它。 ExceptionManager可能是单例,所以代码将如下所示:

public void doConnect() {
    try {
       doConnect(......)
    catch(IllegalAccessException | InstantiationException | SqlException e)
        ExceptionManager.getInstance().exceptionThrown(e);
    }
}

关于java - 如何访问另一个类引发的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350420/

相关文章:

java - PreparedStatement 在 IN 子句中包含数千个参数

java - 使用递归时如何正确添加字符串

z3 opt 的 Java API?

java.lang.IllegalArgumentException : Method must not be null 异常

java - Gradle 构建失败,出现 java.lang.IllegalStateException : Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $

java - Java 有没有一种简单的哈希方法?

java - 在 Java 中使用弱引用

java - Eclipse 显示 View 不会显示

java - 尝试使用两个 if 语句打印树的顶 View

java - 如何避免 JSObject 实现中的内部 Nashorn 类