错误:Error 错误是处理不了了,因为它往往是系统层面上的

一.异常:

1.异常的分类:

1.1运行时异常:

程序执行期间抛出的异常 , 不强制理解处理。凡RuntimeException 及其子类都是运行时异常。

1.2检查异常:

编译时出现的异常 ,必须立即处理,否则编译不过,除了运行时异常意外的其他异常都是检查异常

常见的异常:

空指针异常 NullPointException
数组下标越界异常 ArrayIndexOutBounds
类型转换异常 ClassCasException
类找不到异常 ClassNotFoundException

2.异常的处理

2.1 捕获处理

  1. 对于检查性异常,通过 try catch finally 关键字 实现<br /> try{ } <br /> 尝试捕获,把可能出现异常的代码放入其中 [ 必须的 ]<br /> catch( 异常类型 e ){ } <br /> 捕获到异常,在这里可以做异常的修复处理[ 可以有多个,如果是运行异常可以没有,那也就处理不了异常了]<br /> finally{ } <br /> 始终执行的语句块,无论是否真的触发异常它都要执行。[ 可以选 ] <br /> <br /> **细节:**<br />** 如果出现多个catch 必须 子异常再前 父异常在后**<br />** 如果出现多个catch 也可简化成 使用一个最大异常来捕获**

2.2 异常抛出

  1. 声明异常抛出的方式处理异常,利用一个 throws 关键字 。在方法的签名出添加 异常声明。<br /> 细节 声明的异常必须与待处理异常类型相同或更大。如果内部待处理异常有多个,也可以声明多个,<br /> 有时候为了简洁也可以抛出最大的异常比如Exception。<br /> 子类重写父类或者实现类重写接口中的方法,必须不能抛出比上级更大的异常。<br /> 语法 : .... xxxx() throws 异常类名1,异常类名N

3. 自定义异常

3.1 理解自定义异常

Java 提供了不同的异常类,不同异常类是为了描述不同的意外情况。在实际开发中,有一些业务上的意外情况,
没有现有的异常类来描述。比如 转账,转账金额超了余额,
可以使用一个比如 MoneyTooLessException。自定义异常一般都是服务于业务逻辑的异常。一旦违背了业务规范则抛出自定义异常。
体会: 使用自定义异常体现了 规范性 以及可以实现代码解耦合( 异常的产生 和处理分开 )

3.2实现自定义异常:

需要自己编写一个类 去继承 Exception , 意味着我们这个类是一个检查异常。
如果继承RuntimeException 就意味着这类是一个运行时异常。

  1. class myException extends Exception{
  2. private int num;
  3. public myException(int num) {
  4. this.num = num;
  5. }
  6. public int getNum() {
  7. return num;
  8. }
  9. public void setNum(int num) {
  10. this.num = num;
  11. }
  12. @Override
  13. public String toString() {
  14. return "myException{" +
  15. "num=" + num +"超出异常"+
  16. '}';
  17. }
  18. }

3.3 使用自定义异常:


/
常用方法:
String String getMessage(); 返回异常描述
void printStackTrace(); 返回跟踪程序跟踪记录
String toString(); 包含一个异常描述的String对象

/

  1. try {
  2. TestException(110);
  3. } catch (myException e) {
  4. System.out.println("");
  5. e.printStackTrace();
  6. }
  7. public static void TestException(int num) throws myException {
  8. if(num>100)throw new myException(num);
  9. }