Java异常处理及异常机制介绍

 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述。

  JAVA中用2种方法处理异常:

  1.在发生异常的地方直接处理;

  2.将异常抛给调用者,让调用者处理。

  JAVA异常可分为3种:

  (1)检查性异常:java.lang.Exception

  (2)运行期异常:java.lang.RuntimeException

  (3)错误:java.lang.Error

  顶层是java.lang.Throwable类,检查性异常,运行期异常,错误都是这个类的子孙类。

  java.lang.Exception和java.lang.Error继承自java.lang.Throwable,而java.lang.RuntimeException继承自java.lang.Exception.

  检查性异常------程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。JAVA编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

  运行期异常------这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,JAVA编译器强制要求处理这类异常。

  错误------一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

  如何处理异常?

  1.try...catch

  程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。

  Java代码

  int x = (int)(Math.random()*5);

  int y = (int)(Math.random()*10);

  int[] z =new int[5];

  try

  {

  System.out.println("y/x="+(y/x));

  System.out.println("y="+y+"z[y]="+z[y]);

  }

  catch (ArithmeticException exc1)

  {

  System.out.println("算术运算异常:"+exc1.getMessage());

  }

  catch (ArrayIndexOutOfBoundsException exc2)

  {

  System.out.println("数据越界异常:"+exc2.getMessage());

  }

  说明:ArithmeticException和ArrayIndexOutOfBoundsException都属运行期异常:java.lang.RuntimeException,如果不用try...catch捕获,程序也是可通过编译的,但如果属于检查性异常:java.lang.Exception,必须而且一定要用try...catch...对其进行处理。

  2.finally

  如果把finally块置try...catch...语句后,finally块一般都会得到执行,它相当于一个万能的保险,即使前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行。

  以下情形,finally块将不会被执行:

  (1)finally块中发生了异常;

  (2)程序所在线程死亡;

  (3)在前面的代码中用了System.exit();

  (4)关闭CPU。

  3.多个异常的处理规则:

  定义多个catch可精确地定位异常。如果为子类的异常定义了特殊的catch块,而父类的异常则放在另外一个catch块中,此时,必须满足以下规则:子类异常的处理块必须在父类异常处理块的前面,否则会发生编译错误。所以,越特殊的异常越在前面处理,越普遍的异常越在后面处理。这类似于制订防火墙的规则次序:较特殊的规则在前,较普通的规则在后。

  自己也可以定义并抛出异常,方法是2步:创建异常,抛出异常(首先实例化一个异常对象,然后用thow抛出)合在一起就是----

  thow new IOException("异常说明信息")。将创建异常,抛出异常合在一起的好处是:创建异常时,会包含异常创建处的行信息,异常被捕获时可以通过堆栈迹(stack Trace)的形式报告这些信息。如果在同一行代码创建和抛出异常,对于程序的调试将非常有用。

  所以,thow new XXX()已经成为一个标准的异常抛出范式。

  在定义一个方法时,方法块中调用的方法可能会抛出异常,可用上面的thow new XXX()处理,如果不处理,那么必须在方法定义时,用thows声明这个方法会抛出的异常。

  对异常的处理,有一条行之有效的默认规则:向上抛出-----被调用类在运行过程中对遇到的异常一概不作处理,而是直接向上抛出,一直到最上层的调用类,调用类根据应用系统的需求和特定的异常处理规则进行处理,如向控制台输出异常堆栈信息,打印在日志文件中。用一句形象的话来说,就是谁使用,谁(最上层的调用类)处理。

Java异常处理及异常机制介绍相关推荐

  1. java 异常处理发生异常_处理Java中的异常

    java 异常处理发生异常 每个程序员都希望编写一个完美的程序. 也就是说,程序运行时没有任何障碍. 好吧,如果希望是马,乞g就会骑. 除了程序员的所有愿望之外,有时还会发生无法预料的情况. 在Jav ...

  2. 复习Java异常处理_异常分类_自定义异常_线程初步了解

    复习Java异常处理_异常分类_自定义异常_线程 主要内容 异常.线程 教学目标 第一章 异常 1.1 异常概念 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点 ...

  3. 详解Java中的异常机制:运行期异常、编译器异常及如何自定义异常

    文章目录 前言 一.异常概述及分类 1.异常概述 2.异常的继承结构 3.异常的继承机构图 二.运行期异常-RuntimeException 1.JVM如何默认处理异常 2.try...catch的方 ...

  4. java 异常处理发生异常_Java中的异常处理

    java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...

  5. Java的垃圾回收机制介绍

    1.java的语言框架 (1)CPU->操作系统内核->应用层框架->JVM(java虚拟机)->Java字节码->Java源代码 (2)java是解释型语言,嵌入式常用 ...

  6. java全局机制,java实现全局异常机制

    先上自己的代码,后整理下原理知识. 下面是自己实现的全局异常机制 1.继承Exception,自定义异常类 ​ package com.zichen.xhkq.exception; /** * * T ...

  7. java深入浅出解析异常机制

    java中的异常处理的目的在于通过使用少量的代码,使得程序有着强大的鲁棒性,并且这种异常处理机制会让你变得非常自信:你的应用中没有你没处理过的错误.处理异常的相关手法看起来是这么的难懂,但是如果掌握的 ...

  8. Struts2中我所遇到的内存溢出(java.lang.OutOfMemoryError)异常错误介绍

    1.在我以前写得关于Struts2的文章中,有时候往往会报一些经常出现的错误,今天又出现了,所以特此来介绍一下,并如何解决这种错误. 2.在我们部署项目到Tomcat服务器后,开启Tomcat服务器, ...

  9. Java基础:异常机制

    最近开始了找工作的面试,在面试过程中,面试官问了关于Java当中的异常处理机制,一直以来,无论写代码还是看书,自己对异常处理这一块就没有很好的重视过,对它的认知也仅仅停留在通过Try-catch去进行 ...

最新文章

  1. pyspark使用ipython
  2. ios 发送请求时按home_iOS 10按下Home键能即响应返回桌面了
  3. PMcaff脉脉大咖分享会 | 走出BAT!从0到1做一款自己的产品
  4. 腾讯财报:业务换防,谁来扛起未来发展的大旗?
  5. 《深入理解计算机系统(英文版.第2版)》
  6. PHP字符串相关的方法
  7. mysql 终止 存储过程
  8. pytorch 实现MLP(多层感知机)
  9. Ansible详解(一)——Ansible理论基础
  10. Google 中国开发者大会最后一天报名!
  11. css中margin属性的探究
  12. IntelliJ IDEA 如何设置黑色主题,界面字体大小以及内容字体大小
  13. 人工智能安全学习笔记
  14. EndnoteX9下载并安装
  15. 木马 java_Java恶意软件来袭 木马病毒也要跨平台
  16. 【Qt Quick】设置圆形图片
  17. windows11中windows安全中心打不开的解决办法
  18. T410i开机显示fan error修复
  19. centos 安装virt-mannager
  20. 删了手机里的一个html文件,手机操作篇:手机上怎么删除pdf其中一页

热门文章

  1. android 中使用AsyncTask实现简单的异步编程
  2. AJAX开发简略 (转)
  3. 港口物流系统设计与优化-SMU在线学习笔记
  4. ORACLE导入导出后发生中文乱码的原因及解决办法
  5. java线程学习之notify方法和notifyAll方法
  6. hdu5955 Guessing the Dice Roll【AC自动机】【高斯消元】【概率】
  7. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来定时任务apscheduler库(图文详解)...
  8. 20165301第十周课下补做
  9. salt.states.file试用
  10. 帧、场编码的个人理解