异常分类和异常的产生过程分析

异常分类

我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?

编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)。

运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)

 

java.Lang. Throvable:类是Java语言中所有错误或异常的超类。

Exception:编译期异常,进行编译(写代码乃avo程序出现的问题

  RuntimeException:运行期异常,jaa程序运行过程中出现的问题

  异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行(吃点药,继续革命工作)

Error:错误

  错误就相当于程序得了一个无法治煎的毛病(非典,艾滋).必须修改源代码,程序才能继续执行

复制代码
public static void main(String[] args) {
        // Exception:编译期异常,进行编译(写代码)java程序出现的问题
      /*  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" );//用来格式化日期
        Date date = null;
        try {
            date = sdf.parse("1999-0909" );//把字符串格式的日期,解析为Date格式的日期
        }catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(date);
      */

        // RuntimeException:运行期异常,java程序运行过程中出现的问题
        /*
                int[] arr = {1,2,3};
                System.out.println(arr[0] );
                try {
                    //可能会出现异常的代码
                    System.out.println(arr[3]);
                }catch(Exception e){
                    //异常的处理逻辑
                    System.out.println(e);
                }
        */
       // Error:错误
       // outoiemoryErron: Java heap space
       // 内存溢出的错误,创建的数组太大了,超出了给VIr分配的内存*/
       // int[] arr = new int[1024*1024*1024];
        // 必须修改代码,创建的数组小一点
        int[]arr = new int[ 1024*1024];

        System.out.println("后续代码");

}
复制代码

 

可查异常

复制代码
 public static void main(String[] args) {
        File f=new File("d:/l.txt");
        System.out.println("试图打开文件");
        try {
            new FileInputStream(f);
            System.out.println("成功打开");
        } catch (FileNotFoundException e) {
            System.out.println("文件不存在");
            e.printStackTrace();
        }
    }
复制代码

 

运行时异常

复制代码
public static void main(String[] args) {
        //任何除数不能为0:ArithmeticException
        int result=5/0;
        //下标越界异常:ArrayIndexOutOfBoundsException
        int j[]=new int[5];
        j[10]=10;

        //空指针异常:NullPointerException
        String str=null;
        str.length();
    }
复制代码

 

错误Error

复制代码
 public static void main(String[] args) {
     
        StringBuffer sb =new StringBuffer();
         
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            sb.append('a');
        }
         
    }
复制代码

 

 

异常的产生过程分析

先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException。我们通过图解来解析下异常产生的过程。

复制代码
 public static void main(String[] args) {

            //创建int类型的数组,并赋值
            int[ ] arr = {1,2,3};
            int e = getElement( arr, 3);
            System.out.println(e);
        }

        //定义一个方法,获取数组指定索引处的元素参数:

        public static int getElement(int[] arr,int index){
            int ele = arr[index ];
            return ele;
        }
复制代码

 

posted @   漁夫  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示