黑马程序员技术交流社区

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

作者: 湛添友    时间: 2014-4-17 12:49
标题: 异常小问题?
public class RuntimeDmeo
{
        public static void main(String args[]) throws InterruptedException
        {
                                             
                Thread.sleep(1000);
               System.out.println(2);
}
}
为什么调用sleep
这里没有try 而是抛  
抛给虚拟机 收到异常了吧
收到异常为什么程序没有被终止
而是打印出2
虚拟机是怎么处理的?


作者: sheng6699    时间: 2014-4-17 13:10
1.如果线程执行到了阻塞方法,那么该方法取消阻塞,并将中断变量重新置为false。
2,InterruptedException提供了一种特殊的机制提前结束阻塞方法.
作者: 月光海    时间: 2014-4-17 13:16
打印出2是因为Thread.sleep(1000);没有异常产生,所以它就不会抛出异常给虚拟机,throw才是抛出异常,而throws只是声明异常,明白?
作者: 程序爱好者    时间: 2014-4-17 13:35
这个方法可能会抛出一个异常,如果你不对这个异常进行捕获和处理,编译器会报错(有些软件不会)
换句话说,强制性处理这个异常.
作者: Ricky_Nick    时间: 2014-4-17 13:35
声明异常,是表示有可能发生异常,为了编译通过,通常都会声明一下或者try/catch。这里抛出去了,可以让编译通过,而且异常没有发生,所以会有打印结果。。。。。
作者: luis    时间: 2014-4-17 15:14
声明异常,是表示有可能发生异常,不表示异常一定存在,而且你这个程序就不会发生异常,因为你所做的就是让主线程(main)睡10毫秒,时间到了它就会继续执行下面的的指令
作者: 湛添友    时间: 2014-4-17 17:40
月光海 发表于 2014-4-17 13:16
打印出2是因为Thread.sleep(1000);没有异常产生,所以它就不会抛出异常给虚拟机,throw才是抛出异常,而thr ...

是 啊  豁然开朗




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