黑马程序员技术交流社区

标题: 异常的问题 [打印本页]

作者: 程有愿    时间: 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