Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无ServletException的Serlvet的init方法_Java_Exception_Servlets - Fatal编程技术网

Java 无ServletException的Serlvet的init方法

Java 无ServletException的Serlvet的init方法,java,exception,servlets,Java,Exception,Servlets,尽管ServletException是一个已检查的异常,但我可以通过扩展HttpServlet并创建一个init方法来创建一个Servlet,而无需抛出或捕获ServletException。编译器没有抱怨,Servlet也能正常工作 这是怎么回事。 mC的签名是mA签名的子签名(§8.4.2) 其中定义为 两个方法或构造函数,M和N,如果它们 具有相同的名称、相同的类型参数(如有)(§8.4.4),以及, 在使N的形式参数类型适应该类型之后 M的参数,形式参数类型相同 方法m1的签名是方法m1

尽管ServletException是一个已检查的异常,但我可以通过扩展HttpServlet并创建一个init方法来创建一个Servlet,而无需抛出或捕获ServletException。编译器没有抱怨,Servlet也能正常工作

这是怎么回事。

mC的签名是mA签名的子签名(§8.4.2)

其中定义为

两个方法或构造函数,M和N,如果它们 具有相同的名称、相同的类型参数(如有)(§8.4.4),以及, 在使N的形式参数类型适应该类型之后 M的参数,形式参数类型相同

方法m1的签名是方法m1的签名的子签名 方法m2,如果:

  • m2与m1具有相同的签名,或

  • m1的签名与m2签名的删除(§4.6)相同

因此,可以在子类中忽略
throws
子句。但是,

  • 如果m2有一个throws子句,其中提到任何选中的异常类型, 那么m1必须有一个throws子句,否则会发生编译时错误

  • 对于m2的TROWS子句中列出的每个选中的异常类型, 相同的异常类或其超类型之一必须出现在 删除m1中的条款(§4.6);否则,编译时 发生错误

举个例子

class Bar {
   public void method() throws Exception {}
}

class Foo extends Bar {
    @Override  
    public void method() {}
}
如果你这样做

Bar bar = new Foo();
bar.method(); // you'll need to handle it, but it will never happen

Foo foo = new Foo();
foo.method(); // you don't need to handle, it still won't ever happen
但情况正好相反

class Bar {
   public void method() throws SomeCheckedException{}
}

class Foo extends Bar {
    @Override  
    public void method() throws SomeOtherUnrelatedCheckedException{}
}
将失败

Bar bar = new Foo();
bar.method(); // Bar says some exception can happen, but the actual object may throw another, it wouldn't be handled.

当使用

throws ServletException

这并不意味着它必须抛出ServletException。这意味着它可以抛出一个ServletException。因此,如果您的方法从未抛出ServletException,那就好了。如果您的
init()
方法抛出了ServletException以外的另一种类型的已检查异常,那么就不好了。

告诉我们您做了什么。