• Java中异常分类和Throw和Throws的区别


    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表示可能抛出异常,并不一定会发生这些异常,调用者只是知道该方法可能出现的问题,可以预先给出处理方法
      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);
        }
    }
    
  • 相关阅读:
    页面表单里的图片上传ENCTYPE="multipart/form-data"
    OSGI
    httpClient使用中报错org.apache.commons.httpclient.HttpMethodBase
    DNSPod--国内最早提供免费智能DNS产品的网站,致力于为各类网站提供高质量的多线智能DNS免费解析
    spring security 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架
    Unable to parse request org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. null
    swfupload 上传报 security error # 2049 (security) 安全错误问题
    如何强制指定输入的参数必须为数字
    弹性盒子模型子元素垂直和水平居中
    Git常见错误处理
  • 原文地址:https://www.cnblogs.com/homeSicker/p/12956629.html
Copyright © 2020-2023  润新知