黑马程序员技术交流社区

标题: 关于编译失败的一个小问题 [打印本页]

作者: 楚轩    时间: 2014-5-25 11:01
标题: 关于编译失败的一个小问题
本帖最后由 楚轩 于 2014-5-25 11:11 编辑

class Demo1
{
        public static void main(String[] args)
        {
                try
                {
                        showExce();
                        System.out.println("A");
                }
                catch (Exception e)
                {
                        System.out.println("B");
                }
                finally
                {
                        System.out.println("C");
                }
                System.out.println("D");
        }
        public static void showExce()throws Exception
        {
                throw new Exception();
        }
}
/*Demo1和Demo2中的输出"A"语句都是无法访问到的语句,
  为什么一个编译可通过,一个编译失败呢?  还是有点不明白,编译失败的情况是怎么划分或有哪些情形。
  */
class Demo2
{
        public static void func()
        {
                try
                {
                        throw new Exception();
                        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");
                }
                System.out.println("D");
        }
}



作者: e10my    时间: 2014-5-25 12:05
本帖最后由 e10my 于 2014-5-25 19:37 编辑

demo2中 你将
  1.                         System.out.println("A");
复制代码

写在了
  1.                         throw new Exception();
复制代码

之后
抛出异常之后 这之后的语句将不会执行 这是不允许的(无论如何都不会执行到)。 所以会出现语法错误

  1. Test2.java:20: 无法访问的语句
  2.                         System.out.println("A");
  3.                         ^
  4. 1 错误
复制代码

反正在你抛出异常之后就不会执行后面的语句那么干脆删掉好了

  1. public class Test2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 try
  6.                 {
  7.                         func();
  8.                 }
  9.                 catch (Exception e)
  10.                 {
  11.                         System.out.println("C");
  12.                 }
  13.                 System.out.println("D");
  14.         }
  15.                 public static void func()
  16.         {
  17.                 try
  18.                 {
  19.                         throw new Exception();
  20.                         //System.out.println("A");

  21.                 }
  22.                 catch (Exception e)
  23.                 {
  24.                         System.out.println("B");
  25.                 }
  26.         }
  27. }
复制代码

像这样 。
updata :

有类似的错误如:

  1.                 for(int i = 0; i<=4;i++){
  2.                         break;
  3.                         System.out.println("a");
  4.                 }
复制代码

以上代码也是由于输出语句无法执行到而错误信息:
Unreachable code [无法执行到的代码]

这样的情况毕老师的课程中 3-10 有详细的解释

ps :感谢管理员加分!


作者: lzhuas    时间: 2014-5-25 12:33
楼上正解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2