• java---异常(防患于未然)


    一、异常分为编译时异常和运行时异常

    二、java异常划分如下图:

    1.Error:系统级别问题 

    2.Exception:java.lang包下,称为异常类,代表程序本身可以处理的问题

    3.RuntimeException:运行时异常,在运行时候才会发现报错的,例如空指针异常,数组索引越界

    4.其他异常:除RuntimeException之外的所有异常,在编译时候就要处理,否则编译不通过,例如日期格式等

    三、异常出现的原因:

    运行时异常:业务逻辑思维没有考虑好

    例子有:

    1.数组索引越界异常(ArraylndexOutOfBoundsException)

    2.空指针异常(NullpointerException)

    3.算术异常(ArithmeticException)

    4.丢失资源(MissingResourceException)

    5.找不到类 (ClassNotFoundException)

    编译时异常:代码书写规范问题

    四、处理异常三大方法 

    1.出现异常直接抛出去给调用者,调用者也抛出去

    具体:

    throws:用在方法上,可以将方法内部的的异常抛给调用者处理

    方式:哪里红光标就放哪里然后使用快捷键:alt+回车

    评价:一直往外抛,抛出去给虚拟机会导致程序死亡 

    语法:

    1. 方法 throws Exception{
    2. }
    3. 快捷键:alt+回车
    4. 自定义异常,方法内部抛出使用:throw new 异常

     选中这个抛出异常 

    2.出现异常自己捕获,不麻烦别人

    具体:

    try....catch:用在方法内部,可以将出现的异常直接捕获处理

    评价:这种方式还可以,发生异常自己内部独立处理,程序继续往下执行

    语法:

    1. try {
    2. //可能出现的异常代码块
    3. } catch (Exception e) {
    4. e.printStackTrace();//打印异常栈信息
    5. }
    6. //快捷键:ctrl+alt+t

    3.前两种结合,出现异常抛出去给调用者,调用者捕获处理

    具体:

    评价:这种方式最后,把最底层代码抛给最外层再进行集中捕获处理

    语法: 

    具体步骤跟着前面两个来1.先对异常进行抛出到最外层,2.然后进行捕获处理

    五、例子

    1.无法解决的虚拟机异常之栈溢出

    1. package bao;
    2. //测试类
    3. public class Test {
    4. public static void main(String[] args) {
    5. //栈溢出,无法解决的异常,java.lang.StackOverflowError
    6. main(args);
    7. }
    8. }

    运行结果

        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)
        at bao.Test.main(Test.java:6)

     1.无法解决的虚拟机异常之堆溢出

    1. package bao;
    2. //测试类
    3. public class Test {
    4. public static void main(String[] args) {
    5. //堆溢出,无法解决的异常,java.lang.OutOfMemoryError
    6. Integer[] arr = new Integer[1024*1024*1024];
    7. }
    8. }

    运行结果

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at bao.Test.main(Test.java:6)

    Process finished with exit code 1

     运行时异常例子

    1. package bao;
    2. public class Test {
    3. public static void main(String[] args) {
    4. //2.快捷键ctrl+alt+t生成捕获异常
    5. try {//监控区域
    6. System.out.println(10/0);//1.不能除于0,出现异常
    7. } catch (Exception e) {//想要捕获的异常类型
    8. System.out.println("这里出现了异常");//手动提醒用户出现异常
    9. throw new RuntimeException(e);//往外抛,打印错误的信息,这个注释掉调控制台就不会报红
    10. } finally {//处理善后工作
    11. System.out.println("出现异常了我还能运行耶");//出现异常后还能运行的代码
    12. }
    13. }
    14. }
    15. //注意:多组异常放一起,越大的父类异常放在越下面

    运行结果

    这里出现了异常
    出现异常了我还能运行耶
    Exception in thread "main" java.lang.RuntimeException: java.lang.ArithmeticException: / by zero
        at bao.Test.main(Test.java:9)
    Caused by: java.lang.ArithmeticException: / by zero
        at bao.Test.main(Test.java:6)

    Process finished with exit code 1

     

    旁白:出现异常能解决就解决,解决不了再快捷键抛出捕获处理等。

  • 相关阅读:
    知识工程---neo4j 5.12.0+GDS2.4.6安装
    音视频(1) - FFmpeg4.3.4编译
    零基础自学C语言|自定义类型:结构体
    linux网络编程之System V 共享内存 和 系列函数
    测试人员的KPI怎么设置
    [消息队列 Kafka] Kafka 架构组件及其特性(二)Producer原理
    【C语言基础】那些你可能不知道的C语言“潜规则”
    【Java每日一题】— —第二十二题:类名作参数进行方法调用的传递问题。(2023.10.06)
    .Net Core中Host的作用和用法
    小米软件开发二面和中兴软开一面
  • 原文地址:https://blog.csdn.net/m0_52861000/article/details/126214983