JavaSE—异常处理深入了解(一)

 本章学习内容使用异常处理机制,对程序运行过程中出现的异常情况进行捕捉并处理. 


      目录

                 📌 Java异常概述

                 📌 Java异常体系结构

                 📌 常见的异常

                 📌 异常处理


                            📌 Java异常概述

○ 异常的概念:

•  程序在运行过程中出现的不正常情况

   例如用户输入数据有问题,读写文件时文件被强制删除了,网络传输过程中突然断网...

•  出现异常后,会导致jvm(虚拟机)停止运行,后续程序无法执行.

○ 注意:

•  异常指的并不是语法错误.  (语法错误,编译不通过,不会产生字节码文件,根本不能运行)

○ 异常的抛出机制 :

java中把不同的异常用不同的类表示, 一旦发生某种异常, 就创建该异常类型的对象, 并且抛出;

然后程序员可以捕获到这个异常对象, 并处理; 如果没有捕获这个异常对象, 那么这个异常将会

导致程序终止。

○ java中默认的异常处理机制:

  • 将出现的异常,按不同的类型分类,为每种异常封装了一个类来进行标识.
  • 当出现某种类型的异常情况时,会抛出此类的对象,然后终止虚拟机的运行.

异常信息:

•  异常的类型 (在哪种情况下出现,结合API定位)         • 异常原因           • 异常位置


                        📌 Java异常体系结构


○ java.lang.Throwable  异常体系的超类

 Error 错误:

  • 是虚拟机和Java代码无法解决的问题,例如虚拟机内部异常,内存不够用了.
  • 堆溢出: OutOfMemoryError
  • 栈溢出: StackOverflowError

 Exception 异常:

  • 这类异常时可以通过异常处理机制进行处理的一般性问题.

                               📌 常见的异常

ArithmeticException                                  算术异常

ArrayIndexOutOfBoundsException         数组索引越界

StringIndexOutOfBoundsException        字符串索引越界

ClassCastException                                  类型转换异常

NumberFormatException                          数字格式化异常

NullPointerException                                 空指针异常

代码演示:

public static void main(String[] args) {
        /* 
        int a = 10;
        int b =0 ;
        System.out.println(a/b);
        System.out.println("*****"); 
        */  //ArithmeticException 算术异常

       /* 
        int[] c=new int[2];
        c[3] = 0; 
        */   //ArrayIndexOutOfBoundsException 数组索引越界

       /* 
       String s = "abc";
        s.charAt(4);
        */   //StringIndexOutOfBoundsException 字符串索引越界

        /* 
        Object o = new Integer(10);
        String so = (String) o;
        */  //ClassCastException 类型转换异常

        /* 
        Integer.parseInt("abc"); 
        */  //NumberFormatException 数字格式化异常

        /*
        String ss = null;
        ss.length(); 
        */  //NullPointerException 使用null中的方法称为空指针异常      
    }

                                📌 异常处理

⦁  Java中使用异常处理机制为程序提供了错误处理的能力

⦁  在编码时,就针对可能出现问题的代码,预先编写一些处理机制,当程序运行出现异常时执行处理机制,之后继续执行后续的程序。


●  Java的异常处理是通过5个关键字来实现的:trycatchfinallythrowthrows .

 ○ try{...}catch(){...}

try{ 
  编写可能出现异常的代码 
}catch(异常类型){  
  处理机制  
}  

代码演示:

 public static void main(String[] args) {
        int a =10;
        int b = 0;
        try{
            int c = a/b;
        }catch (ArithmeticException aindex){
            aindex.printStackTrace();  //打印异常信息到控制台
            /* 一般在开发调试阶段使用,供开发人员定位异常问题 */
            System.out.println("算术异常");
        }
    }

运行结果: 


一个try代码块可以对应多个catch

public static void main(String[] args) {
        try {
            String s =null;
            s.length();

            int num =Integer.parseInt("1a");

            int[] b =new int[5];
            for (int i = 0; i <=b.length ; i++) {
                System.out.println(b[i]);
            }
        } catch (ArrayIndexOutOfBoundsException aindex) {
            aindex.printStackTrace();//打印异常信息
            System.out.println("数组索引越界,越界索引:"+aindex.getMessage());
            //getMessage()得到异常原因
        }catch (NumberFormatException nex){
            nex.printStackTrace();
            System.out.println("数字格式化异常:"+nex.getMessage());
        }catch (Exception e){//在具体捕获类型后catch Exception,可以捕获任意类型,但是必须放在最后面
            e.printStackTrace();
            System.out.println("系统繁忙~请稍后再试!");
        }
        System.out.println("继续执行后续程序");

    }

当我们不确定捕获类型时可以使用Exception, Exception可以捕获任意类型, 但是需要放在具体捕获类型后catch. 否则放到首部会覆盖其他具体的捕获类型。


  finally{...}

    finally块中的内容总是会执行的, 且只能有一个finally语句.

 try{  
  编写可能出现异常的代码 
 }catch(异常类型){ 
  处理机制  
 }finally{ 
  代码总能执行  
 } 

○ 使用finally的两种情形:

  • 当catch错误, 异常没有被捕获到, 后面的代码无法执行, 但finally中的代码是可以执行的
 public static void main(String[] args) {
        int[] a = new int[5];
        try {
            for (int i = 0; i <= a.length; i++) {
                System.out.println(a[i]);
            }
        }catch (NumberFormatException nex){
            nex.printStackTrace();
            System.out.println("数字格式化异常:"+nex.getMessage());
        }finally {
            System.out.println("继续执行后续程序");
        }
    }
  • 确保在出现异常的情况下 依然最终把流对象关闭掉
public static void main(String[] args) throws IOException {
       
        FileInputStream inputStream =null;
        try{
            inputStream =new FileInputStream("F:/demo.txt");
                    //文件若找不到,就会出现异常
        }catch (FileNotFoundException e){
            e.printStackTrace();
            System.out.println("文件找不到异常");
        }finally {
            //确保在出现异常时,仍然可以把流对象关闭掉
            if (inputStream!=null){
                inputStream.close();
            }
        }
    }

                                                                                                                         其余内容敬请期待...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值