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();

本回答被提问者采纳
参考技术C 以下两种异常处理的方式都是可以的。 第一种要求首先判断子类型的异常。
在第一种中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)有什么区别。

异常范围的不同,IOException只能捕获IO的异常,Exception不仅能捕获IO异常,还能捕获其它的异常。 参考技术A IOException是Exception的子类,你可以查询下API,如果你不确定程序会引发什么异常,就用Exception

以上是关于java编程用catch(Exception e)捕获异常,在catch中用instanceof对不同的异常分别处理的主要内容,如果未能解决你的问题,请参考以下文章

catch (Exception e) catch (Throwable e) catch (IOException e) 再抛出异常,catch里的分别是啥意思

Java Exception

e.printStackTrace();

C# try catch finally 里面写Exception e是为啥?这个e有啥用?Exception e能改成别的吗?

catch(Exception e) 有啥意思?

e.printStackTrace() ; 是什么意思?