java异常

240 阅读3分钟

异常认识


异常是什么 :

Java异常是Java提供的一种识别及响应错误的一致性机制。是对问题的描述,将问题进行对象的封装。

异常的好处:

Java异常机制可以使程序中异常处理代码和正常业务代码分离,在有效使用异常
的情况下,异常能清晰的回答what,where,why这3个问题:异常类型回答了“什么
”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。

异常两大体系:

Throwable (所有异常都是从Throwable继承而来。)
    --Error
    --Exception
           --RuntimeException

Error:

所有编译时期的错误,以及系统错误,均由Error抛出。这些错误表示错误发生
在虚拟机自身,或发生在虚拟机试图执行时,如java虚拟机运行错误(Virtual
MachineError)、类定义错误。这些错误是**不可查**的,因为他们在应用程序
的控制处理能力之外。

Exception: 程序自身可以处理的异常。

Checked Exception:

可检查的异常,发生可预测。除RuntimeException及其子类外,都是CheckException。

UncheckException:

RuntimeException及其子类。如NPE空指针异常,除零算术异常,Error也是。

---

异常体系的特点:

异常体系中的所有类及建立的对象都具有可抛型,也就是说可以被throw和
throws关键字锁操作,只有异常体系具备这个特点。

throw和throws用法:

throw:定义在函数内,用于抛出异常对象;

throws:定义在函数上,用于抛出异常类,可以抛出对个,用逗号隔开。

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 -- 用在方法签名中,用于声明该方法可能抛出的异常。

自定义异常:

  • 产生原因:

    因为项目中会出现特有的问题,而这些问题并未被java锁描述或封装对象,所以对于这些特有的问题可以按照对java的封装思想,将特有的问题,进行自定义的封装。

  • 解决方法:

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

自定义的异常应该总是包含如下的构造函数:

  • 一个无参构造函数
  • 一个带有String参数的构造函数,并传递给父类的构造函数。
  • 一个带有String参数和Throwable参数,并都传递给父类构造函数
  • 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

异常处理方法:

通过try...catch语句块来处理:

【注意】:声明几个异常,对应几个catch块,不要定义多余的catch块
,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下
面。

    try
    {
       // 程序代码
    }catch(ExceptionName e1)
    {
       //Catch (捕捉异常,异常会被传到这里)
    }

throw或throws抛出到上层处理:

                    public class Name
            { 
    public void deposit(double amount) 
            throws RemoteException 
            {    // Method implementation   
            throw new RemoteException();  }  
            //Remainder of class definition}

Finally关键字:

    try{
    
      // 程序代码
    
    }catch(异常类型1 异常的变量名1){
    
      // 程序代码
    
    }finally{
    
      // 程序代码
    
    }