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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史卜坤 中级黑马   /  2012-7-13 20:22  /  1551 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;

public class Demo extends Thread {

        public void run() throws Exception {

                for(int x=0; x<5; x++) {


                                Thread.sleep(2000);  //不抛异常提示这方法需要抛出InterruptedException; 于是我抛出了它的父类Exception,结果错误是这样 :Demo 中的 run() 无法实现 java.lang.Runnable 中的 run();被覆盖的方法不抛出 java.lang.Exception我没有实现Runnable接口!这个异常只能处理不能抛出?

                                System.out.println(x);

                }

        }


        public static void main(String[] args) throws Exception {

                Demo d = new Demo();

                d.run();

        }

}



只能处理了

    可和Runnable接口有什么关系?



评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
你的run方法是重写的Thread的run方法
Thread的run方法并没有抛出异常,所以你的重写的run方法也不能抛出。
只能try catch语句块捕获,然后你自己来处理。
你创建线程用的是继承模式,是直接继承Thread.
Runnable是个接口,创建线程采用实现模式才会用到的。

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
线程类中的Run()方法没有抛出异常,所以你也不能抛出Run()方法没有的异常

子类不能抛出父类没有的异常


所以你这个地方就只能处理不能抛了
回复 使用道具 举报
你得记得异常处理的原则:
1、只要异常没被处理就必须在函数上声明异常,如果处理了就不用声明;判断是否处理就看catch语句是否有对应的处理语句;
2、异常出现在子父类覆盖中,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类或者不抛;
3、如果父类方法抛出多个异常,那么子类在覆盖该方法时,子类只能抛出父类异常集的子集;
4、如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法是也不可以抛出异常,如果子类发生了异常,那么就必须自己处理该异常。
在你的代码中,你在run方法中抛出了异常,而Demo的父类Thread的run方法是不抛出异常的,所以你这里其实并没有重写run方法。要想重写run方法,你必须处理异常。出现“Demo 中的 run() 无法实现 java.lang.Runnable 中的 run();被覆盖的方法不抛出 java.lang.Exception我没有实现Runnable接口!”的提示,是因为Thread本身是实现Runnable接口的run方法的子类,而Runnable的run方法不抛出异常,这里Runnable实际是Demo的父类的父类,根据上边的原则,就会有以上提示。

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马