JAVA 异常处理机制
主要讲述几点:
一、异常的简介
二、异常处理流程
三、运行时异常和非运行时异常
四、throws和throw关键字
一、异常简介
异常处理是在程序运行之中出现的情况,例如除数为零。异常类(Exception)的父类是Throwable类,在Throwable类下有两个子类,即Error, Exception。两者的区别在于:
1、Exception :这指的是程序运行时候的异常,用户可以对其进行处理。
2、Error:这指的是JVM的错误,此时程序未执行,用户无法对其进行处理。
所有异常处理类都是Exception类或者其子类,示例:
java.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException
|-java.lang.ArithmeticException java.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException
|-java.lang.IllegalArgumentException
|-java.lang.NumberFormatException
二、异常处理流程
异常流程:
⑴ 程序发生异常时由JVM自动实例化相匹配的异常类对象,不需要用户手动new。
⑵ 判定程序之中是否存异常捕获操作,监测可能出现异常的程序。如果不存在,则将交由JVM进行异常信息输出,之后结束程序。
⑶ 如果存在异常捕获操作,则会匹配try语句后面的catch的异常类型,如果有相应匹配的catch异常类型,则有此异常处理。否则继续匹配每个catch。
⑷ 不管异常是否被成功捕获,都要执行到finally之中的代码。当finally之中的代码执行完毕之后,需要判定异常是否已经被处理了。如果异常已经被处理, 则执行其他程序,直至程序结束。如果异常未被处理,则交由JVM进行异常信息输出,之后结束程序。
注意:
⑴ 当出现多个catch异常捕获的时候,范围大的异常类要放在范围小的异常类之后。
⑵ Exception类是所有异常类的最顶层,可以匹配所有异常,但是所有异常将会按照一个方式输出,无法区别。
三、运行时异常和非运行时异常
Exception 这种异常分两大类运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。
运行时异常:RuntimeException类异常是java为了方便编写代码,专门设计的一个类。当使用throws定义抛出了RuntimeException类方法时候,程序不会强制捕获处理这个异常,可以有用户自行选择,如果没有进行处理,默认情况将由JVM默认处理。常用RuntimeException异常:ArithmeticException、NullPointerException、ClassCastException、NumberFormatException。示例:
java.lang.Object
|-java.lang.Throwable
|-java.lang.Exception
|-java.lang.RuntimeException 运行时异常
|-java.lang.IllegalArgumentException
|-java.lang.NumberFormatException
非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
四、throws和throw关键字
package ExceptionTest;
class MyMath{
// throws定义抛出异常,出现在定义的方法上,如果出现异常由调用者处理该异常
public static int div(int x, int y) throws Exception {
int result = 0;
try {
System.out.println("*******1、数据开始处理*********");
result = x / y ;
} catch (Exception e) {
// throw关键字为在方法里抛出一个异常,也可省略
throw e ;
} finally { //finally是程序的结尾,不管是否抛出异常都会执行其中代码
System.out.println("*******2、数据处理结束*********");
}
return result;
}
}
public class ExceptionTest {
public static void main(String[] args) {
// 调用div()方法必须捕获其异常
try {
System.out.println(MyMath.div(2, 2));
} catch (Exception e) {
e.printStackTrace();
}
}
}
throws和throw关键字区别
1、throws定义抛出异常,使用在定义的方法上,表示出现异常由调用者处理该异常,相应调用必须设置捕获throws定义抛出的异常。
2、throw表示抛出一个异常,使用在方法之中,表示可以有catch捕获。
参考学习连接:http://blog.csdn.net/hguisu/article/details/6155636 深入理解java异常处理机制
JAVA 异常处理机制的更多相关文章
- Java 异常处理机制和集合框架
一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...
- java异常处理机制 (转载)
java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...
- Java异常处理机制 —— 深入理解与开发应用
本文为原创博文,严禁转载,侵权必究! Java异常处理机制在日常开发中应用频繁,其最主要的不外乎几个关键字:try.catch.finally.throw.throws,以及各种各样的Exceptio ...
- 如何正确使用Java异常处理机制
文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...
- 【转】深入理解java异常处理机制
深入理解java异常处理机制 ; int c; for (int i = 2; i >= -2; i--) { c = b / i; System.out.println("i=&qu ...
- Java异常处理机制的秘密
一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw 2.finally中t ...
- Java异常处理机制及两种异常的区别
java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字. try 关键字后紧跟一个花括号括起来的代码块,简称try块.同理:下面的也被称为相应的块. ...
- java异常处理机制详解
java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...
- Java异常处理机制 try-catch-finally 剖析
Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享. 一. 在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有 ...
随机推荐
- TCP状态
TCP状态 TCP连接中包含不同的状态,如何通过状态来判断程序问题尤为重要. 三次握手 图中的connection部分为三次握手. 四次握手 图中的close部分为四次握手. CLOSE_WAIT 服 ...
- [变]C#谜题(1-10)表达式篇
[变]C#谜题(1-10)表达式篇 最近偶然发现了<Java谜题>,很有意思,于是转到C#上研究一下. 本篇是关于表达式的一些内容. 谜题1:奇数性(负数的取模运算) 下面的方法意图确定它 ...
- RegSvr32注册OCX时报错
RegSvr32注册OCX时报错. 错误1: 模块“dsoframer2007.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80070005. 有关此问题的详 ...
- Java Collections.sort方法对list集合排序
1.排序测试类 package com.ljq.test; import java.util.ArrayList; import java.util.Collections; import java. ...
- highchart导出图片
http://www.cnblogs.com/jasondan/p/3504120.html 项目中需求导出报表为图片存到Excel中去,或供其它页面调用. 开始存到截屏,但由于用户电脑分辨率不一样, ...
- 【转】WPF TextBox和PasswordBox加水印
Textbox加水印 Textbox加水印,需要一个VisualBrush和触发器验证Text是否为空,在空的时候设置背景的Brush就可以实现水印效果. <TextBox Name=" ...
- c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)
银行家算法数据结构 (1)可利用资源向量Available 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目.如果Available[j]=K,则表示系统中现有Rj类资源K个. (2) ...
- .Net 转战 Android 4.4 日常笔记(5)--新软件Android Studio 0.5.8安装与配置及问题解决
说真心话,Eclipse跟我们.net的VS比起来就是屌丝比高富帅,一切都是那么的难用,速度慢得我无法忍受 于是想试试Google钦点的Android Studio IDE工具,这跟ADT一样也是一套 ...
- SQL Server-语句类别、数据库范式、系统数据库组成(一)
前言 终于等到这一天,我要开始重新系统学习数据库了,关于数据库这块,不出意外的话,每天会定时更新一篇且内容不会包含太多,简短的内容,深入的理解,Always to review the basics. ...
- 完全抽离WebAPi之特殊需求返回HTML、Css、JS、Image
前言 今天我们来实现一个特殊的需求,这个需求说来也不过分,不过有点违背WebAPi的真实用途,WebAPi不过是作为传输数据而用,若非在项目开发中断不可想到还要实现一个页面来实时显示列表并进行后续其他 ...