[Java] java中的异常处理

Java中的异常类都继承自Throwable类。一个Throwable类的对象都可以抛出(throw)。

Throwable对象可以分为两组。一组是unchecked异常,异常处理机制往往不用于这组异常,包括:

  • Error类通常是指Java的内部错误以及如资源耗尽的错误。当Error(及其衍生类)发生时,我们不能在编程层面上解决Error,所以应该直接退出程序。
  • Exception类有特殊的一个衍生类RuntimeException。RuntimeException(及其衍生类)是Java程序自身造成的,也就是说,由于程序员在编程时犯错。RuntimeException完全可以通过修正Java程序避免。比如将一个类型的对象转换成没有继承关系的另一个类型,即ClassCastException。这类异常应该并且可以避免。

剩下的是checked异常。这些类是由编程与环境互动造成程序在运行时出错。比如读取文件时,由于文件本身有错误,发生IOException。再比如网络服务器临时更改URL指向,造成MalformedURLException。文件系统和网络服务器是在Java环境之外的,并不是程序员所能控制的。如果程序员可以预期异常,可以利用异常处理机制来制定应对预案。比如文件出问题时,提醒系统管理员。再比如在网络服务器出现问题时,提醒用户,并等待网络服务器恢复。异常处理机制主要是用于处理这样的异常。

public class TestException
{
    public static void main(String[] args)
    {
        LearnCourse learnCourse = new LearnCourse();
        learnCourse.learnEnglish(-1);
    }
}
class LearnCourse
{
    public void learnEnglish (int t)
    {
        try{
            mark(t);
        }catch(Exception e){
            System.out.println("catch Exception");
            System.out.println(e.getMessage());
            t = 0;
        }
    }
    private void mark(int t) throws Exception
    {
        if(t<0){
            Exception e = new Exception("t is "+t+", t must be positive");
            throw e;
        }else{
            System.out.println("The time for learning English is "+t+" hours");
        }
    }
        
}

在catch中,我们使用getMessage()方法提取其异常中包含的信息。上述程序的运行结果如下:

catch Exception
t is -1, t must be positive

原文地址:https://www.cnblogs.com/frost-yen/p/4838684.html