JavaSE-异常

2019-12-08  本文已影响0人  雷哒哒

目录

[TOC]

第一章:认识异常

1.1-什么是异常?

​ 异常,在Java程序中指的是:因程序问题而中断程序执行的现象。

1.2-异常分类

​ 在Java中,为了维护程序正常执行,Java提供了处理异常的异常机制(异常类)。

​ 在Java提供的异常机制中,其中java.lang.Throwable是根类,而根类的派生类有java.lang.Errorjava.lang.Excepiton两个子类。

Error,错误(绝症),该类型异常在程序中无法处理,只能尽量避免。

Excepiton,编译期异常(写源代码时)(小毛病,比如:类似感冒),该类型异常在程序中是可处理的。Excepiton类型还有一个子类RunTimeException,表示运行期异常(程序运行的过程中),该类型异常在程序中也是可处理的。

​ 为了更好的区分以上描述的异常分类,我们看以下程序。

// 【Error异常】
// Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
// 内存溢出。超出了分配给JVM内存大小。
// 该程序只能修改源代码解决问题。
int[]nums = new int[1024*1024*1024];

// 【Exception异常】
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// Unhandled exception: java.text.ParseException
// 此处在编写源代码时就发生异常,该异常后续可以通过相关的处理机制处理和避免
Date date = format.parse("2083-10-10"); 

// 【RunTimeException异常】
int[] nums = {1,2,3};
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
// 在程序运行时出现的异常,数组下标超出。该异常可以通过相关异常机制处理
System.out.println(nums[4]);

1.3-异常产生的过程

在编程中,为了更好的处理异常,我们首先要了解异常产生的过程。下面通过一段异常代码来分析。

第二章:处理异常

2.1 关键字

异常相关的关键字有:

2.2 抛出异常-throw

2.3 Objects非空判断

​ Objects中提供了一个方法,可以检测一个对象为null并抛出异常,我们来应用一下,并查看其源代码更好的理解throw关键字的应用。

2.4 声明异常-throws

当程序抛出一个异常对象给调用者时,调用者必须要处理异常,此时可以选择throws关键字来处理。

throws关键字的作用就是把异常对象继续抛给其他调用者,若其他调用者没有处理异常,则最终会抛给JVM来处理。

2.5 捕获处理异常-(try-catch)

throws声明异常的弊端是:异常后续代码无法执行(因为交给了JVM,JVM会终止程序)。

try-catch可以让调用者处理异常,并会继续执行后续程序。

2.6 finally代码块

2.7 异常处理注意事项

第三章:自定义异常类

3.1 为什么要自定义异常类?

​ 我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN没有定义好的,此时我们根据自己业务的异常情况来定义异常类。例如年龄负数问题,考试成绩负数问题等等。

3.2 什么是自定义异常类?

​ 在开发中根据自己业务的异常情况来定义异常类.

​ 自定义一个业务逻辑异常: RegisterException。一个注册异常类。

3.3 如何定义异常类

  1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。
  2. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。

3.4 代码

要求:我们模拟注册操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。

  public static void main(String[] args)  {
    // 接收用户注册的用户名
    String name = new Scanner(System.in).next();
    try{
      check(name);
    }catch (RegisterException e){
      e.printStackTrace();
      return;
    }
    System.out.println("注册成功");
  }

  public static void check(String n) throws RegisterException{
    String[]users={"张三","李四","王五"};
    for (int i = 0; i < users.length; i++) {
      if (n.equals( users[i])) {
        throw new RegisterException("亲,该用户名已经注册");
      }
    }
  }
 

public class RegisterException extends Exception{
  public RegisterException(){
      super();
  }
  public RegisterException(String message){
      super(message);
  }

}

上一篇 下一篇

猜你喜欢

热点阅读