Java中的异常有两种。
1.非运行时异常:这种异常必须在方法声明的throws语句中指定,或者在方法内捕获。
2.运行时异常:这种异常不必再 方法中指定,也不必在方法内捕获。
线程的run方法不支持在方法中指定throws语句,在抛出非运行时异常,需要捕获处理异常;在抛出运行时异常,默认的是在控制台 输出堆栈信息,并退出程序。Java提供了一种在线程里捕获和处理运行时异常的机制。
实现处理运行时异常的类
import java.lang.Thread.UncaughtExceptionHandler;
public class ExceptionHandler implements UncaughtExceptionHandler{
@Override
public void uncaughtException(Thread t, Throwable e) {
// TODO Auto-generated method stub
System.out.printf("An exception has been captured\n");
System.out.printf("Thread:%s\n",t.getId());
System.out.printf("Exception %s:%s\n",e.getClass().getName(),e.getMessage());
System.out.printf("Stack Trace\n");
e.printStackTrace();
System.out.printf("Thread Status:%s\n",t.getStackTrace());
}
}
实现一个抛出运行时异常的类 这里是企图将字符串转换成整数,这将抛出运行时的异常
public class Task implements Runnable{
@Override
public void run()
{
int number=Integer.parseInt("TTT");
}
}
主类的实现
public class RunMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Task task=new Task();
Thread thread=new Thread(task);
thread.setUncaughtExceptionHandler(new ExceptionHandler());
thread.start();
}
}
实现结果
可以看到打印出了异常处理类方法中的信息