1.异常分类

Throwable是Java中所有错误和异常的超类。它的下一级是Error和Exception

1.1 Error(错误)

Error是指程序运行时系统的内部错误和资源耗尽错误。程序不会抛出该类对象。如果出现了Error,代表程序运行时JVM出现了重大问题,比如常见的OutOfMemoryError(OOM),这时应当告知用户并尽量让程序安全结束。

1.2 Exception(异常)

Exception是指程序可以自身处理的异常。Exception又分为检查异常(CheckedException)和运行异常(RuntimeException):

  • CheckedException:检查异常一般是外部错误,都发送在编译阶段,是我们在编码时应当可以预计会发生的异常情况,编译器通常会提示我们去捕获这些异常并进行处理。我们可以通过try-catch来捕获或者throws语句来抛出,否则编译器会提示不通过。常见的有:FileNotFoundException,SQLException,ClassNotFoundException。
  • RuntimeException:运行异常一般是Java虚拟机正常运行期间抛出的异常的超类,程序中可以处理这些异常,也可以不处理这些异常,编译器并不会提示我们来处理这些异常。但是这些异常通常都是编码出现了错误导致的,我们应当尽量避免出现这些异常。常见的有:NullPointerException(空指针),IndexOutOfBoundsException(下标越界),ClassCastException(类型强制转换异常)。

2.异常处理方法

在Java中,异常处理机制主要是:抛出异常捕获异常

2.1 抛出异常

遇到异常不进行具体的处理,而是通过throw、throws继续抛给调用者。这两者有一定的区别:

  • 位置区别:throw用在函数体内,后面跟具体的异常对象, throws用在函数方法上,后面跟一个或者多个异常类
  • 功能区别: throw表示一定抛出了某种特定异常对象,执行到throw后,会跳转会调用者,并且调用者会接收到该异常,throws表示可能抛出异常,并不一定会发生这些异常,调用者只是知道该方法可能出现的问题,可以预先给出处理方法

抛出异常后都是让调用者去接收并进行相关处理

2.2 捕获异常

通过try-catch语句在catch中捕获相关异常,并进行处理。try来捕获其中代码的异常,catch负责处理具体的异常。

 try {
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(new File("test.txt")));
} catch (FileNotFoundException e) {
System.out.println("FileNotFoundException文件未找到异常。");
}

一旦try中捕获的异常进行catch块中,程序将不再执行try后面的语句,同时也不会再进入其他catch块中,所以在多个catch块中应该将更加底层的catch放在前面,当与finally同时使用时,catch块中执行结束会进入finally中

public class ExceptionTest {
public static void main(String[] args){
try {
System.out.println("try1");
int i = 1/0;
System.out.println("try2");
}catch (ArithmeticException e){
System.out.println("ArithmeticException");
}catch (RuntimeException e){
System.out.println("RuntimeException");
}catch (Exception e){
System.out.println("Exception");
}finally {
System.out.println("finally");
}
}
}

执行结果:

try1
ArithmeticException
finally

3.常见异常

3.1 RuntimeException
  • 1、ArrayIndexOutOfBoundsException:下标越界异常,常见于数组索引值大于等于数组大小时抛出。
  • 2、IllegalArgumentException:参数非法异常,当方法的参数类型不正确会出现
  • 3、ArithmeticException:算术异常,比如除数为0的时候
  • 4、NullPointerException:空指针异常,当使用的对象为null时会出现,Java8中可以使用Optional来处理null
3.2 IOException
  • 1、IOException:操作输入输出流时出现。
  • 2、FileNotFoundException:文件未找到时出现
  • 3、EOFException:文件已结束,主要用于数据输入流的信号结束。

3.3 其它常见异常

  • 1、ClassNotFoundException:类找不到异常,在classPath中未能找到对于类时会出现
  • 2、SQLException:操作数据库时异常
  • 3、TimeoutException:超时异常

4.自定义异常

在实际开发中,通常在项目中封装一个自定义异常类BaseException来继承RuntimeException,业务异常可以继承BaseException。

public class BaseException extends RuntimeException {
public BaseException() {
super();
} public BaseException(String message, Throwable cause) {
super(message, cause);
} public BaseException(String message) {
super(message);
} public BaseException(Throwable cause) {
super(cause);
}
}

Java中异常分类和Throw和Throws的区别的更多相关文章

  1. 异常机制及throw与throws的区别(转)

    异常机制及throw与throws的区别 分类: Java2008-11-14 16:08 9672人阅读 评论(5) 收藏 举报 exceptionstringjavafunclass编译器 Jav ...

  2. java中的异常体系?throw和throws的区别?

    一.java中的异常体系 Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常.其中异常类Exception又分为运行时异常(Ru ...

  3. Java中异常关键字throw和throws使用方式的理解

    Java中应用程序在非正常的情况下停止运行主要包含两种方式: Error 和 Exception ,像我们熟知的 OutOfMemoryError 和 IndexOutOfBoundsExceptio ...

  4. java中异常的抛出:throw throws

    java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...

  5. java异常和throw和throws的区别

    之前在编程中编译完成后,运行时,会遇见一些常见的错误,如NullPointerException,ArrayIndexOutOfBoundsException等等 在今天重新回顾学习了java异常,总 ...

  6. Java中的throw和throws的区别

    Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...

  7. JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

    JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...

  8. Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

    如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型. 从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是 ...

  9. Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)

    Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)

随机推荐

  1. JS面向对象编程之对象

    在AJAX兴起以前,很多人写JS可以说都是毫无章法可言的,基本上是想到什么就写什么,就是一个接一个的函数function,遇到重复的还得copy,如果一不小心函数重名了,还真不知道从何开始查找错误,因 ...

  2. Netty(二):数据在ChannelPipeline中的流经

    本文目的:测试数据在ChannelPipeline中的流经顺序及状态. 先看本文的测试代码: AdditionalInBoundHandler:入站处理器,不做任何处理,只是在响应读事件时打印用来观察 ...

  3. Java通过反射技术动态创建对象(有参、无参构造)

    实现类: package com.ljy; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTarge ...

  4. 软件——Jira是什么

    JIRA这个工具接触有好几年了,在多个海外项目上都用过这个工具.去年又在项目上深度使用后就有点爱不释手了,回国后也在找机会推荐给其它项目上用.最近正好有新项目需要用,借这个机会把JIRA的配置学习的过 ...

  5. Java 经典面试题:聊一聊 JUC 下的 CopyOnWriteArrayList

    ArrayList 是我们常用的工具类之一,但是在多线程的情况下,ArrayList 作为共享变量时,并不是线程安全的.主要有以下两个原因: 1. ArrayList 自身的 elementData. ...

  6. 挑战程序竞赛 反转开关 poj3276

    这个我其实也没有看太懂它的证明过程. 1.若某一个位置被翻转了n次,则其实际上被翻转了n%2次. 2.分析易知翻转的顺序并不影响最终结果. 3.现在我们着眼于第1个位置,可知若要将第1个位置进行翻转只 ...

  7. Java实现栈(链表和线性表两种方法实现)

    一.栈的介绍 任何数据结构都是一种规则 栈就是在最基础的结构--线性结构和链式结构上面定义规则形成的 如果对基本数据结构(线性表和链表)有疑问的同学可以看我之前的博客:https://www.cnbl ...

  8. 【FPGA篇章五】FPGA函数任务:对讲解函数与任务专题展开详解

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 任务和函数也属于过程块,多用于仿真文件设计中,使用两者的目的有所区别: 函数(function):对输入的值执行一些处理,返回一个新的值. ...

  9. 如何得知某期刊是否被EI收錄?

    转载:http://tul.blog.ntu.edu.tw/archives/4627 若因投稿或評鑑需要,欲得知某期刊是否被 EI 收錄,其實就是確認該期刊是否包含在 EV 平台中的 COMPEND ...

  10. 单片机之静态局部变量static

    HL-1慧静电子 上程序: main.c #include <reg52.h>#include "Timer.h" /********P1口低有效*********** ...