java异常是java提供的用于处理程序中错误的一种机制。
所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)。
设计良好地程序应该在程序异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。
Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将被提交给java运行时系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
try里面放的是有可能发生错误的语句,catch里面放的是发生异常之后采取的措施。
异常的分类:
Error:称为错误,由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序对其不做处理。
Exception:所有异常类的父类,其子类对应了各种各样的可能出现的异常事件,一般需要用户显示的声明或捕获。
Runtime Exception:一类特殊的异常,如被0除、数组下标超范围等,其产生比较频繁,处理麻烦,如果显示的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。
 
其实异常部分主要讲的就是五个关键字:try、catch、finally、throw、throws。
try语句:
try{……}语句制定了一段代码,这段代码就是一次铺货并处理例外的范围。在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。如果没有例外发生,所有的catch代码段都被略过不执行。
catch语句:
在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
在catch中声明的异常对象(catch(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息。
例如:getMessage()方法,用来得到有关异常事件的信息。
            printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容。
finally语句:
finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态做统一的管理。
无论try所指定的程序块中是否抛出例外,finally所指定的代码都要执行。
通常在finally语句中可以进行资源的清除工作,如:
    1.关闭打开的文件
    2.删除临时文件
    3.……
其中throw和throws的区别:
1、throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在住函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。
例如:
public class test {static void pop() throws NegativeArraySizeException{//定义方法并抛出NegativeArraySizeExceptionint[] arr=new int[-3];//创建数组}public static void main(String[] args)//主方法{try{pop();//调用pop()方法}catch(NegativeArraySizeException e){System.out.println("pop()方法抛出的异常");//输出异常信息}}
}

2、throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通常throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要抛出的异常;如果要捕获throw抛出的异常,则必须使用try{}catch{}语句。
例如:
public class MyException extends Exception{//创建自定义异常类String message;//定义String类型变量public MyException(String ErrorMessage){//父类方法message=ErrorMessage;}public String getMessage()//覆盖getMessage()方法{return message;}}public class Captor {//创建类static int quotient(int x,int y) throws MyException{if(y<0){//判断参数是否小于0throw new MyException("除数不能使负数");//异常信息}return x/y;//返回值}public static void main(String[] args)//主方法{try{int result=quotient(3,-1);}catch(MyException e){//处理自定义异常System.out.println(e.getMessage());//输出异常信息}catch(ArithmeticException e){//输出ArithmeticException算术异常System.out.println("除数不能为0");//输出提示信息}catch(Exception e){//处理其他异常System.out.println("程序发生了其他异常");}}
}


异常的其他问题:
注:上图灰色部分为打印出来的堆栈错误信息
 
声明并抛出异常:
重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。

自定义异常:
使用自定义异常一般有如下步骤:
1、通过继承java.lang.Exception类声明自己的异常类。
2、在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3、在方法的声明部分用throws语句声明该方法可能抛出的异常。
 
 
 
异常总结:
    1、一个图
    2、五个关键字
    3、先捕获小的异常,在捕获大的异常
    4、异常和重写的关系

 
 

 

转载于:https://www.cnblogs.com/CharmingDang/archive/2012/07/27/9663930.html

Java异常的概念和分类相关推荐

  1. Java:异常的概念及分类、异常的处理、异常抛出及自定义异常

    异常概念 异常分类   Java异常处理机制 try ...catch...finally throw和throws 自定义异常 一.异常的概念         什么是异常?             ...

  2. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  3. 2.Java异常学习

    1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...

  4. spring-test dao空指针异常_014、Java异常机制

    1.异常的概念和分类 异常指程序运行过程中出现的非正常现象,例如用户输入错误.除数为零.需要处理的文件不存在.数组下标越界等. 在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类 ...

  5. java 异常练习题_Java 异常(习题)

    异常 Key Point * 异常的概念和分类 * 异常的产生和传递 * 异常的处理 * 自定义异常 练习 1. 填空 Java 中所有的错误都继承自throwable类:在该类的子类中, Error ...

  6. java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--异常分类+声明已检查异常+如何抛出异常+自定义异常类 的相关知识: 0.2)异 ...

  7. 异常的概念和Java异常体系结构

    一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要讲授的是Java语言的异常处理.Java语言的异常处理框架,     是Java语言健壮性的一个重要体现. Java把异 ...

  8. JAVA异常分类和处理

    JAVA异常分类和处理 参考文章: (1)JAVA异常分类和处理 (2)https://www.cnblogs.com/Mr-RanX/p/11279667.html 备忘一下.

  9. Java简单类、变量详解(概念和分类、声明、命名、初始化)

    1初识JAVA简单类 (1)创建第一个Java程序的具体步骤: 第一步:创建一个工程,在Package Explorer空白区域中右击New->点击Java Project->填写Proj ...

最新文章

  1. 合理估算线程池线程数量
  2. Java基础--继承、this、super、抽象类
  3. 我的SAP Hybris学习笔记
  4. 使用 InSpec 实现符合性即代码
  5. mysql索引的创建及删除
  6. “攀哥”离场 不掩融云组最强战舰技术顶流如云
  7. 20行 Python 代码爬取王者荣耀全英雄皮肤 | 原力计划
  8. Java——全局变量与局部变量的区别
  9. 2021年最新外卖侠cps小程序,三级分销返利外卖领劵小程序源码,带电影票分销积分商城(外卖侠重要功能)
  10. ADS仿真5_LNA设计
  11. 分享一些学习和获取资料的网站
  12. 最强的ubuntu8.04安装配置手册
  13. 如何将b站上的视频下载到本地?
  14. 阿里云 root ssh远程登录 及 普通非root用户 ssh远程登录 Ubuntu1604
  15. 宏基笔记本linux系统安装图解,宏基Aspire 4738ZG在linpus linux下安装XP系统教程
  16. 达摩院命名实体识别及其在阿里小蜜的应用(v2020-05-11)
  17. Nginx反向代理的配置
  18. Codeforces Round #555 (Div. 3), problem: (C2) Increasing Subsequence (hard version)【贪心+撞到南墙也不回头】
  19. 用最简单的方式来理解在单片机中的继电器的原理与接线
  20. Zotero使用指南04:群组功能

热门文章

  1. 【Tensorflow】Tensor的比较运算
  2. 《Effective Approaches to Attention-based Neural Machine Translation》—— 基于注意力机制的有效神经机器翻译方法
  3. 【机器学习与差分隐私代码实现】差分隐私代码实现系列(十二)
  4. 卡尔曼滤波simulink例子,位移和速度2变量估计
  5. 数字图像处理--彩色图像转灰度图像
  6. A. Gamer Hemose
  7. 有关编译嵌入式android的swap空间不够导致的编译错误和解决办法
  8. linux用于电脑,适用于 Linux的Windows子系统正在获得这些有用的新功能的介绍
  9. 【boost】time.1 同步计数器
  10. clone git 要输入yes_GitHub,git与python连接使用