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异常的捕获与处理的更多相关文章

  1. JAVA异常的捕获与抛出原则

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...

  2. java 异常的捕获及处理

    在没有异常处理的程序中如果要回避异常,需要使用大量的判断语句,配合所想到的错误状况来捕捉程序中可能发生的错误.但是这样势必会导致程序运行效率降低.java异常处理机制具有易于使用,可自定义异常类,处理 ...

  3. 【开发技术】java异常的捕获与抛出原则

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...

  4. Java -- 异常的捕获及处理 -- 目录

    7 异常的捕获及处理 7.1 异常的基本概念 7.1.1 为什么需要异常处理 7.1.2 在程序中使用异常处理 7.1.3 异常类的继承结构 7.1.4 Java的异常处理机制 7.2 throws与 ...

  5. 菜鸡的Java笔记 第三十 - java 异常的捕获及处理

    异常的捕获及处理        1.异常的产生分析以及所带来的影响        2.异常的处理的基本格式        3.异常的处理流程        4.异常的处理模式        5.自定义 ...

  6. Java -- 异常的捕获及处理 -- Java的异常处理机制

    7.1.4 Java的异常处理机制 在整个Java的异常处理中,实际上也是按照面向对象的方式进行处理,处理的步骤如下: ⑴ : 一旦产生异常,则首先会产生一个异常类的实例化对象. ⑵ : 在try语句 ...

  7. java 异常与捕获

    几乎所有的代码里面都会出现异常,为了保证程序在出现异常之后可以正常执行完毕,就需要进行异常处理. 先来看一下异常的继承类结构: 所有的异常都是由Throwable继承而来,我们来看他下面的两个子类Er ...

  8. Java 异常的捕获与处理详解 (一)

    一,异常的产生(Exception) 异常是程序之中导致程序中断的一种指令流,异常一旦出现并且没有进行合理处理的话,那么程序就会中断执行. An exception is a flow of inst ...

  9. Java异常01——捕获和抛出异常

    捕获和抛出异常 异常处理五个关键字 try , catch , finally , throw , throws try catch finally(快捷键:选中要要监控的代码语句 快捷键: ctrl ...

随机推荐

  1. SpringMVC参数绑定(二)

    在springMVC中,提交请求的数据是通过方法形参来接收的,从客户端请求的key/value数据,经过参数绑定,将key/value数据绑定到controller形参上,然后再controller就 ...

  2. elasticsearch性能调优

    转载 http://www.cnblogs.com/hseagle/p/6015245.html 该es调优版本可能有低,但是思想主体不变,不合适的参数可以自己找最新的版本相应的替代,或者增删 ela ...

  3. C/C++关键字

    1. static关键字 作用 在函数体内静态变量具有记忆功能.在函数体内定义的静态变量离开时不会被清除,在下次函数调用的时候其值保持不变. 限制变量或函数的使用范围.static修饰的全局变量或者函 ...

  4. 【sqli-labs】 less32 GET- Bypass custom filter adding slashes to dangrous chars (GET型转义了'/"字符的宽字节注入)

    转义函数,针对以下字符,这样就无法闭合引号,导致无法注入 ' --> \' " --> \" \ --> \\ 但是,当MySQL的客户端字符集为gbk时,就可能 ...

  5. Quartz+Topshelf 作业

    小记: 引用Quartz.Topshelf.Topshelf.Quartz 使用方法: http://www.cnblogs.com/mushroom/p/4952461.html http://ww ...

  6. 视频及MP3 播放浅析 Jplayer参数详细

    初识jplayer插件是因为它的兼容性是最好的,可以兼容到IE6,官网上对它兼容性有很详细的说明 这个是我选择使用它的首要原因. 现在从需求上来了解它的使用方法吧.第一个需求:MP3格式的音频在网页播 ...

  7. matlab学习下拉菜单

    用matlab添加listbox控件 修改string和value值,value为几就对应第几行字符串 添加button按钮,将string值改为“选择x轴参数”,字体大小为10 再添加一个按钮,将s ...

  8. day37-1 面向对象高阶

    目录 面向对象高阶 isinstance issubclass 反射(自省) 模块的使用 放在类的使用 call 面向对象高阶 isinstance 判断是否为实例化对象,以后可以用来取代type 和 ...

  9. Python【每日一问】35

    问: 基础题: 从键盘输入4个数字,各数字采用空格分隔,对应为变量x0,y0,x1,y1.计算(x0,y0)和(x1,y1)两点之间的距离,输出结果保留1位小数. 比如,键盘输入:0 1 3 5,屏幕 ...

  10. 【剑指Offer】52、正则表达式匹配

      题目描述:   请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹 ...