Java三大异常概念和处理步骤(防患于未然)

简介: 异常分为编译时异常和运行时异常

一、概念

1.异常分为编译时异常和运行时异常

2.java异常划分如下图:



1.Error:系统级别问题


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


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


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

二、异常出现的原因

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


例子有:


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


2.空指针异常(NullpointerException)


3.算术异常(ArithmeticException)


4.丢失资源(MissingResourceException)


5.找不到类 (ClassNotFoundException)


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

三、处理异常三大方法

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

具体:

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

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

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

语法:

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

选中这个抛出异常


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

具体:

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

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

语法:

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

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

具体:

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

语法

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

五、例子

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

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

运行结果

   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.无法解决的虚拟机异常之堆溢出

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


运行结果

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

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

Process finished with exit code 1

 


运行时异常例子

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

运行结果

这里出现了异常

出现异常了我还能运行耶

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


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

目录
相关文章
|
2月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
80 1
|
2月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
2月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
99 12
|
2月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
46 1
|
15天前
|
存储 Java 程序员
Java的基础概念一
### Java编程基础简介 #### 一、注释 注释用于解释代码,不会参与编译和运行。Java支持三种注释: - **单行注释**:以 `//` 开头。 - **多行注释**:以 `/* ... */` 包围。 - **文档注释**:通常用于生成开发文档。 #### 二、关键字 关键字是被Java赋予特定含义的英文单词,全部小写,且在代码编辑器中有特殊颜色标记。常用的如 `class` 表示定义一个类。
Java的基础概念一
|
5天前
|
Java 数据安全/隐私保护
Java的基础概念(二)
本文介绍了Java编程语言中的运算符和表达式,涵盖算术运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符等。重点讲解了算术运算符的使用,如加减乘除取余,并强调了整数除法和取余的特殊性。同时,详细说明了隐式转换与强制转换的概念及应用场景,以及字符串和字符的拼接规则。通过多个案例演示了不同运算符的实际应用,包括数值拆分、自增自减、三元表达式的使用等。最后简要提及了运算符的优先级,指出小括号具有最高优先级。
|
2月前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
87 7
|
2月前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
103 6
|
2月前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
70 1
|
2月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
88 2