Demo01.java 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package course.exception;
  2. /**
  3. * @author WanJl
  4. * @version 1.0
  5. * @title Demo01
  6. * @description Java异常
  7. * @create 2026/7/28
  8. */
  9. public class Demo01 {
  10. /*
  11. 异常 就是程序出现不正常的情况
  12. Java中的异常体系结构:
  13. Throwable: 是Java中所有的异常类(Exception)和错误类(Error)的父类,
  14. 只有是它的对象或它的子类的对象,才可以别Java虚拟机进行处理(抛出、捕获处理)。
  15. |- Exception:Java中所有异常类的父类
  16. |- 编译器异常 也就是在项目开发的时候,编译的时候就会报错。
  17. |- 运行时异常 也就是说代码不会报错,但是运行后会报错。所有的运行时异常都有一个父类 RuntimeException
  18. |- Error:Java中所有错误类的父类
  19. 只有Java异常也就是Exception类或其子类,才可以别我们捕获处理或抛出,才可以处理。
  20. 至于Error这种错误,是内存级别的,不是我们可以捕获抛出的。需要改代码。
  21. public void method(){ //无条件的递归,一定会引发栈溢出StackOverflowError错误
  22. method();
  23. }
  24. Throwable
  25. |- Exception
  26. |- RuntimeException
  27. |-......
  28. |-.....
  29. |- Error
  30. |-.....
  31. Error 是属于严重问题,通常代码都无法处理。一般比如内存错误
  32. Exception: 异常类,表示程序本身可以处理的问题。
  33. RuntimeException以及其子类,属于运行时异常,比如空指针异常,数组索引下标越界异常,除零异常
  34. 除了RuntimeException以及其子类之外的所有异常,都是在编译期必须要处理的,否则程序不能通过编译
  35. javac.exe java.exe
  36. Java文件(源代码).java ---编译---> 字节码文件 .class ---解释---> 运行结果
  37. 编译期 | 运行期
  38. 所谓的编译期异常,就是在Java源代码编译成字节码的过程中出现异常类,需要处理(捕获/抛出)
  39. 所谓的运行期异常,就是在编译的阶段没有任何错误,但是在从字节码文件解释运行的获取运行结果的期间出现的错误,导致程序不能正常执行。
  40. Java虚拟机JVM 它会怎么处理异常?
  41. 如果程序出了问题,我们不做任何处理的话,最终会由JVM做默认的处理,处理的步骤:
  42. 1、把异常的名称、错误原因、以及异常出现的位置等信息输出在控制台
  43. 2、程序停止运行
  44. 我们处理异常的方式也分为两种:
  45. 1、我们自己捕获异常,并且处理异常。
  46. 格式:
  47. try{
  48. 可能出现异常的代码
  49. }catch(异常类型1 变量名){
  50. 异常类型1的处理方式
  51. }catch(异常类型2 变量名){
  52. 异常类型2的处理方式
  53. }catch(异常类型n 变量名){
  54. 异常类型n的处理方式
  55. }
  56. 我们处理异常,其实在开发场景下,怎么处理不太重要,能处理就处理了,处理不了也有让程序能够继续运行,才是最重要的。
  57. 程序出现异常但能够处理或能够正常运行,体现的是程序的 鲁棒性(健壮性)
  58. 兜住异常,给开发人员发邮件
  59. 2、我们不处理异常,交给调用者去处理,比如写了一个方法,里面会有编译期异常,我们不处理,只抛出。
  60. 谁调用了这个方法,谁去处理,他如果不处理也继续抛出,直到最终抛给JVM,JVM进行默认的处理。
  61. */
  62. public static void main(String[] args) {
  63. int a=0;
  64. int[]arr;
  65. try { //这里面是可能出现异常的情况
  66. //a = 10 / 0;
  67. arr= new int[]{};
  68. arr[3]=5;
  69. System.out.println("55555555555555555");
  70. }catch (ArithmeticException e){
  71. System.out.println("不能除以0");
  72. System.out.println("以及一些其他的异常处理操作.....");
  73. System.out.println(e.getMessage());
  74. }catch (RuntimeException e){
  75. System.out.println("出现了运行时异常");
  76. System.out.println("输出的异常信息:"+e.getMessage());
  77. System.out.println("输出完整的异常信息:"+e.fillInStackTrace());
  78. System.out.println(e.getCause());
  79. }catch (Exception e){
  80. System.out.println("出现了异常..但不是运行时异常");
  81. System.out.println(e.getMessage());
  82. }
  83. System.out.println(a); //这种,代码写的时候不报错,但是运行后报错的,就是运行时异常
  84. System.out.println("........后续的代码正在运行................");
  85. }
  86. }