在构造函数中抛出异常是明智的吗?

时间:2012-04-05 20:29:57

标签: java architecture jdbc

我正在构建DB类,在构造函数中我想与数据库建立连接,以便该类中的其余函数可以访问静态dbLink。这是一个好方法吗?

4 个答案:

答案 0 :(得分:12)

关于具体问题,在构造函数中抛出异常肯定是合法的。没有其他合理的方法可以防止“DB类”实例与断开的连接一起使用。

至于具体的功能要求,你还有另一个主要问题。您不应该在“DB类”的构造函数中创建数据库连接,并且肯定不会使其成为static。这表明只要“DB类”的实例存在于Java的内存中,您就打算保持连接处于打开状态。这反过来又是一个非常糟糕的主意。应该在与执行SQL查询/查询的块相同的try块中创建连接。还应该在finally块的try块中关闭连接。这样可以防止资源长期泄漏,否则会导致应用程序崩溃,因为数据库服务器因为资源已经打开太长时间而超时,或资源耗尽,因为已经打开了太多连接。

另见:

答案 1 :(得分:3)

我的建议是在你的类中提供一个connect()方法,该方法将抛出异常并让你的类实例化而没有异常。

答案 2 :(得分:2)

“你好,是的,从构造函数中抛出异常是正常的。事实上,抛出异常是 构造函数失败的唯一方法。

但是,从作为RuntimeException子类的构造函数中抛出任何异常应该谨慎。 Java编译器不强制调用代码处理此类异常,因此它们会带来一些额外的风险。有时可以使用它们,但要小心。“

从这里开始:http://en.allexperts.com/q/Java-1046/normal-throw-exception-constructor.htm

答案 3 :(得分:1)

通常,创建某种连接对象实际上并不建立连接,它只是设置要建立的连接。如果不能建立连接的connect()方法或抛出异常更有意义。

我不认为让构造函数建立连接是有意义的,所以它不应该抛出任何异常。