zoukankan      html  css  js  c++  java
  • Java中的运行期异常

    try.....catch....finally异常处理的组合方式:

    try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。

    try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理

    public class Demo04 {
        public static void main(String[] args) {
            int [] arr={};
                //可能会发生异常的语句
                int a=get(arr);//可以点第2个或者第3个
                System.out.println(a);
        }
        public static int get(int[] arr) throws ArrayIndexOutOfBoundsException ,NullPointerException ,Exception {
            //若异常有一个定义为Exception,可以单写Exception。因为Exception是所有的父类
            if(arr==null){
                throw new NullPointerException("数组为空!");
            }
            if(arr.length==0){
                throw new ArrayIndexOutOfBoundsException("数组长度为0!");//都可以写Exception,因为Exception是所有的父类
            }
            int i=arr[arr.length-1];
            return i;
        }
    }

    一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。

    注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

    try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。(虚拟机处理—结束程序、报错;finally还是执行的)。

    运行时期异常:

     RuntimeException和他的所有子类异常,都属于运行时期异常。 

        NullPointerException(空指针),ArrayIndexOutOfBoundsException(数组越界)、ClassCastException(类转换异常)、NumberFormatException(数字格式异常--数字转换异常)、

    java.util.ConcurrentModificationException(并发修改异常)、SQLException(sql异常)  等都属于运行时期异常。

    运行时期异常的特点:

    ①、方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常;

    ②、运行时期异常一旦发生,需要程序人员修改源代码。

    异常在方法重写中的细节:

    1、子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明。

    2、 当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。

    3、当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常的。

     

    问题:接口中没有声明异常,而实现的子类覆盖方法时发生了异常,怎么办?

    答:无法进行throws声明,只能catch的捕获。万一问题处理不了呢?catch中继续throw抛出,但是只能将异常转换成RuntimeException子类抛出。

    异常中常用的方法:

    1、getMessage方法:返回该异常的详细信息字符串,即异常提示信息。

    2、toString方法:返回该异常的名称与详细信息字符串。

    3、printStackTrace:在(红字的方式)控制台输出该异常的名称与详细信息字符串、异常出现的代码位置。

    package com.oracle.demo01;
    
    public class Demo06 {
        public static void main(String[] args) throws Exception{
            int [] arr={};
            try{
                //可能会发生异常的语句
                int a=get(arr);
                System.out.println(a);
            }catch(Exception ex){//若存在父类Exception,必须写在最后面
                //getMessage()只打印异常信息
                //System.out.println(ex.getMessage());
                //toString()打印异常对象和异常信息
                //System.out.println(ex.toString());
                //以红字的方式打印异常对象、信息、位置
                ex.printStackTrace();
            }finally{
                //不管发不发生异常都会执行的语句
                System.out.println("finally执行了。");
            }
            System.out.println("程序没有结束!");
        }
        public static int get(int[] arr) throws ArrayIndexOutOfBoundsException ,NullPointerException {
            //若异常有一个定义为Exception,可以单写Exception。因为Exception是所有的父类
            if(arr==null){
                throw new NullPointerException("数组为空!");
            }
            if(arr.length==0){
                throw new ArrayIndexOutOfBoundsException("数组长度为0!");//都可以写Exception,因为Exception是所有的父类
            }
            int i=arr[arr.length-1];
            return i;
        }
    }
  • 相关阅读:
    40个GitHub上最受欢迎的iOS开源项目
    Swift应用开源项目推荐
    swift在github上开源的地址
    必须Mark!43个优秀的Swift开源项目推荐
    Swift中编写单例的正确方式
    Android提高第十一篇之模拟信号示波器
    Android平台音频信号FFT的实现
    ios UINavigationController
    工作记录8:iOS 传值问题总结(7种传值完美介绍)
    利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
  • 原文地址:https://www.cnblogs.com/heitaitou/p/12898761.html
Copyright © 2011-2022 走看看