在Java中,方法声明时可以使用throws关键字指定可能抛出的异常类型。当方法抛出这些异常中的任意一种时,调用该方法的代码就需要捕获或继续抛出这些异常。
在您提供的代码中,main方法后面加上了throws InterruptedException,这意味着在main方法中可能会抛出InterruptedException异常。在Java中,当一个线程处于sleep状态时,另一个线程调用该线程的interrupt()方法可以中断该线程的休眠,从而抛出InterruptedException异常。因此,如果在main方法中调用了Thread.sleep方法,那么就有可能会抛出InterruptedException异常。
在Java中,我们可以使用try-catch语句来捕获异常,也可以使用throws关键字将异常继续抛出,由该方法的调用者来处理。因此,如果在main方法中使用了Thread.sleep方法,那么必须显式地指定可能抛出的InterruptedException异常。如果没有指定该异常,编译器就会报错,并要求您处理该异常。
需要注意的是,throws关键字不会实际地抛出异常,它只是指定可能抛出的异常类型。当方法实际地抛出异常时,该异常会被传递给方法的调用者,并由它来处理。如果方法的调用者也没有处理该异常,该异常就会一直被传递,直到被最外层的try-catch语句处理,或者导致程崩溃。
class MyThread extends Thread {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println("MyThread is running. " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class JoinExample {
public static void main(String[] args) throws InterruptedException {
MyThread t = new MyThread();
t.start();
// 等待MyThread线程执行完成
t.join();
System.out.println("Main thread is finished.");
}
}