我已从父级覆盖了一个方法,并在该方法上添加了throws
声明。当我添加throws Exception
和throws FileNotFoundExceprion
但与throws NullPointerException
合作时,它给了我错误。是什么原因?
class Vehicle {
public void disp() {
System.out.println("in Parent");
}
}
public class Bike extends Vehicle {
public void disp()throws NullPointerException {
System.out.println("in Child");
}
public static void main(String[] args) {
Vehicle v = new Bike();
v.disp();
}
}
答案 0 :(得分:1)
NullPointerException
是一个所谓的未经检查的异常(因为它扩展了RuntimeException
),这意味着你可以将它扔到任何地方而不明确标记该方法“抛出”它。相反,您发布的其他异常是已检查的异常,这意味着必须将该方法声明为“抛出”异常,或者必须在try-catch
块中调用有问题的代码。例如:
class Vehicle{
public void disp() throws Exception {
System.out.println("in Parent");
}
}
public class Bike extends Vehicle {
public void disp() throws Exception {
System.out.println("in Child");
}
public static void main(String[] args) throws Exception {
Vehicle v = new Bike();
v.disp();
}
}
...或:
class Vehicle{
public void disp() throws Exception {
System.out.println("in Parent");
}
}
public class Bike extends Vehicle{
public void disp() throws Exception {
System.out.println("in Child");
}
public static void main(String[] args) {
Vehicle v = new Bike();
try {
v.disp();
} catch(Exception exception) {
// Do something with exception.
}
}
}
答案 1 :(得分:0)
从概念上讲,Java中有两种类型的例外:
这些用于表示不同的事物。已检查的异常是可能发生的特殊情况,您将被迫处理此异常。例如,FileNotFoundException
是可能出现的情况(例如,您正在尝试加载尚未存在的文件)。
在这种情况下,这些已检查,因为您的程序应该处理它们。
另一方面,未经检查的异常是在程序执行期间通常不会发生的情况,NullPointerException
表示您正在尝试访问null
对象,不应该永远不会发生。因此,这些例外情况更可能是软件中可能出现的错误,您不必根据要求声明投掷它们并根据需要处理它们。
通过跟随你的自行车比喻,就像在你的FlatTireException
课程上Bike
一样。它可能是一个经过检查的例外,因为它可能出现并且应该处理的情况,而WheelMissingException
是不应该发生的事情。