Java — 关于异常

本文介绍了Java编程中的异常处理,包括异常的定义、类型层次、常见异常及后果。异常分为Error和Exception,Error通常导致程序终止,Exception则可以捕获处理。未检查异常如空指针、算术异常等在编译时不强制处理,而检查异常如IO异常、SQL异常需在编译时处理。处理异常主要通过try-catch-finally语句,或者使用throws关键字声明抛出异常。
摘要由CSDN通过智能技术生成
异常概述
1.异常的介绍
  • 异常就是在程序运行的过程中所发生的不正常的事件,它会中断指令的正常执行。、
  • 常见原因
    • 输入错误、设备错误、代码错误、磁盘空间不足……
    • 最主要的还是代码错误
2.异常的结构层次

Java提供异常类来表示程序运行中发生的异常,其中throwable为基类,其下分为ErrorException两类
在这里插入图片描述

  • Error
    • 运行系统中的内部错误以及资源耗尽错误
    • 唯一的解决办法就是让程序尽早终止
  • Exception
    • 运行时异常(RuntimeException)
      • 在 Java 虚拟机正常运行期间抛出的异常,由程序错误导致。
      • Java编译器允许程序中不对这类异常做出处理。
      • 错误的类型转换、数组下标越界、访问空指针等
3.异常的后果
  • 会造成:丢失用户数据、程序崩溃……
  • 应当做到向用户通告错误,保存所有的操作结果,允许用户以适当的形式退出程序
常见的异常
1.未检查异常

编译器不要求强制处置的异常,虽然你有可能出现错误,但是不会在编译的时候检查

  • 空引用异常 NullPointerException

    Student stu = null;//stu没有进行初始哈,编译错误
    if(null != stu)
        stu.setName("张三");//可通过判断是否为空跳过
    
  • 算术异常 ArithmeticException

     int a = 10, b = 0;
     int c = a / b;//除数不可为0
    
  • 数组下标越界异常 ArrayIndexOutOfBoundsException

    int[] nums = {1, 2, 3};
    System.out.println(nums[3]);//访问无效数组下标
    
  • 字符串下标越界异常 StringIndexOutOfBoundsException

    String str = "abc";
    System.out.println(str.charAt(3));//访问无效字符串位置下标
    
  • 类型转换异常 ClassCastException

    Object obj = "abc";//向上转型,基类类型的引用不能直接调用
    String str1 = (String)obj;
    System.out.println(str1.charAt(0));
    
    //判断能否进行转型
    if(obj instanceof  Student){
        Student stu1 = (Student)obj;
    }
    
2.检查异常

检查异常也叫受检异常,程序在编译阶段,编译器要求必须去处理的

  • 除了 RuntimeException 与其子类,以及错误Error,其他的都是检查异常
  • 如:IO异常、SQL异常
处理异常的机制
1.捕获异常
  • 若当前方法有能力处理异常,就捕获并处理它

  • 应用try—catch—finally语句块

    try{
        Class.forName("net.Student");//主动加载一个类
    }catch (ClassNotFoundException e){//捕获的异常类型(空格)标识符(类似方法的形参)
        //处理异常的代码
        System.out.println("发生了异常");
        e.printStackTrace();//打印异常的堆栈信息
    }finally{//不论是否发生异常,均会执行
        System.out.println("finallly语句块");
        //资源的回收操作
    }
    
  • 捕获的异常和真实发生的异常类型匹配执行(异常类型的基类也可

  • 捕获是基类类型,真实发生的是子类类型,也可以匹配执行

  • 子类类型放在上边,基类类型放在下边

  • catchfinally 不能同时省略,无 catchfinally 必须紧跟 try

2.抛出异常
  • 调用异常的方法来处理这些异常,叫抛出异常

  • 声明异常使用throws关键字,表示该方法可能要抛出异常

    public static int getLength(int[] nums)throws NullPointerException{
        if(null == nums){
            NullPointerException e = new NullPointerException();
            throw e;//抛出异常的动作,当前语句执行时表示真的放生了异常
        }else{
            return nums.length;
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值