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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 湛添友 中级黑马   /  2014-4-17 12:49  /  1169 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class RuntimeDmeo
{
        public static void main(String args[]) throws InterruptedException
        {
                                             
                Thread.sleep(1000);
               System.out.println(2);
}
}
为什么调用sleep
这里没有try 而是抛  
抛给虚拟机 收到异常了吧
收到异常为什么程序没有被终止
而是打印出2
虚拟机是怎么处理的?

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

6 个回复

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

是 啊  豁然开朗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马