总结04 Exception异常处理及自定义异常捕获类相关

在这里插入图片描述
在这里插入图片描述

一/在处理异常时有二种选择

第一种/自己处理 — try…catch
意义:如果是自己在本方法内的代码出了问题,且这个问题不关系到方法的形参接收处,不关系到他人(或者其它类)传递的某些参数存在错误,能够明确是自身的代码存在错误的情况下
则使用"自己处理".
1/普通格式: 如果异常代码体没有调用到’抛出了异常’的方法,那么则以此格式定义.在此情况下,'异常捕获处理类’是哪个,则因异常的代码不同而不同.
格式:

try{

          //异常代码体

    }catch(异常捕获处理类 自定义异常处理对象名){

         自定义异常处理对象名.printStackTrace();

              }
  格式例子
:try {

            System.out.println(intarray[2]);
        }catch(ArrayIndexOutOfBoundsException ExceptionCobj){

            ExceptionCobj.printStackTrace();
            System.out.println("数组调用出错!数组[2]不存在!");
        }
2/抛出格式:如果在异常代码体中调用了[抛出了异常]的方法,那么'异常捕获处理类'则固定为"xxxxException"(有时直接为"Exception").
           假如说同时具有了上述[普通格式]的情况,那么需要在catch的判断处再多声明一个[异常捕获处理类]即可.

  格式:
  try {
      抛出了异常的方法();

  }catch(xxxxException 自定义对象名){

      自定义对象名.printStackTrace();
  }
  格式例子:
  try {
      抛出了异常的方法();
  }catch(ParseException methodException){

      自定义对象名.printStackTrace();
  }

在这里插入图片描述
在这里插入图片描述
应用示例:

public class tryOfcatch {
    public static void main(String[] args) {

        int[] intarray = new int[2];


        try {

            System.out.println(intarray[2]);
        }catch(ArrayIndexOutOfBoundsException ExceptionCobj){

            ExceptionCobj.printStackTrace();
            System.out.println("数组调用出错!数组[2]不存在!");
        }

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

    }
}

“ArrayIndexOutOfBoundsException"为判断一个类名(用于异常判断的类),其类名和其错误类型相对应.这里的错误为数组出现错误.因此为"ArrayIndexOutOfBoundsException”.那么如何在知道错误的情况下,输入同错误类型所对应的类名呢?
有两个获取类名的标准:
1/就是我在输出处打了红色下划线的地方(ArrayIndexOutOfBoundsException).部分错误的类名都可以这样参考.
2/如果用try…catch处理一个’通过throws抛出了异常的方法’,也就是异常代码体处调用了的是一个抛出了异常的方法,那么其判断类名则为"xxxxException".(有时直接为Exception)
示例图如下:
在这里插入图片描述
输出结果(斜杠字体的上下顺序可能会变更):
java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2
数组调用出错!数组[2]不存在!

at code.study.Exception.tryOfcatch.main(tryOfcatch.java:13)

Process finished with exit code 0
在这里插入图片描述
第二种/返回给调用处
意义:如果可以确定这个异常错误,是因为方法接收到的参数出错,或团队开发中其它人模块/类所传递给我方的数据存在错误(如IO中读取文件时,别人发给自己的路径存在错误),
那么此时则需要以"抛回去"的方式,将异常信息返回给调用处或传参处.让其负责调用处/传参处的其它人进行解决,故命名"抛出异常".如果是这种情景则有先用这个.
但有时,这会被用来逃避自己的错误,抛出自己的错误.如果是这个情景,则推荐优先用第一种.
格式:

权限修饰符 返回值类型-可选 方法名(形参-可选) throws xxxxException{
    
               //方法体
    
         }

格式例子:

 public static void throwsException() throws ParseException {
        String timeStr = "1997/01/01";
        SimpleDateFormat simpleDateFormatObj = new SimpleDateFormat("yyyy/MM/dd"); //yyyy - 年份  MM - 月份 dd - 日期
       Date timeDateObj =  simpleDateFormatObj.parse(timeStr);//将String字符串时间转换为Date数据类型.
                                                            // simpleDateFormat的构造日期格式,必须跟括号内的日期格式一致
                                                            //此处需要异常处理,Alt+Enter用throws进行处理
    }     

二 调用异常的相关信息:

在这里插入图片描述
1/public String getMessage() 将异常信息转为String类型以便输出,内容详细.
格式如: methodException.getMessage();
2/public String toString() 将异常信息转为String类型以便输出,但内容可能不太详细.
格式如: methodException.toString();
3/public String printStackTrace() 将异常信息输出在控制台
格式如:methodException.printStackTrace()

三/自定义异常捕获处理类

意义:异常捕获类也可以自定义,以满足对特殊异常的处理需求.
要求1/需要一个’自定义异常捕获类’来接收和发送异常信息,只要该类继承了’Exception’或’RuntimeException’,就可以当作异常捕获类用.
{自定义异常捕获类}的定义格式:

权限修饰符 class 自定义类名 extends Exception/RuntimeException{
      public 无参构造() {
                   }

    public 有参构造(String message) {

        super(message);
    }
 }

要求2/需要自定义一个’抛出处理类’来判断某个代码是否存在异常,如果异常则调用’自定义异常捕获类’,通过’自定义异常捕获类’来传递异常信息.
{抛出处理类}的定义格式:

public class 自定类名 {
    public 自定义返回值类型-可选 自定义抛出方法名(判断参数) throws {异常捕获类之类名} 
        
        //{异常判断体},如果异常则执行代码:throw  new CustomException();对{异常捕获类}传递异常信息.
        //如果没有异常,则执行其它代码.
            
        
        
    }
}

注意:如果{异常捕获类}继承的为RuntimeException,则此处不必用throws抛出,
如果继承的为Exception,则此处必须在{抛出处理类}的方法名括号后面加上throws+{异常捕获类之类名}来抛出.

自定义异常捕获处理类的使用格式:
调用格式步骤一:抛出处理类 自定义对象名 = new 抛出处理类();
调用格式步骤二:自定义对象名.自定义抛出方法名(参数);

注意:因调用其属于可能出现异常的情况,所以编译器会要求你在此通过alt+enter选择一个异常处理方式来将",
要么是自己处理的try…catch 或者是抛出异常的throws

例子:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值