异常分类与异常的产生过程解析

异常分类

我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。

异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?

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

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

package Demo_Exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
java.Lang .Throwable:类是Java语言中所有错误或异常的超类。
        Exception:编译期异常,进行编译(写代码)java程序出现的问题
    RuntimeException:运行期异常,java程序运行过程中出现的问题
    异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行(吃点药,组续革命工作)
Error:错误
    错误就相当于程序得了一个无法治愈的毛病(非典,艾滋).必须修改源代码,程序才能继续执行
 */
public class Demo01_Exception {
    public static void main(String[] args) /*throws ParseException*/ {
        //Exception :编译期异常,进行编译(与代码)java程序出现的问题
//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//用来格式化
//        Date parse = null;//把字符串格式的日期,解析为Date格式日期
//        try {
//            parse = format.parse("1999-0909");
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
//        System.out.println(parse);
//        //RuntimeException:运行期异常,java程序运行过程中出现的问题
//        int[] arr = {1,2,3};
//        //System.out.println(arr[0]);
//        try {
//            //可能会出现异常的代码
//            System.out.println(arr[3]);
//        }catch (Exception e){
////            //异常的处理逻辑
//            /*
//                Error:错误
//              OutofemoryError: Java heap space
//              内存溢出的错误,创建的数组太大了,超出了给VIM分配的内存
//             */
//            System.out.println(e);
//            int[] arr = new int[1024*1024*1024];
                //必须修改代码,创建的数组小一点
              int[] arr = new int[1024*1024];
            System.out.println("后续代码");
        }
    }

 

3、编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。

编译时异常因为什么而得名?因为编译时异常必须在编译前先处理,如果不处理编译器报错,因此得名。

4、所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。因为异常的发生就是new异常对象。

编译时异常和运行时异常的区别是什么?

答:编译时异常一般发生的概率比较高。对于一些发生概率高的异常,需要在编译时预先对其处理。
运行时异常一般发生的概率很低。你可以预先处理,也可以不处理。

假设java中没有对异常进行划分,没有分编译时异常和运行时异常,所有的异常都需要在编写阶段对其预处理,将是怎样的效果?
首先,如果这样做的话,程序肯定是绝对的安全。
但是程序员就太累,到处都是处理异常的代码,显得很乱。

5、java中对异常的处理方式包括两种方式:
第一种:在方法声明的位置上,使用throws关键字,抛给上一级。谁掉用我我就抛给谁。
第二种:使用try…catch语句进行异常的捕捉。

异常发生之后,如果选择了上抛,抛给了调用者,调用者需要对这个异常继续处理,同样调用者处理这个异常也有两种方式。

注意:java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果,终止程序执行。

异常的产生过程解析

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

 

posted @ 2022-07-07 11:29  zj勇敢飞,xx永相随  阅读(66)  评论(0编辑  收藏  举报