15036188778

您所在位置: 首页> 学习课程> java培训学校 | java自定义异常处理

java培训学校 | java自定义异常处理

发布百知教育 来源:学习课程 2019-09-26

为什么需要自定义异常类:


在Java中不同的异常类分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN公司没有定义好的,此时我们根据自己业务的异常情况来定义异常类。

什么是自定义异常类:在开发中根据自己业务的异常情况来定义的异常类


自定义一个业务逻辑异常:LogicException.


异常类如何定义:


方式1:自定义一个受检查的异常类自定义类并继承于java.lang.Exception.

方式2:自定义一个运行时期的异常类:自定义类并继承于java .lang.RuntimeException.


模拟邮箱已被注册的情况:


java培训学校



package com_520it_05_loggicException;


//业务逻辑异常

public class LogicException extends RuntimeException {

  private static final long serialVersionUID = 1L;


  public LogicException() {

    super();

  }


  /**

   * 

   * @param message  表示当前异常的原因/信息

   * @param cause    表示当前异常的根本原因

   */

  public LogicException(String message, Throwable cause) {

    super(message, cause);

  }


  public LogicException(String message) {

    super(message);

  }


}

package com_520it_05_loggicException;


public class RegisterDemo {

  //模拟数据库中已经存在的账号

  private static String[] names = { "will", "luky", "lily" };


  public static void main(String[] args) {

    try {

      //可能出现异常的代码

      checkUsername("will");

    } catch (LogicException e) {

      //处理异常

      String errorMag = e.getMessage();

      System.out.println("给用户看:" + errorMag);

    }

  }


  public static boolean checkUsername(String username) {

    for (String name : names) {

      if (name.equals(username)) {

        throw new LogicException(name + "账户已被注册!");

      }

    }

    return false;

  }

}


解决开车上班案例


package com_520it_05_loggicException;


//车坏了的异常

class CarWrongException extends RuntimeException {

  private static final long serialVersionUID = 1L;


  public CarWrongException(String message, Throwable cause) {

    super(message, cause);

  }


  public CarWrongException(String message) {

    super(message);

  }

}


//上班迟到异常

class LateException extends RuntimeException {

  private static final long serialVersionUID = 1L;


  public LateException(String message, Throwable cause) {

    super(message, cause);

  }


  public LateException(String message) {

    super(message);

  }

}


//车

class Car {

  public void run() {

    int a = 2;

    if (a == 2) {//爆胎了

      throw new CarWrongException("车爆胎了!");

    }

    System.out.println("开车去上班!");

  }

}


//上班的人

class Worker {

  private Car car = null;


  Worker(Car car) {

    this.car = car;

  }


  public void gotoWork() {

    try {

      car.run();//正常开车去上班

      System.out.println("美好的一天!");

    } catch (CarWrongException e) {

      e.printStackTrace();

      //车坏,出现异常

      this.walk();

      throw new LateException("迟到原因:" + e.getMessage());

    }

  }


  private void walk() {

    System.out.println("走路去上班。");

  }

}


//测试类

public class WhyDemo {

  public static void main(String[] args) {

    Car c = new Car();

    Worker worker = new Worker(c);

    try {

      worker.gotoWork();

      System.out.println("老板面无表情!");

    } catch (LateException e) {

      System.out.println("老板发飙了!");

      e.printStackTrace();

    }

  }

}


运行结果:


java培训学校


java培训学校


异常转译和异常链


异常转译:当位于最上层的子系统不需要关心底层的异常细节时,常见的做法是捕获原始的异常,把它转换为一个新的不同类型的异常。再抛出新的异常。

根据上述例子:我的车抛锚了,我在catch中重新抛出一个新的异常(LateException)给我的调用者(老板)我们不能把车的异常信息抛给老板看,因为老板不关心这些细节,关心的我是否迟到。


异常链:把原始的异常包装为新的异常类,从而形成多个异常的有序排列,有助于查找异常的根本原因。


Java7的异常新特性


Android用不到Java7,支持的是Java5/Java6的语法;


1、增强的throw;


java培训学校


2、多异常捕获;


java培训学校



3、自动关闭资源。


java培训学校


圆括号里面是打开资源


java培训学校



处理异常的原则



处理异常的原则:

1、异常只能用于非正常情况,try-catch的存在也会影响性能;

2、需要为异常提供说明文档,比如java doc,如果自定义了异常或某一个方法抛出了异常,我们应该记录在文档注释中;

3、尽可能避免异常。如:NullPointerException做如下处理:

String str = null;

if (str != nul1) {

    Syatem. out.println(str.length);

}


4、异常的粒度很重要,应该为一个基本操作定义一个try-catch块,不要为了简便,将几百行代码放到一个try-catch块中;

5、不建议在循环中进行异常处理,应该在循环外对异常进行捕获处理(在循环之外使用try catch);

6、自定义异常尽量使用RuntimeException类型的。



小结


异常需要掌握:


1、五个关键字:try,catch,finally,throw,throws;


2、异常体系的两个继承结构;


    21)Throwable类有两个子类(Error和Exception);

    2.2)Exception类有一个子类RuntimeException;RuntimeException类及其子类称之为:runtime异常。Exception类和子类中(除了RuntimeException体系):checked异常。


3)、定义异常类


面试题:


1)Error和Exception的区别和关系;

2)checked异常和runtime异常的区别;

3)如何保证一段代码必须执行到(finally);

4)finally中的代码一定会执行吗?

5)finally和return的执行顺序?(关注finally里面的两道题)

6)throw和throws的区别?

7)列举5个常见的异常类;

8)列举5个常见的Runtime异常类;

ArithmeticException:算术异常

NullPointerException:空指针异常

ArrayIndexOutOfBoundsException:数组索引越界

 StringindexOutofBoundsE xception:String操作中索引越界

NumberFormatException:数字格式化异常

CassCastException:类型强制转换异常


java培训学校:http://www.baizhiedu.com/java2019


上一篇:Java基础第一阶段知识点,招实习的面试官都在问这些

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请