
一个关于异常抛出的JAVA问题
Given:11.staticclassA{12.voidprocess()throwsException{thrownewException();}13.}14.sta...
Given:
11. static classA {
12. void process() throws Exception { throw new Exception(); }
13. }
14. static class B extends A {
15. void process() { System.out.println(”B “); }
16. }
17. public static void main(String[] args) {
18.A a=new B();
19. a.process();
20.}
What is the result?
A. B
B. The code runs with no output.
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 15.
E. Compilation fails because of an error in line 18.
F. Compilation fails because of an error in line 19.
Answer: F
class B不是已经重写了process方法了,不抛出异常了,第18行的a也是父类A引用指向子类B 本质是B 为什么还需要抛出父类A的方法定义抛出的异常 展开
11. static classA {
12. void process() throws Exception { throw new Exception(); }
13. }
14. static class B extends A {
15. void process() { System.out.println(”B “); }
16. }
17. public static void main(String[] args) {
18.A a=new B();
19. a.process();
20.}
What is the result?
A. B
B. The code runs with no output.
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 15.
E. Compilation fails because of an error in line 18.
F. Compilation fails because of an error in line 19.
Answer: F
class B不是已经重写了process方法了,不抛出异常了,第18行的a也是父类A引用指向子类B 本质是B 为什么还需要抛出父类A的方法定义抛出的异常 展开
5个回答
展开全部
你说的本质是B,是你经过分析后的,这个可是运行时候才决定的.
编译器首先看到的是你调用的A的方法process,这个方法是抛出异常的,所以要进行捕获.
我的理解.希望对你有帮助
编译器首先看到的是你调用的A的方法process,这个方法是抛出异常的,所以要进行捕获.
我的理解.希望对你有帮助
展开全部
因为A的方法会报出异常啊。
需要trycatch啊。
具体原因和java程序的设计有关。
实际上new B 的时候会new 一个A的,你这样写.A a=new B();会让a指向B的引用。
虽然运行的是B的方法,但是表现的像是A的方法。
需要trycatch啊。
具体原因和java程序的设计有关。
实际上new B 的时候会new 一个A的,你这样写.A a=new B();会让a指向B的引用。
虽然运行的是B的方法,但是表现的像是A的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先B继承自A
现在引用B实例的父类A,做执行
自然要接受A类抛出的异常
现在引用B实例的父类A,做执行
自然要接受A类抛出的异常
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你给的例子不对,static不能用来修饰类定义(内部类可以)。
你定义的引用A a是指向类型为A的实例的引用,即使你把它指向 new B(),它也把你的 new B() 当做A来看待。
因为B 继承 A,这里 A a = new B(), 假如B类有A类以外的属性或者方法,此时的引用a是拿不到这些属性和方法的,也就是a只能把自己看做A类的引用,只能拿到A类的方法和属性。
package test;
public class Test1 {
public static void main(String[] args) {
A a = new B();
try {
a.process();
} catch (Exception e) {
e.printStackTrace();
}
B b = new B();
b.process();
}
}
class B extends A {
void process() {
System.out.println("B");
}
}
class A {
void process() throws Exception {
System.out.println("A");
throw new Exception();
}
}题外话,子类重写父类抛异常的方法时,可以抛出相同异常或者不抛出异常。 或者父类异常的子类也可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然父类的方法需要抛出异常,你覆盖了这个方法,你要麼继续抛出,要麼就捕获处理异常。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询