黑马程序员技术交流社区

标题: 多线程 wait方法 为啥不能抛 只能try [打印本页]

作者: 胡焱老师    时间: 2014-1-30 11:10
标题: 多线程 wait方法 为啥不能抛 只能try
在object中有个wait()这个方法 并且这个方法抛出了异常,为什么其它类使用这个方法的时候只能try 不能抛出呢 不是object类是所有类的父类吗,父类中方法抛出异常子类覆盖它的时候不是可以try 也可以抛吗 这个又怎么解释呢  






作者: 快乐的黑马    时间: 2014-1-30 17:45
所有类都是继承父类Object,父类可以抛出异常,但子类不行,是能try,哥们,是不是你记错了。
作者: 陈文杰    时间: 2014-1-31 22:03
哥们,注意是直接父类,在多线程中看直接父类。
作者: 榨菜    时间: 2014-2-2 20:45
我看了下API文档。

  1.       继承者 java.lang.Exception
  2.           继承者 java.lang.InterruptedException
复制代码


是继承自Exception。 而不是runtimeException的。
那就是编译时异常,所以要进行try

不知对不对,如果不对,请谅解哈
作者: e.c    时间: 2014-2-4 14:27
本帖最后由 e.c 于 2014-2-4 14:31 编辑

可以抛,但要注意一种情况:如果子类是覆盖父类的方法或实现父类方法时,父类的方法没有抛异常则子类也不能抛。
如下:Runnable接口中的run()方法没有声明抛异常,则子类T实现run()方法时也不能抛异常。myRun()则可以抛异常。
class T implements Runnable {
        public void run() {                   //Runnable中的public abstract void run();没有声明抛异常。则这里实现父类的run方法也不能抛
                System.out.println("start sleep...");
                try {
                        Thread.sleep(1000);
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                System.out.println("end sleep.s");
        }
        public void myRun() throws InterruptedException{               //这里可以抛
                System.out.println("start sleep...");
                Thread.sleep(1000);
                System.out.println("end sleep.s");
        }
}
作者: ↑↓ME→←    时间: 2014-2-4 16:43
学习啦。。。。。。。。。。




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