A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程有愿 中级黑马   /  2012-7-6 19:08  /  1442 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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才对啊

3 个回复

倒序浏览
你的2个show方法只是声明了该函数会抛出异常
但运行的时候什么都没有干

如果要抛出AException
写成这样:
throw new AException("要写的异常信息");
回复 使用道具 举报
本帖最后由 邵阳 于 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
成功
失败

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 郑庆伟 于 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也一直没有运行。
               
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马