一是B对。WAIT只能由NOTIFY激活。而NOTIFY只任意激活一个WAIT状态的线程。
二是你的RUN方法不是RUNNABLE接口声明的RUN方法,RUN方法是不带参数的。
三是你的程序错漏百出。正确如下:
import java.io.IOException;
 public class sub {
 public static void main (String[]args) {
 try {
  sub sb=new sub();
 sb.methodA();
 } 
 catch (IOException e) {
 System.out.println("Caught IOException"); } catch (Exception e) {
System.out.println("Caught Exception");
 }
 }
 public void methodA() throws Exception{
 throw new IOException ();
 }
 }
结果就是打印"Caught IOException"

解决方案 »

  1.   

    catch异常的时候,是先从第一个catch语句开始。如果所抛出的异常是第一个catch所捕获的异常或其子类,就用第一个catch语句就可以了,后面的catch语句不会再执行。如果抛出的异常不是第一个catch能捕获的,就会尝试第一个catch,直到找到能捕获的catch为止。
      

  2.   

    谢谢你 bigcrazy(大疯狂),再请教个问题就结。
     class A {
     public byte getNumber () {
     return 1;
     }
     } class sub extends A {
     public short getNumber() {
     return 2;
     } public static void main (String args[]) {
     sub b = new sub ();
     System.out.println(b.getNumber());
     }
     }
    会提示出错,但是B中的getNumber不是没形成覆盖么,为什么还要参照A的getNumber。
      

  3.   

    在一个类中任何具有相同名称的两个方法必须有不同的参数类型或者不同的参数数目,否则编译器拒绝它们。
    你的类SUB,继承自A一个getNumber方法,又自己声明一个getNumber方法。两个方法参数一致,所以编译器会认为有错。要覆盖必须参数类型或参数个数不同。