java编程用catch(Exception e)捕获异常,在catch中用instanceof对不同的异常分别处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java编程用catch(Exception e)捕获异常,在catch中用instanceof对不同的异常分别处理相关的知识,希望对你有一定的参考价值。
实现原理:实际上就是先不分具体的异常,直接捕获所有异常的父类Exception,之后在进行实例化异常判断,进行结果输出。举例:try
//填写需要捕获异常信息的代码
catch(Exception e) //捕获异常信息
if(e instanceof NumberFormatException) //判断是不是数据转换异常
System.out.println("NumberFormatException");//输出结果
if(e instanceof NullPointerException) //判断是不是空指针异常
System.out.println("NullPointerException");//输出结果
备注:这个instanceof 实例化可以有效的判断类型是否匹配,而不抛出异常,增加了代码的可复写性(也就是根据异常自定义输出信息)。 参考技术A throw出去的异常,由调用方处理,也就是更外面的catch处理
如果都没有代码处理,则整个程序异常,并运行结束
参考技术B 不需要把,多几个catch就行了
try
//TODO 可能抛异常的代码
catch(NumberFormateException nfe)
//TODO 处理异常
catch(Exception e)
//TODO 处理异常
追问
如果用instanceof怎么实现呢??
追答为什么非要instanceof呢,这不是多此一举吗?
public static void main(String[] args)
try
a();
b();
catch(Exception e)
if(e instanceof NullPointerException)
System.out.println("NullPointerException");
if(e instanceof NumberFormatException)
System.out.println("NumberFormatException");
public static void a() throws NullPointerException
int i = 1;
if(i == 1)
throw new NullPointerException();
public static void b() throws NumberFormatException
int i = 1;
if(i == 1)
throw new NumberFormatException();
在第一种中NumberFormateException 是Exception的子类。
个人认为第一种异常处理的方式是比较好的。 也是比较常见的。
不过也有人用第二种的方式, 我一同事就特喜欢第二种的方式。
看个人理解了。 呵呵。 应该差不多, 没什么大的区别。
try
//TODO 可能抛异常的代码
catch(NumberFormateException nfe)
//TODO 处理异常
catch(Exception e)
//TODO 处理异常
和
catch(Exception e)
if(e instanceof NullPointerException)
System.out.println("NullPointerException");
if(e instanceof NumberFormatException)
System.out.println("NumberFormatException");
(Java)问题 Catch(IOException e) 和 catch(Exception e
(Java)问题
Catch(IOException e) 和 catch(Exception e)有什么区别。
以上是关于java编程用catch(Exception e)捕获异常,在catch中用instanceof对不同的异常分别处理的主要内容,如果未能解决你的问题,请参考以下文章
catch (Exception e) catch (Throwable e) catch (IOException e) 再抛出异常,catch里的分别是啥意思
C# try catch finally 里面写Exception e是为啥?这个e有啥用?Exception e能改成别的吗?