[Java][异常]异常的初探与异常的捕获+练习

2023-12-19 01:21:19

?分为Error和Exception Error是sun公司来处理的严重的异常
? ? ? ? 比如内存泄露这种系统级别的异常
? ? ? ? 后者的Exception就是我们在开发的时候经常遇到的异常
? ? ? ? Exception可以分为两类,RuntimeException 运行时异常 比如数组越界异常
? ? ? ? 除了RuntimeException之外 都是编译时异常 比如日期解析日常

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

public class Main{
    public static void main(String[] args) throws ParseException {
        //Java.lang.Throwable抛出一个问题
        /*分为Error和Exception Error是sun公司来处理的严重的异常
        比如内存泄露这种系统级别的异常
        后者的Exception就是我们在开发的时候经常遇到的异常
        Exception可以分为两类,RuntimeException 运行时异常 比如数组越界异常
        除了RuntimeException之外 都是编译时异常 比如日期解析日常
        */
        //编译时候异常
        String time = "2023年1月1日";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = sdf.parse(time);
        System.out.println(date);
        //在月和日上我输入的字符串各少了一个字符
        //所以输入是会产生异常的 异常的结果是什么? 结果是打印2023年的1月1日 因为年是没问题的 只有月和日存在问题


        //运行时候异常
        int[] arr = {1,2,3,4,5};
        System.out.println(arr[10]);//ArrayIndexOutOfBoundException数组越界异常
        //Java ->(通过javac命令进行编译)字节码文件
        /*
        比如ParseException这个异常就是编译时异常
        从字节码文件->运行结果(Java命令)是不需要处理的 是代码运行的时候出现的异常

         */

        //异常的拓展知识:
        /*
        编译阶段:Java不会运行代码的 但是只会检查语法是否错误 以及做一些性能的优化
        但是遇到了ArrayIndexOutOfBoundException这种运行时异常 编译阶段是不会报错的

        PS:
        编译型的异常是提醒程序员去检查本地信息 在于提醒
        运行时异常没有提醒作用 就是纯粹的报错
         */

        /*
        异常的作用:要从小往上看
        1.查询bug的参考信息
        2.作为方法的返回值
        我们给一个抛出异常的办法 new RuntimeException(); 在内部抛出异常
        
         */




    }
}
//1.如果try没有问题怎么办
int[] arr = {1,2,3,4,5,6};
        try{
            System.out.println(arr[0]);
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("索引越界了");
        }
        System.out.println("看看我执行了么");
/*显然try没有问题就会打印完try内的内容 并且执行完下方的代码*/
//2.如果try有多个问题怎么办
int[] arr = {1,2,3,4,5,6};
        try{
            System.out.println(arr[10]);
            System.out.println(2/0);
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("索引越界了");
        }
        System.out.println("看看我执行了么");
    }
    /*
    这里有两个异常 但是我们只捕获一个异常 代码
    比方说我的try里面包含了两个异常
    1.第一个是ArrayIndexOutOfBoundsException
    2.第二个是一个运算异常
    但是我这里只考虑捕获了第一个异常 所以第二个异常被略过了 输出的时候只是不会输出第二个语句而已
     */
/*
   如果说你的语句中可能存在多个异常
   那么你就要写多个捕获语句 并且注意!!父类一定要写在下面
     */
int[] arr = {1,2,3,4,5,6};
        try{
            System.out.println(arr[10]);
            System.out.println(2/0);
            String s= null;
            System.out.println(s.equals("abc"));
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("索引越界了");
        }catch(ArithmeticException e){
            System.out.println("除数不能为0");
        }catch(NullPointerException e){
            System.out.println("空指针异常");
        }catch(Exception e){
            System.out.println("这是一个父类的异常");
        }
        System.out.println("看看我执行了么");
//4.如果try遇到了问题 try下面的其他代码还会执行吗
 int[] arr = {1,2,3,4,5,6};
        try{
            System.out.println(arr[10]);
            System.out.println(2/0);
            String s= null;
            System.out.println(s.equals("abc"));
        }catch (ArrayIndexOutOfBoundsException|ArithmeticException e){
            System.out.println("这是在JDK7以后出现的新写法 两种异常输出一种结果");
        }catch(NullPointerException e){
            System.out.println("空指针异常");
        }catch(Exception e){
            System.out.println("这是一个父类的异常");
        }
        System.out.println("看看我执行了么");
    }

文章来源:https://blog.csdn.net/qq_37511412/article/details/135073258
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。