英文:
How to handle "Default constructor cannot handle exception type ClassNotFoundException" error
问题
错误信息是“默认构造函数无法处理由隐式超级构造函数抛出的ClassNotFoundException异常类型。必须定义显式构造函数”,位于此类中的“= new DriveStore()”声明中。
import ..... ;
@WebServlet("/create_drive")
public class create_Drice extends HttpServlet {
private static final long serialVersionUID = 1L;
private DriveStore drive_store = new DriveStore();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
...
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
...
}
}
在doGet()和doPost()之外的try-catch块不起作用,而且drive_store在两者中都被使用。如何解决这个问题?
英文:
The error is "Default constructor cannot handle exception type ClassNotFoundException thrown by implicit super constructor. Must define an explicit constructor"
in the " = new DriveStore()" declaration in this class
import ..... ;
@WebServlet("/create_drive")
public class create_Drice extends HttpServlet {
private static final long serialVersionUID = 1L;
private DriveStore drive_store = new DriveStore();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
...
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
...
}
}
try-catch block outside doGet() and doPost did not work and drive_store is used in both.
How could this be solved?
答案1
得分: 3
编译错误的原因是使用默认构造函数创建 DriveStore
实例可能会抛出 ClassNotFoundException
,但编译器既不能自动处理异常,也不能重新抛出异常,因为所示的 create_Drice
类的隐式默认构造函数没有声明任何异常(在Java中,隐式构造函数永远不会抛出已声明的异常)。
正如错误消息所示,解决方法是向 create_Drice
类添加显式构造函数。此构造函数可以像这样声明并抛出异常:
public class create_Drice {
private DriveStore drive_store;
public create_Drice() throws ClassNotFoundException {
drive_store = new DriveStore();
}
}
... 或者可以以某种方式处理异常:
public class create_Drice {
private DriveStore drive_store;
public create_Drice() {
try {
drive_store = new DriveStore();
} catch (ClassNotFoundException exc) {
throw new RuntimeException("无法创建 DriveStore", exc);
}
}
}
这里所示的异常“处理”是将其转换为运行时异常,不需要在Java中声明。当然,您也可以实现其他方式来处理异常。
英文:
The reason for the compile error is that the creation of a DriveStore
instance using the default constructor might throw a ClassNotFoundException
, but the Compiler can neither automatically handle the exception nor rethrow it, because the implicit default constructor of the shown class create_Drice
does not declare any exceptions (implicit constructors can never throw declared exceptions in Java).
As the error message says, the fix is to add an explicit constructor to the create_Drice
class. This constructor can either declare and throw the exception like this:
public class create_Drice {
private DriveStore drive_store;
public create_Drice() throws ClassNotFoundException {
drive_store = new DriveStore();
}
}
... or it can handle the exception in some way:
public class create_Drice {
private DriveStore drive_store;
public create_Drice() {
try {
drive_store = new DriveStore();
} catch (ClassNotFoundException exc) {
throw new RuntimeException("Cannot create DriveStore", exc);
}
}
}
The "handling" of the exception shown here is the conversion to a runtime exception, which does not have to be declared in Java. Of course you can implement some other way to handle the exception.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论