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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-14 10:03  /  1209 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-2-17 22:55 编辑

请看下面一段代码:
  1. class Demo9
  2. {
  3.         Demo9()throws Exception
  4.         {
  5.                         if (条件)
  6.                                 throw new Exception();
  7.                         ....//代码
  8.         }

  9.         public static void main(String[] args)
  10.         {
  11.                 try
  12.                 {
  13.                         Demo9 d = new Demo9();
  14.                         ....//代码
  15.                 }
  16.                 catch (Exception e)
  17.                 {
  18.                         ....//代码
  19.                 }
  20.                 ....//代码
  21.         }
  22. }
复制代码
这段代码是先初始化构造函数呢,还是先检查异常呢?也就是说编译时是怎么进行的呢?

4 个回复

倒序浏览
  1. public classExten
  2. {
  3. staticint num =4;// 静态变量第二个
  4. {
  5. num +=3;
  6. System.out.println("b");
  7. }
  8. int a =5;{// 成员变量第三个
  9. System.out.println("c");
  10. }
  11. Exten()
  12. {// 类的构造函数,第四个加载
  13. System.out.println("d");
  14. }
  15. static
  16. {// 静态块,第一个加载
  17. System.out.println("a");
  18. }
  19. staticvoid run()// 静态方法,调用的时候才加载// 注意看,e没有加载
  20. {
  21. System.out.println("e");
  22. }
  23. publicstaticvoid main(String[] args)
  24. {
  25. newExten();
  26. }
  27. 一般顺序:静态块——>静态变量——>成员变量——>构造方法——>静态方法
  28. 1、静态代码块(只加载一次) 2、构造方法(创建一个实例就加载一次)3、静态方法需要调用才会执行,所以最后结果没有e
复制代码
所以应该先执行构造函数
回复 使用道具 举报
      首先必须要说明一下。不是在编译阶段进行的。java的异常分为Checked异常和Runtime异常。在java的设计规范里,希望Checked异常在编译阶段得到处理,例如我们常看到的IOException。只要进行了IO操作,编写代码时都会提醒处理IO异常。如果不处理,就需要抛出异常,抛出异常的目的是把异常交给JVM处理。
      你的代码肯定是先执行构造函数噻。你的构造函数把异常抛出了。然后在main函数中处理了异常。不过这些都不是在编译阶段进行,而是在运行阶段。JVM有自己的异常处理机制,在运行阶段遇到异常才会处理。
      大胆地说,这个问题意义不大,异常本就是不确定的,只有发生了才会处理。
      
回复 使用道具 举报
陈科宇 发表于 2013-2-14 12:09
首先必须要说明一下。不是在编译阶段进行的。java的异常分为Checked异常和Runtime异常。在java的设计 ...

我理解你的意思,可是处理和检查是两码事,不是吗?我只是不明白,在编译的时候,会不会检查这个异常是不是存在,还是说等发生不符合情况的条件了,再进行检查,并处理?
回复 使用道具 举报
黄玉昆 发表于 2013-2-14 13:27
我理解你的意思,可是处理和检查是两码事,不是吗?我只是不明白,在编译的时候,会不会检查这个异常是不 ...

我在回复中已经写过了。Checked异常编译器是会提醒你处理的。这就是它的检测。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马