java异常定义_讲一讲java异常及自定义异常

1.异常,说白了。两种,一种就是就是不能让代码通过编译的异常。另一种就是程序运行期间出现的异常。

异常就是错误,只要出现异常,程序就不会向下运行了。就不会执行后面的代码了。

这时候就可以通过显示statcktrace堆栈信息的瞬间信息,知道错误发生在什么地方,及报的什么错。

所以我们要在代码捕获异常的地方catch地方,用log打印记录下来stacktrace信息。

2.为什么对异常要进行try catch捕获?

try catch捕获异常的目的是,当异常发生时,能够继续向下执行我们的程序(即使是runtime异常),而不是程序挂掉(不捕获异常时,就会立即挂掉程序)。

将异常进行捕获的目的是,使程序不挂掉。可以向下执行。

在捕获的地方catch分句处,打印出try代码块出错的堆栈信息,然后程序代码继续向下执行。

try {

int i = 1 / 0;

} catch (Exception e) {

System.out.println("异常发生了,,不知道还能向下运行否。。。。");

e.printStackTrace();

}

logger.info("execute finished");

System.out.println("啦啦啦啦 ");

输出结果:

异常发生了,,不知道还能向下运行否。。。。

java.lang.ArithmeticException: / by zero

at APPMain.main(APPMain.java:111)

execute finished

啦啦啦

总结:所以程序继续向下运行了,这样就能达到,异常的产生并不会使程序挂掉。而使程序能继续执行。

3.输出那些异常具体信息,是通过e.printStackTrace();这个方法的,如果去掉这个方法,就不会再控制台中显示java.lang.ArithmeticException: / by zero

at APPMain.main(APPMain.java:111)这种错误提示了。

1)异常捕获的catch代码块中,直接调用e.printStackTrace(),会在控制台直接打印出来异常的信息。

2)若产生异常时,不进行e.printStackTrace(),而是在日志输出时打印e.printStackTrace()。就会将java.lang.ArithmeticException: / by zero

at APPMain.main(APPMain.java:111)这种错误提示输出到error.log文件中,就不会再控制台显示了,控制台就当做没有任何异常产生了,不会报任何错误信息,即使有异常产生。

3)e.printStackTrace()才是打印错误提示的关键。

3.hashmap是可以转换为string的,hmap可以进行日志打印。hashmap有hashmap.toString()方法。

二。自定义异常

1.自定义异常是要自己爆出来的,因为自定义异常是业务异常,只有程序员自己知道什么情况下才会发生自定义异常。所以就需要自己手动代码if判断,值不对的时候,就

throw抛出来。然后可以自己catch捕获或者在调用这段异常代码的地方捕获,catch捕获,打印具体的异常信息,也就是自定义异常的对象。

/*下面做了归纳总结,欢迎批评指正*/

/*自定义异常*/

class ChushulingException extends Exception

{

public ChushulingException(String msg)

{

super(msg);

}

}

class ChushufuException extends Exception

{

public ChushufuException(String msg)

{

super(msg);

}

}

/*自定义异常 End*/

class Numbertest

{

public int shang(int x,int y) throws ChushulingException,ChushufuException

{

if(y<0)

{

throw new ChushufuException("您输入的是"+y+",规定除数不能为负数!");//抛出异常

}

if(y==0)

{

throw new ChushulingException("您输入的是"+y+",除数不能为0!");

}

int m=x/y;

return m;

}

}

class Rt001

{

public static void main(String[]args)

{

Numbertest n=new Numbertest();

//捕获异常

try

{

System.out.println("商="+n.shang(1,-3));

}

catch(ChushulingException yc)

{

System.out.println(yc.getMessage());

yc.printStackTrace();

}

catch(ChushufuException yx)

{

System.out.println(yx.getMessage());

yx.printStackTrace();

}

catch(Exception y)

{

System.out.println(y.getMessage());

y.printStackTrace();

}

finally{ System.out.println("finally!");} finally不管发没发生异常都会被执行

}

}

/*

[总结]

1.自定义异常:

class 异常类名 extends Exception

{

public 异常类名(String msg)

{

super(msg);

}

}

2.标识可能抛出的异常:

throws 异常类名1,异常类名2

3.捕获异常:

try{}

catch(异常类名 y){}

catch(异常类名 y){}

4.方法解释

getMessage() //输出异常的信息

printStackTrace() //输出导致异常更为详细的信息

本文“自定义异常”部分的内容转自http://blog.csdn.net/stellaah/article/details/6738424 感谢作者

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值