zoukankan      html  css  js  c++  java
  • Java基础第十六天总结——异常处理

    目录:

    一、异常概述与异常体系结构

    二、常见异常

    三、异常处理机制一:try-catch-finally

    四、异常处理机制二:throws

    五、手动抛出异常:throw

    六:用户自定义异常类

    /*---------------分割线-----------------*/

    一、异常概述与异常体系结构

    很多问题不是靠代码能够规避的:如客户输入格式、读取文件是否存在,网络是否始终保持通畅。

    语法和逻辑错误不是异常。

    Java程序在执行过程中所发生的异常事件可分为两类:

    Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如StackOverflowError和OOM。一般不编写针对性的代码进行处理。

    Exception:其他应编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:

    > 空指针访问

    > 试图读取不存在的文件

    > 网络连接中断

    > 数组角标越界

    分类:编译时异常和运行时异常

     

    1.运行时异常

    一般是编程时逻辑错误,java。lang.RuntimeException类及它的子类都是运行时异常。

    对于这类异常,可以不做处理,比较普遍。如果全部处理,会影响程序的可读性和运行效率。

    2.编译时异常

    指编译器要求必须处置的异常,即程序在运行时由于外界因素造成的一般性异常。编译器要求Java程序必须捕获或声明所有编译时异常。

    这类异常,如果不处理,可能会带来意想不到的结果。

    二、常见异常

     三、异常处理机制一、try-catch-finally

    Java采用的异常处理机制,是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁、优雅,易于维护。

    方式一:try-catch-finally

    方式二:throws+异常类型

    Java提供的是异常处理的抓抛模型。

     捕获异常:一个方法内抛出异常,该异常对象会被抛给调用者方法中处理。如果异常没有在调用者方法中处理,就继续抛给这个调用者方法的上层。直到异常被处理。

    这个过程称之为捕获异常。

    如果一个异常回到main(),并且main()也不处理,则终止程序。

    程序员通常只能处理Exception,而对Error无能为力。

     try

    补货异常的第一步是用try{...}语句块选定补货异常的范围,将可能出现异常的代码放在try语句块中。

    catch(Exceptiontype e)

    catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

    如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数。

    捕获异常的有关信息:

    与其他对象一样,可以访问一个异常对象的成员变量或调用它的方法。

    > getMessage() 获取异常信息,返回字符串

    > printStackTrace()获取异常类名或异常信息,以及异常出现在程序中的位置。返回值viod。

    finally

    > 捕获异常的最后一步是通过finally语句为异常处理提供一个出口,使得在孔志流转到程序的其他部分以前,能够对程序的状态作统一的管理。

    > 不论在try代码块中是否发生了异常事件,catch语句是否执行,catch语句是否有异常,catch语句中是否有return,finally块中的语句都会被执行。

    > finally语句和catch语句是任选的

    RuntimeException类或是它的子类异常Java自己也能捕获,并且编译通过,但运行时会发生异常使得程序终止。

    如果抛出的异常是IOException等类型的非运行时异常,则必须捕获,否则编译错误。也就是说,必须处理编译时异常,将异常捕捉,转化为运行时异常。

    四、异常处理机制二:throws

    声明抛出异常是Java中处理异常的第二种方式,一个方法中的语句执行时可能出现的某种异常,但不能确定如何处理这种异常,则此方法应显示的声明抛出异常,表明方法将不对这些异常进行处理,而由该方法的调用者负责处理。

    重写方法声明抛出异常的原则

    重写方法不能抛出比被重写方法范围更大的异常类型。在多态的情况下,对metthodA()方法的调用-异常的捕获按父类声明的异常处理。

     五、手动抛出异常

    Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出。

    首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。

    IOException e = new IOException();

    throw e;

    可以抛出的异常必须是Throwable或其他子类的实例。下面的语句在编译时将会产生语法错误。

    throw new String("want to throw");

    六、用户自定义异常类

    一般,用户自定义异常类都是RuntimeException的子类

    自定义异常通常需要编写几个重载的构造器

    自定义异常需要提供serialVersionUID

    自定义异常通过throw抛出

    自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。

    用户自定义异常类MyException,用于描述数据取值范围错误信息。用户自己的异常类必须继承现有的异常类。

    总结:异常处理5个关键字

    /******************************分割线*********************************/

    精简版:

    > 分类:编译时异常和运行时异常

    1、运行时异常
    2、非运行异常是IDE可以自行检测出来的,编译为字节码文件的时候发生的异常。

    > 处理异常的5个关键字:try catch 、throw、 throws、finally,一般都是直接抛出去,不用管

    > try catch,应该先把子类异常放在前面,父类异常放在后面。因为父类异常可能下面有多个子类异常,捕获异常会按顺序捕获,如果捕获到父类异常,下面的子类异常就不会被捕获,从而导致IDE报错。

    > finally是一定会执行的。

  • 相关阅读:
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    how to use automapper in c#, from cf~
  • 原文地址:https://www.cnblogs.com/zhoutie170821/p/11968692.html
Copyright © 2011-2022 走看看