Java 异常

Java 异常

1.Error和Exception:

Error:是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错误一般表示代码运行时JVM出现问题。通常有Virtual MachineError(虚拟机运行错误)、

NoClassDefFoundError(类定义错误)等。比如说当jvm耗完可用内存时,将出现OutOfMemoryError。此类错误发生时,JVM将终止线程。非代码性错误。因此,

当此类错误发生时,应用不应该去处理此类错误。

Exception::程序本身可以捕获并且可以处理的异常。

2.捕获和抛出异常:

Java异常机制用到的几个关键字:try、catch、finally、throw、throws。

  •  try        -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
  • catch   -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
  • finally  -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
  • throw   -- 用于抛出异常。
  • throws -- 用在方法签名中,用于声明该方法可能抛出的异常。主方法上也可以使用throws抛出。如果在主方法上使用了throws抛出,就表示在主方法里面可以不用强制性进行异常处理,如果出现了异常,就交给JVM进行默认处理,则此时会导致程序中断执行。

异常的父子级: 

代码实现:

import org.w3c.dom.Text;

public class Demo1{
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try{
            //只要try中的代码出错就会到catch
            System.out.println(a/b);

        }catch (ArithmeticException e){//catch(捕获异常的类型)
            //只要报ArithmeticException的错误就会执行下面的代码
            System.out.println("ArithmeticException错误");

        }catch (Error e){ //catch可以写多个
            System.out.println("未知异常");

        }finally {
            System.out.println("不管报没报错都会执行finally");
        }

        //调用text方法
        new Demo1().text(a,b);

    }
    //假设这方法中,处理不了这个异常,可以用throws在方法上抛出异常
    //throws会将异常抛给调用它的程序
    public void text(int a ,int b) throws Error{
        if (b==0){
            //throw主动抛出异常 一般在方法中使用
            throw new ArithmeticException();
        }

    }
}

3.自定义异常:

如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常(checked exception)。如果要自定义非检查异常,则扩展自RuntimeException。

按照国际惯例,自定义的异常应该总是包含如下的构造函数:

  • 一个无参构造函数
  • 一个带有String参数的构造函数,并传递给父类的构造函数。
  • 一个带有String参数和Throwable参数,并都传递给父类构造函数
  • 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
 下面是IOException类的完整源代码,可以借鉴。
public class IOException extends Exception
{
    static final long serialVersionUID = 7818375828146090155L;

    public IOException()
    {
        super();
    }

    public IOException(String message)
    {
        super(message);
    }

    public IOException(String message, Throwable cause)
    {
        super(message, cause);
    }

    
    public IOException(Throwable cause)
    {
        super(cause);
    }
}

 

 

posted @ 2020-12-18 09:02  lovelife80  阅读(54)  评论(0编辑  收藏  举报