黑马程序员技术交流社区
标题:
异常的问题
[打印本页]
作者:
程有愿
时间:
2012-7-6 19:08
标题:
异常的问题
class AException extends Exception
{ AException(String a)
{
super(a);
}
}
class BException extends AException
{ BException(String b)
{
super(b);
}
}
class CException extends Exception
{ CException(String c)
{
super(c);
}
}
class Fu11
{
void show() throws AException
{
}
}
class Zi11 extends Fu11
{
void show() throws BException
{
}
}
class Test11
{
void function(Fu11 f)
{
try{ f.show();}
catch(AException a)
{
System.out.println(a.toString());
}
}
}
public class ExceptionDemon2 {
public static void main(String[] args)
{
Test11 t=new Test11();
t.function(new Fu11());
t.function(new Zi11());
}
}
大家帮我看看这个为什么没有结果,我觉得应该结果应该输出为AException和BException才对啊
作者:
温少邦
时间:
2012-7-6 20:09
你的2个show方法只是声明了该函数会抛出异常
但运行的时候什么都没有干
如果要抛出AException
写成这样:
throw new AException("要写的异常信息");
作者:
邵阳
时间:
2012-7-6 21:22
本帖最后由 邵阳 于 2012-7-6 21:49 编辑
因为楼主的代码,根本没有出现问题,肯定不会报错,当然也不会抛出异常。
按正常代码运行,但是你的函数里面什么都没定义,肯定什么也不打印,就仅仅运行了一下程序。
class Fu11
{
void show() throws AException
{
} //里面都是空的。
}
class Zi11 extends Fu11
{
void show() throws BException
{
//里面都是空的
}
}
为了验证我是正确的,看下面代码。我在你的空代码处定义了打印语句
class AException extends Exception
{ AException(String a)
{
super(a);
}
}
class BException extends AException
{ BException(String b)
{
super(b);
}
}
class CException extends Exception
{ CException(String c)
{
super(c);
}
}
class Fu11
{
void show() throws AException
{
System.out.println("成功");
}
}
class Zi11 extends Fu11
{
void show() throws BException
{
System.out.println("失败");
}
}
class Test11
{
void function(Fu11 f)
{
try{ f.show();}
catch(AException a)
{
System.out.println(a.toString());
}
}
}
class ExceptionDemon2 {
public static void main(String[] args)
{
Test11 t=new Test11();
t.function(new Fu11());
t.function(new Zi11());
}
}
打印结果是:
D:\java\zuoye\ceshi4>java ExceptionDemon2
成功
失败
作者:
郑庆伟
时间:
2012-7-6 21:44
本帖最后由 郑庆伟 于 2012-7-6 21:53 编辑
给你分析一下:
Test11 t=new Test11();
首先创建t这个对象。
t.function(new Fu11());
然后t.function(new full()); 给t.function()方法传了一个Fu11()对象,
然后try{ f.show();}因为没有异常所以继续执行,调用show(),这时候show()声明一个异常,注意是声明不是抛出。这句运行结束继续执行。
t.function(new Zi11());
这句话跟上一句话一样,所以声明也没有打印,你应该理解错误了,注意是声明异常而不是抛出异常,所以catch也一直没有运行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2