16 Java中异常的处理

JavaSE 基础之十六

16 Java中异常的处理

① 异常的概念及分类

1. 异常的概念

  1. 异常指的是在运行期间出现的错误。(程序开始执行,在执行期内出现的问题。出现异常后要关注异常的类型以及异常出现的行号)
  2. 在Java中,Java的异常是Java提供的用于处理程序错误的一种机制。
  3. 异常处理机制:一旦异常发生以后,使用异常处理机制让程序不会直接中断或者影响虚拟机运行。

2.异常的分类

  1. 根基类:Throwable
  2. 子类:Exception、Error
  3. Exception:
    • 用户的错误。或者程序无法预见的一些问题。所有异常的父类。很多的子类,提供了很多的子类,每一种子类都对应到异常情况。
    • 一旦出现Exception这种异常,需要开发者自己去处理(捕获)。
  4. Error:
    • 称为错误(不是异常)。JVM生成并抛出,虚拟机错误、动态链接失败之类的等等。
    • 程序控制不了,用户也无法控制。JVM的运行环境问题。

② 异常的结构体系

  1. Throwable:所有异常的根基类,也可以抛出

    1. Exception:表示异常,开发过程中可以进行处理

      • 检查异常:编译器要求必须处理的异常,不处理程序无法运行。当代码没有运行的时候,编译器就检查出来的问题。
      • 非检查异常:编译器不强制要求处理的异常。虽然在运行中有可能出问题,但是不要求进行处理。
    2. Error:表示错误,开发过程程序无法控制和处理
  2. 捕获异常的语法
    语法1:
    try{
    	// 运行过程中要执行的逻辑代码
    	// 这段代码可能会出现问题,捕获异常
    
    }catch( Exception e){    // 声明一个父类异常,接受任何一个异常
    
    // 提示当前系统出现了什么样的异常
    
    }
    
    语法2:
    try{
    
    }catch(  ){    
    
    }catch(  ){   
    
    }catch(  ){    
    
    }
    
    语法3:
    try{
    
    }catch(  ){    
    
    }finally{   
    
    }
    // 为异常提供了一个统一的出口,使得当前程序在跳转到另外程序的流程之前,能够对程序进行统一的管理。
    // 无论try模块中的内容是否执行,finally代码都执行一次。
    // finally里边通常执行的内容是资源的关闭或者日志的记录。
    
    语法4:
    try{
    
    }finally{   
    
    }
    
    // 对于某些“可疑代码”在操作的时候直接try起来,异常不需要管。
    

③ 异常的使用

1. 异常的执行流程

  方法栈:方法在调用的过程中,先执行的方法后退出。
  在方法执行中,方法压入到方法栈中,在某一个方法中出现了运行时异常,没有处理这种异常,后边方法的内容将无法执行,异常抛给了虚拟机,中断了虚拟机继续运行。

2. 申明并抛出异常

  在本方法中,如果出现了异常,本方法可以不进行处理,抛给调用者处理,将异常一层一层的往外抛,在达到虚拟机之前处理好,整个程序运行流程也不受影响。
  throw:将异常进行抛出(动作)
  throws:声明将要抛出何种类型的异常(声明)

重写方法时候,子类与父类异常问题:
  1. 父类方法没有抛出异常,而子类重写方法抛出了异常,不允许,编译不通过。
  2. 父类抛出了异常,子类重写方法抛出与父类同样的异常,没有问题。
  3. 父类抛出了异常,子类重写方法不抛出异常,编译器能通过,但是不推荐这样写。
  4. 父类抛出一个Exception,子类可以抛出比Exception小的异常,子类不能不父类大。
  5. 父类抛出比子类小的异常,不行,编译报错。
  6. 父类抛出一个Exception,子类抛出多个子异常。编译通过。
总结:子类重写方法抛出的异常,要么与父类一样,要么比父类小。

3. 自定义异常

  1. 好处:在团队开发过程中,都是分模块、分功能来进行开发的,在项目中统一制定自己的异常,对外统一显示内容。
  2. 作用:
    1. 在用户发请求进行数据验证的时候,如果数据验证失败,自己抛出自定义异常。
    2. 在开发过程中,遇到某些逻辑上的问题,判断性别出现中性的时候。java没有提供性别中性异常,自定义。
    3. 系统提供的异常,如果直接给用户,体验不是特别好,包括异常的信息、代码。代码中能抛出去的异常,用户处理过的异常。
  3. 要求:
    1. 不管是自定义异常还是系统提供的异常,都必须是Throwable的子类。
    2. 写一个检查性异常,需要写一个类来继承Exception。
    3. 写一个运行时异常,需要写一个类来继承RuntimeException。

原文地址:https://www.cnblogs.com/Gavin520/p/10580688.html

时间: 2024-10-03 15:01:29

16 Java中异常的处理的相关文章

八、java中异常机制

一.为什么要有异常处理机制? java中的异常处理机制简单的讲就是try..catch..finally的使用. 程序难免会出现错误, 如果没有异常处理机制, 那么程序员在编写代码的时候就必须检查特定的结果, 并在程序的很多地方去处理它. 有了异常处理机制后,就不必在每个方法调用处都检查, 只需要用try包裹住可能发生异常的代码段, 这样做的好处是: 1.降低了代码的复杂度,正如上面所说的,不需要每个方法调用处都去检查: 2.将“描述正常情况下应该做什么事情”和“如果出了错怎么办” 的逻辑分开:

《java中异常和错误》

异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误:它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务

[转载]Java中异常的捕获顺序(多个catch)

http://blog.sina.com.cn/s/blog_6b022bc60101cdbv.html [转载]Java中异常的捕获顺序(多个catch) (2012-11-05 09:47:28) 转载▼ 标签: 转载 分类: 转载 原文地址:Java中异常的捕获顺序(多个catch)作者:leesa Java代码 import java.io.IOException; public class ExceptionTryCatchTest { public void doSomething(

java中异常注意的细节1

/* public class Test{ public static void main(String[] args){ int i=0; try{ func();//区别就是该函数抛出的异常被封装了,外界不知道到底会不会发生该异常 System.out.println("i = " + i++);//所以这句话是有机会执行的 }catch(Exception e){ System.out.println("i = " + i++); } } static voi

java中异常注意问题(发生在多态是的异常问题)

/* 异常的注意事项: 1,子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类. 2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集. 简单说:子类覆盖父类,只能抛出父类的异常或者子类或者子集. 注意:如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛.子类不能抛出比父类多的异常.就只能try...catch */ class A extends Exception{ A(String msg){ super(msg); } } class

java中异常注意的细节2

class A extends Exception{ A(){ super(); } A(String msg){ super(msg); } } class B extends A{ B(){ super(); } B(String msg){ super(msg); } } public class Test{ public static void main(String[] args){ try{ throw new B(); }catch(A e){ System.out.println

java中异常分哪些种类:

java中异常分哪些种类: 一.Error .Runtime Exception 运行时异常 运行异常类对应于编译错误,它是指Java程序在运行时产生的由解释器引发的各种异常.运行异常可能出现在任何地方,且出现频率很高,因此为了避免巨大的系统资源开销,编译器不对异常进行检查.所以Java语言中的运行异常不一定被捕获.出现运行错误往往表示代码有错误,如:算数异常(如被0除).下标异常(如数组越界)等. 算术异常类:ArithmeticExecption 空指针异常类:NullPointerExce

java基础---->Java中异常的使用(一)

今天我们大致学习一下java中关于异常的知识. java异常的使用 一.java异常的一些说明 1.Throwable 类是Java 语言中所有错误或异常的超类(这就是一切皆可抛的东西).它有两个子类:Error和Exception. 2.Exception:它指出了合理的应用程序想要捕获的条件.Exception又分为两类:一种是CheckedException,一种是UncheckedException.这两种Exception的区别主要是CheckedException需要用try...c

java中异常类与类别

异常类的层次结构: 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性,它们都在java.lang包下面. Error类标记了严重错误,类似内存溢出,虚拟机异常,等等,是不该出现的.这些错误表示故障发生于虚拟机自身.或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError).类定义错误(NoClassDefFoundError)等.这些错