Java基础复习05Object的equals方法和异常

Object类的equals方法

boolean equals(Object obj)

** 所有类都是Object的子类,Obj的equals方法比较的是地址,

我们使用需要比较值需要重写equals方法,数组/集合/String已经重写好,我们写类可以自动生成equals方法(重写后)

 

异常(程序编译器或运行期出现的问题就是异常)

  • 异常继承体系

Throwable

       --Error:错误

       --Exception:异常   

              -- 编译时异常

              -- 运行时异常

 

       继承体系图如下

Java基础复习05Object的equals方法和异常

  • 异常的分类

-- 编译时异常

-- 运行时异常

异常和错误的区别

  java.lang.ArithmeticException:数学运算异常

  java.lang.OutOfMemoryError:内存溢出错误

  • 如何判断程序出现的问题是异常还是错误?

  * 根据控制台输出的异常类名判断

  * 如果类名是以Exception结尾,则是异常。

  * 如果类名是以Error结尾,则是错误

  • 异常和错误的区别

  异常:可以对异常进行处理,如果不处理程序直接奔溃。

  错误:一般是系统产生的,无法针对错误进行处理,一旦出现错误,只能修改代码,否则程序无法继续运行。

 

处理方式

JVM默认处理:

--将异常信息输入到控制台

--结束程序运行

手动处理:

--1.捕获异常

单catch处理

--   try {

      // 可能出现异常的代码

   } catch(异常类名 变量名){

      // 处理异常的代码

   }

单catch处理格式说明:

   * try代码块

     用来存放可能出现异常的代码。

   * catch代码块

      用来存放处理异常的代码。 

 

多catch处理格式说明:

--try代码块

     用来存放可能出现异常的代码。

   * catch代码块

      用来存放处理异常的代码。 

 

注意事项:

   * try里面的代码一旦出现异常,后续的代码就不会执行,直接匹配catch代码块。匹配成功执行对应代码块的代码。

多个catch中使用异常类是有顺序要求

平级关系:没有继承关系异常类,没有先后顺序要求。

上下关系:有继承关系的异常类,越高级的父类要在越下面

--2.抛出异常

throw和throws关键字概述

      throw关键字的作用:将异常对象抛出,抛给方法调用者,并结束当前方法的运行。

      throws关键字的作用:用来标识当前方法可能出现的异常类型,告诉调用者该方法可能出现异常类型。

  

  throw关键字使用格式

  * throw new 异常类名("异常信息");

  

  throws关键字使用格式

  * 修饰符 返回值类型 方法名(参数列表) throws 异常类名1,异常类名2...{

  }

  

  throw关键字使用位置:使用在方法体中。

  throws关键字使用位置:使用在方法声明上。

**子类重写方法时方法声明不能声明比父类大的异常

 

finally代码块

finally代码块的特点

   * 只要进入的try,不管try代码块中的代码是否出现异常都会执行该代码块中的代码。

 

finally的作用

   * 主要是用来释放资源。比如,关闭IO流,关闭数据库资源。

 

运行时异常和编译时异常

运行时异常的概念

   RuntimeException及其子类的异常都是运行时异常。

  

编译时异常的概念

   除了运行时异常以外的所有异常都是编译时异常。

  

运行时异常的特点

   * 方法声明上声明的异常是运行时异常时,则方法调用者可以处理,也可以不处理。

   * 方法体中抛出的异常是运行时异常,则方法声明上可以声明,也可以不声明。

  

编译时异常的特点

   * 方法声明上声明的异常是编译时异常时,则要求方法调用者一定要处理。

   * 方法体中抛出的异常是编译时异常且没有捕获处理,则要求方法声明一定要声明该异常。

 

自定义异常

自定义异常步骤

   命名规范:XxxxException

   继承异常类:

      Exception:编译时异常(要求调用者一定要处理的异常)

      RuntimeException:运行时异常(不要求调用者一定要处理的异常)

     

   构造方法:

      有参数构造

      无参数构

案例:Person类,有age成员变量,如果赋值age的值为负数,则抛出一个自定义异常对象:NoAgeException

 

***是直接跟用户打交道的,则千万不要抛出处理,要捕获处理。