Java学习系列(九)Java面向对象之异常机制详解

异常处理机制用来保障我们的程序更加健壮,无论用户怎么操作,都能保证我们的程序都能正常应对的一种处理机制。

一般格式如下:
try{ // 尝试让它执行业务处理,如果可以执行完成,就代表一切正常。
// 业务处理
}catch(异常1 e1){
// 进行异常1处理
}catch(异常2 e2){
// 进行异常2处理
}

举例说明1:

Java代码 收藏代码
  1. publicclassTest{
  2. publicstaticvoidmain(String[]args){
  3. try{
  4. Doubled1=Double.parseDouble(args[0]);
  5. Doubled2=Double.parseDouble(args[1]);
  6. System.out.println("d1+d2="+(d1+d2));
  7. }catch(ArrayIndexOutOfBoundsExceptione1){
  8. System.out.println("请输入两个数字!");
  9. }catch(NumberFormatExceptione2){
  10. System.out.println("输入的必须是数字!");
  11. }
  12. }
  13. }

Java异常机制的处理流程
出现异常时,系统会自动生成一个异常对象ex,然后由catch(异常类 e1) ex instanceof 异常类 判断是否为true,为true时传给catch块后的形参,并执行catch块中的代码。对于多个catch块捕捉异常,应该是先捕捉小(子类)的异常,再捕捉大(父类)的异常。通常发生异常时应从第一个自己写的程序位置开始查找并排错。【注意】对于一个异常,最多只有一个catch块捕捉到异常。

异常体系图:

Java学习系列(九)Java面向对象之异常机制详解

异常处理的完整语法格式:

try{
// 业务处理
}catch(异常 ex){ //0~N个
// 进行异常1处理
}finally{ // 0~1个

}
注意:try不能独立存在,也就是说catch块和finally块必须有一个。
finally --通常用于回收(关闭0资源,JVM会保证【finally块总会得到执行 --不管有无return语句】,但如果遇到System.exit(0);(用于退出JVM)就会阻止finally语句的执行。

异常的分类
checked异常:没有完善错误处理的代码,不会得到执行的机会。--编译器会强制检查。
runtime异常:运行时异常。
checked异常可以更好地保证我们一定会对其进行异常处理,但checked也给编程带来繁琐:要么用throws声明抛出异常,要么显式用catch来捕捉。

异常转译

Java代码 收藏代码
  1. /**
  2. *@authorlhy
  3. *@desription自定义异常
  4. */
  5. classMyExceptionextendsRuntimeException{
  6. publicMyException(){
  7. }
  8. publicMyException(Stringmsg){
  9. super(msg);
  10. }
  11. publicMyException(StringdetailMessage,Throwablethrowable){
  12. super(detailMessage,throwable);
  13. }
  14. }
  15. publicclassTest{
  16. publicstaticvoidmain(String[]args){
  17. test(args);
  18. }
  19. publicstaticvoidtest(String[]args){
  20. try{
  21. Integernum1=Integer.parseInt(args[0]);
  22. Integernum2=Integer.parseInt(args[1]);
  23. System.out.println(num1/num2);
  24. }
  25. //先用catch來捕捉原有的異常,再用throw拋出一个自定义异常对象;
  26. //这种做法也称为“异常转译”
  27. catch(ArrayIndexOutOfBoundsExceptionae){//数组下标越界异常
  28. thrownewMyException("请输入两个数字");
  29. }catch(NumberFormatExceptionne){//数字格式异常
  30. thrownewMyException("必须输入数字");
  31. }catch(ArithmeticExceptionet){//算术异常
  32. thrownewMyException("被除数不能为0");
  33. }finally{
  34. System.out.println("finally块总会得到执行");
  35. }
  36. }
  37. }

【注意】(catch)捕捉的异常的范围一定要比抛出的异常范围大。
throws和throw的区别:
A。throws只能在方法签名中用,方法已经注意到了这几个异常,但目前不想处理该异常。
B。throw就是一条普通的语句,throw后紧跟【一个异常实例】。

结束语:今天内容比较简单,所以写的不是很多。明天开始学习IO。

你可能感兴趣的:(Java学习)