| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package course.exception;
- /**
- * @author WanJl
- * @version 1.0
- * @title Demo01
- * @description Java异常
- * @create 2026/7/28
- */
- public class Demo01 {
- /*
- 异常 就是程序出现不正常的情况
- Java中的异常体系结构:
- Throwable: 是Java中所有的异常类(Exception)和错误类(Error)的父类,
- 只有是它的对象或它的子类的对象,才可以别Java虚拟机进行处理(抛出、捕获处理)。
- |- Exception:Java中所有异常类的父类
- |- 编译器异常 也就是在项目开发的时候,编译的时候就会报错。
- |- 运行时异常 也就是说代码不会报错,但是运行后会报错。所有的运行时异常都有一个父类 RuntimeException
- |- Error:Java中所有错误类的父类
- 只有Java异常也就是Exception类或其子类,才可以别我们捕获处理或抛出,才可以处理。
- 至于Error这种错误,是内存级别的,不是我们可以捕获抛出的。需要改代码。
- public void method(){ //无条件的递归,一定会引发栈溢出StackOverflowError错误
- method();
- }
- Throwable
- |- Exception
- |- RuntimeException
- |-......
- |-.....
- |- Error
- |-.....
- Error 是属于严重问题,通常代码都无法处理。一般比如内存错误
- Exception: 异常类,表示程序本身可以处理的问题。
- RuntimeException以及其子类,属于运行时异常,比如空指针异常,数组索引下标越界异常,除零异常
- 除了RuntimeException以及其子类之外的所有异常,都是在编译期必须要处理的,否则程序不能通过编译
- javac.exe java.exe
- Java文件(源代码).java ---编译---> 字节码文件 .class ---解释---> 运行结果
- 编译期 | 运行期
- 所谓的编译期异常,就是在Java源代码编译成字节码的过程中出现异常类,需要处理(捕获/抛出)
- 所谓的运行期异常,就是在编译的阶段没有任何错误,但是在从字节码文件解释运行的获取运行结果的期间出现的错误,导致程序不能正常执行。
- Java虚拟机JVM 它会怎么处理异常?
- 如果程序出了问题,我们不做任何处理的话,最终会由JVM做默认的处理,处理的步骤:
- 1、把异常的名称、错误原因、以及异常出现的位置等信息输出在控制台
- 2、程序停止运行
- 我们处理异常的方式也分为两种:
- 1、我们自己捕获异常,并且处理异常。
- 格式:
- try{
- 可能出现异常的代码
- }catch(异常类型1 变量名){
- 异常类型1的处理方式
- }catch(异常类型2 变量名){
- 异常类型2的处理方式
- }catch(异常类型n 变量名){
- 异常类型n的处理方式
- }
- 我们处理异常,其实在开发场景下,怎么处理不太重要,能处理就处理了,处理不了也有让程序能够继续运行,才是最重要的。
- 程序出现异常但能够处理或能够正常运行,体现的是程序的 鲁棒性(健壮性)
- 兜住异常,给开发人员发邮件
- 2、我们不处理异常,交给调用者去处理,比如写了一个方法,里面会有编译期异常,我们不处理,只抛出。
- 谁调用了这个方法,谁去处理,他如果不处理也继续抛出,直到最终抛给JVM,JVM进行默认的处理。
- */
- public static void main(String[] args) {
- int a=0;
- int[]arr;
- try { //这里面是可能出现异常的情况
- //a = 10 / 0;
- arr= new int[]{};
- arr[3]=5;
- System.out.println("55555555555555555");
- }catch (ArithmeticException e){
- System.out.println("不能除以0");
- System.out.println("以及一些其他的异常处理操作.....");
- System.out.println(e.getMessage());
- }catch (RuntimeException e){
- System.out.println("出现了运行时异常");
- System.out.println("输出的异常信息:"+e.getMessage());
- System.out.println("输出完整的异常信息:"+e.fillInStackTrace());
- System.out.println(e.getCause());
- }catch (Exception e){
- System.out.println("出现了异常..但不是运行时异常");
- System.out.println(e.getMessage());
- }
- System.out.println(a); //这种,代码写的时候不报错,但是运行后报错的,就是运行时异常
- System.out.println("........后续的代码正在运行................");
- }
- }
|