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


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

目录
相关文章
|
1月前
|
Java 开发者 UED
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
【实战宝典】Java异常处理大师级教程:throws关键字,让异常声明成为你的专属标签!
40 3
|
11天前
|
Java 编译器 数据库连接
Java——异常
在 Java 中,程序执行过程中的不正常行为被称为异常。异常分为 Error 和 Exception。Error 表示系统级错误,而 Exception 则封装程序可能出现的问题。异常包括编译时异常和运行时异常(如数组越界)。异常可用于查找 bug 信息和作为方法内部的特殊返回值。处理异常的方式有默认处理和捕获异常,后者通过 try-catch 结构实现。此外,还可以自定义异常类来更灵活地处理特定情况。
25 9
Java——异常
|
14天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
1天前
|
Java 编译器 索引
|
2天前
|
IDE Java 开发工具
java自定义异常20
java自定义异常20
|
2天前
|
IDE Java 开发工具
java捕获异常19
java捕获异常19
10 2
|
6天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
1月前
|
Java 数据库连接 程序员
Java 认识异常
Java 认识异常
13 1
|
1月前
|
搜索推荐 Java 开发者
Java异常处理新高度:自定义异常,打造个性化的错误管理体系!
Java异常处理新高度:自定义异常,打造个性化的错误管理体系!
37 1
|
1月前
|
前端开发 Java
Java高手都在用的秘籍:自定义异常,让错误信息说话!
Java高手都在用的秘籍:自定义异常,让错误信息说话!
38 1