Java异常的捕获与处理
Java提供了try(尝试)、catch(捕捉)、finally(最终)这三个关键字来处理异常。在处理各种异常时,需要用到对应的异常类,指的是由程序抛出的对象所属的类。
一、异常处理的使用
由于finally块是可以省略的,异常处理格式可以分为三类:try{ }——catch{ }、try{ }——catch{ }——finally{ }、try{ }——finally{ }。
- public class DealException
- {
- public static void main(String args[])
- {
- try
- //要检查的程序语句
- {
- int a[] = new int[5];
- a[10] = 7;//出现异常
- }
- catch(ArrayIndexOutOfBoundsException ex)
- //异常发生时的处理语句
- {
- System.out.println("超出数组范围!");
- }
- finally
- //这个代码块一定会被执行
- {
- System.out.println("*****");
- }
- System.out.println("异常处理结束!");
- }
- }
可以看出,在异常捕捉的过程中要进行两个判断,第一是try程序块是否有异常产生,第二是产生的异常是否和catch()括号内想要捕捉的异常相同。
那么,如果出现的异常和catch()内想要捕捉的异常不相同时怎么办呢?事实上我们可以在一个try语句后跟上多个异常处理catch语句,来处理多种不同类型的异常。
- public class DealException
- {
- public static void main(String args[])
- {
- try
- //要检查的程序语句
- {
- int a[] = new int[5];
- a[0] = 3;
- a[1] = 1;
- //a[1] = 0;//除数为0异常
- //a[10] = 7;//数组下标越界异常
- int result = a[0]/a[1];
- System.out.println(result);
- }
- catch(ArrayIndexOutOfBoundsException ex)
- //异常发生时的处理语句
- {
- System.out.println("数组越界异常");
- ex.printStackTrace();//显示异常的堆栈跟踪信息
- }
- catch(ArithmeticException ex)
- {
- System.out.println("算术运算异常");
- ex.printStackTrace();
- }
- finally
- //这个代码块一定会被执行
- {
- System.out.println("finally语句不论是否有异常都会被执行。");
- }
- System.out.println("异常处理结束!");
- }
- }
上述例子中ex.printStackTrace();就是对异常类对象ex的使用,输出了详细的异常堆栈跟踪信息,包括异常的类型,异常发生在哪个包、哪个类、哪个方法以及异常发生的行号。
二、throws关键字
throws声明的方法表示该方法不处理异常,而由系统自动将所捕获的异常信息抛给上级调用方法。
- public class throwsDemo
- {
- public static void main(String[] args)
- {
- int[] a = new int[5];
- try
- {
- setZero(a,10);
- }
- catch(ArrayIndexOutOfBoundsException ex)
- {
- System.out.println("数组越界错误!");
- System.out.println("异常:"+ex);
- }
- System.out.println("main()方法结束。");
- }
- private static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException
- {
- a[index] = 0;
- }
- }
throws关键字抛出异常,“ArrayIndexOutOfBoundsException”表明setZero()方法可能存在的异常类型,一旦方法出现异常,setZero()方法自己并不处理,而是将异常提交给它的上级调用者main()方法。
三、throw关键字
throw的作用是手工抛出异常类的实例化对象。
- public class throwDemo
- {
- public static void main(String[] args)
- {
- try
- {
- //抛出异常的实例化对象
- throw new ArrayIndexOutOfBoundsException("\n个性化异常信息:\n数组下标越界");
- }
- catch(ArrayIndexOutOfBoundsException ex)
- {
- System.out.println(ex);
- }
- }
- }
我们能发现,throw好像属于没事找事,引发运行期异常,并自定义提示信息。事实上,throw通常和throws联合使用,抛出的是程序中已经产生的异常类实例。
- public class ExceptionDemo
- {
- public static void main(String[] args)
- {
- int[] a = new int[5];
- try
- {
- setZero(a,10);
- }
- catch(ArrayIndexOutOfBoundsException e)
- {
- System.out.println("异常:"+e);
- }
- System.out.println("main()方法结束!");
- }
- public static void setZero(int[] a,int index) throws ArrayIndexOutOfBoundsException
- {
- System.out.println("setZero方法开始:");
- try
- {
- a[index] = 0;
- }
- catch(ArrayIndexOutOfBoundsException ex)
- {
- throw ex;
- }
- finally
- {
- System.out.println("setZero方法结束。");
- }
- }
- }
ExceptionDemo
输出结果:
setZero方法开始:
setZero方法结束。
异常:java.lang.ArrayIndexOutOfBoundsException: 10
main()方法结束!
四、RuntimeException类
Exception和RuntimeException的区别:
Exception:强制性要求用户必须处理;
RunException:是Exception的子类,由用户选择是否进行处理。
五、自定义异常类
自定义异常类继承自Exception类,可以使用父类的大量的方法,也可自己编写方法来处理特定的事件。Java提供用继承的方式运行用户自己编写的异常类。
- class MyException extends Exception
- {
- public MyException(String message)
- {
- super(message);
- }
- }
- public class DefinedException
- {
- public static void main(String[] args)
- {
- try
- {
- throw new MyException("\n自定义异常类!");
- }
- catch(MyException e)
- {
- System.out.println(e);
- }
- }
- }
Java异常的捕获与处理的更多相关文章
- JAVA异常的捕获与抛出原则
在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...
- java 异常的捕获及处理
在没有异常处理的程序中如果要回避异常,需要使用大量的判断语句,配合所想到的错误状况来捕捉程序中可能发生的错误.但是这样势必会导致程序运行效率降低.java异常处理机制具有易于使用,可自定义异常类,处理 ...
- 【开发技术】java异常的捕获与抛出原则
在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...
- Java -- 异常的捕获及处理 -- 目录
7 异常的捕获及处理 7.1 异常的基本概念 7.1.1 为什么需要异常处理 7.1.2 在程序中使用异常处理 7.1.3 异常类的继承结构 7.1.4 Java的异常处理机制 7.2 throws与 ...
- 菜鸡的Java笔记 第三十 - java 异常的捕获及处理
异常的捕获及处理 1.异常的产生分析以及所带来的影响 2.异常的处理的基本格式 3.异常的处理流程 4.异常的处理模式 5.自定义 ...
- Java -- 异常的捕获及处理 -- Java的异常处理机制
7.1.4 Java的异常处理机制 在整个Java的异常处理中,实际上也是按照面向对象的方式进行处理,处理的步骤如下: ⑴ : 一旦产生异常,则首先会产生一个异常类的实例化对象. ⑵ : 在try语句 ...
- java 异常与捕获
几乎所有的代码里面都会出现异常,为了保证程序在出现异常之后可以正常执行完毕,就需要进行异常处理. 先来看一下异常的继承类结构: 所有的异常都是由Throwable继承而来,我们来看他下面的两个子类Er ...
- Java 异常的捕获与处理详解 (一)
一,异常的产生(Exception) 异常是程序之中导致程序中断的一种指令流,异常一旦出现并且没有进行合理处理的话,那么程序就会中断执行. An exception is a flow of inst ...
- Java异常01——捕获和抛出异常
捕获和抛出异常 异常处理五个关键字 try , catch , finally , throw , throws try catch finally(快捷键:选中要要监控的代码语句 快捷键: ctrl ...
随机推荐
- ASP之ViewState和IsPostBack
没怎么写过ASPX页面,今天在做增删改的界面的时候,修改出了问题. 根据传过来的ObjectID加载页面数据,赋值给TextBox控件后,修改控件的值回写数据库,发现值没有变化. 简单的例子如下: 然 ...
- Python 1:环境搭建及运行第一个程序
在计算机控制面板中找到系统,然后点击高级系统设置,再点击环境变量,把安装的python.exe的目录复制到下面系统变量的path栏最后面,复制前加个分号以隔开前面的变量,然后按3次确定即可退出配置.具 ...
- C#比较两个日期的大小 .net
using System;using System.Collections; public class MyClass{public static void Main(){DateTime dt1 = ...
- [编码]ASCII、GBK、Unicode(万国码) 和 UTF-8
American ASCII编码 (American Standard Code for Information Interchange,美国信息互换标准代码) China gbk编码 ...
- 【HTTP】如何正常关闭连接
参考:<HTTP权威指南> 所有HTTP客户端.服务器或者代理都可以任意时刻关闭一条TCP传输连接.但是服务器永远无法确定它关闭“空闲”连接的那一刻,在线路那一头的客户端有没有数据要发送. ...
- P1401 城市(30分,正解网络流)
题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...
- 玩转公众号markdown排版
Md2All 简介 Markdown排版利器,支持 "一键排版" 的样式模板选择,支持"css样式自定义",支持80多种代码高亮. 能让Markdown内容,无 ...
- SQL SERVER2012 安装
- AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)
类似于SVM,CNN为代表的DNN方法的边缘参数随着多类和高精度的要求必然增长.比如向量机方法,使用可以映射到无穷维的高斯核,即使进行两类分类,在大数据集上得到高精度,即保持准确率和高精度的双指标,支 ...
- 【sqli-labs】 less29 GET- Error based -Impidence mismatch -Having a WAF in front of web application (GET型基于错误的带有WAF注入)
这关有点意思,有一点需要事先注意,这关玩的是login.php而不是默认的index.php 再注入之前需要先了解一下HPP(HTTP Parameter Pollution),详情参照这篇 http ...