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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么下边的程序总是提示非法语句开始了?请大家帮忙看看

class Demo
{
              public static void func()
              {
                     try
                     {
                              show();
                              System.out.println("A");
                     }
                     catch(Exception e)
                    {
                                 System.out.println("B");
                    }
             }
           public static void main(String[] args)
             {
                      try
                          {
                                 func();
                         }
                     catch(Exception e)
                         {
                                  System.out.println("C");
                          }
                        public static void show()throws Exception//将异常封装到方法中
                             {
                                        throw  new Exception();
                              }
                       System.out.println("D");
              }
}


11 个回复

正序浏览

RE: 关于封装异常的问题,求大家帮忙解决一下(已解决)

谢谢大家,我懂了!
回复 使用道具 举报
王晓新 发表于 2012-6-18 17:41
你的show()方法应该放到main方法外面来。我运行了一下,输出是
B
D

我知道自己为什么错了,谢谢!
但是这样答案应该是BD,因为主函数中catch执行的前提是try抛出异常,而在主函数的try执行完之后没有抛出异常,所以不会输出C
回复 使用道具 举报
public class diyitian {

        /**
         * @param args
         */
        public static void show()throws Exception//将异常封装到类中
    {
               throw  new Exception();
     }
       
         public static void func()
     {
            try
            {
                     show();
                     System.out.println("A");
            }
            catch(Exception e)
           {
                        System.out.println("B");
           }
     }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                try
        {
               func();
       }
   catch(Exception e)
       {
                System.out.println("C");
        }
      
     System.out.println("D");

        }

}
回复 使用道具 举报
刘笑 中级黑马 2012-6-19 11:34:30
9#
将show()方法放到main()方法外.本质:函数不能嵌套
回复 使用道具 举报
内部方法,java暂不支持

将show()方法放到main()方法外就0k了
回复 使用道具 举报
楼主你的show()方法应该定义在类中而不是在main()函数内
回复 使用道具 举报
因为try{func()}没有接收到异常,所以就不用进行catch处理了,也就不用打印C了

点评

哦,了解了!  发表于 2012-6-18 21:09
回复 使用道具 举报
你的show()方法应该放到main方法外面来。
  1. class Demo
  2. {
  3.               public static void func()
  4.               {
  5.                      try
  6.                      {
  7.                               show();
  8.                               System.out.println("A");
  9.                      }
  10.                      catch(Exception e)
  11.                     {
  12.                                  System.out.println("B");
  13.                     }
  14.              }
  15.              public static void main(String[] args)
  16.              {
  17.                       try
  18.                      {
  19.                                  func();
  20.                      }
  21.                      catch(Exception e)
  22.                       {
  23.                                   System.out.println("C");
  24.                        }
  25.                      
  26.                        System.out.println("D");
  27.               }
  28.                           public static void show()throws Exception
  29.                   {
  30.                                   throw  new Exception();
  31.                    }
  32. }
复制代码
我运行了一下,输出是
B
D
这里我有一点疑问,为什么没有打印C,try{func()}中func()方法的try{show()}先抛出异常,接着执行catch进行处理,这里不打印A我理解。当func()执行完后不就是执行main()方法中的catch么?最后再打印D
回复 使用道具 举报
class Demo1
{
              public static void func()
              {
                     try
                     {
                              show();
                              System.out.println("A");
                     }
                     catch(Exception e)
                    {
                                 System.out.println("B");
                    }
             }
           public static void main(String[] args)
             {
                      try
                          {
                                 func();
                         }
                     catch(Exception e)
                         {
                                  System.out.println("C");
                          }
                         }
                        public static void show()throws Exception {    //将异常封装到方法中
                             {
                                        throw  new Exception();
                                                                                //System.out.println("D");
                              }
                      // System.out.println("D");
              }
}

我在你的基础上改了一下,,,
回复 使用道具 举报
函数之间是平级的,不能在函数中定义函数,你那个show()方法定认在main()内,函数之前只能调用。不能定义。
把show()方法定认在外面,在用主函数调用就行了。
回复 使用道具 举报
你将下面这个方法写到main主函数中了,导致不能调用。            
public static void show()throws Exception//将异常封装到方法中
      {
             throw  new Exception();
      }
将这个方法放到mian函数外面。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马