• Java,异常处理,异常的概述


    异常指的是程序在执行过程中,出现的非正常的情况,如果不处理最终会导致jvm的非正常停止。

    异常的抛出机制:

    Java把不同的异常用不同的类表示,一旦出现某种异常,就创建该异常类型的对象,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)到这个异常对象,那么这个异常对象将会导致程序终止。

    对待异常:

    对于程序出现的异常,一般有两种解决办法:

    ①遇到错误就终止程序的运行。

    程序员在编写程序时,就充分考虑到各种可能发生的异常和错误,极力预防和避免。实在无法避免的,要编写相应的代码进行异常的检测、以及异常的处理,保证代码的健壮性。

    异常的体系结构:

    ①Throwable:

    java.lang.Throwable类是Java程序执行过程中发生的异常事件对应的类的根父类。

    Throwable中常用的方法:

    ·public void printStackTrace( ):打印异常的详细信息。

    包含了异常的类型、异常的原因、异常出现的位置、在开发和调试阶段都得使用printStackTrace。

    ·public String getMessage( ):获取发生异常的原因。

    ②Error和Exception

    Throwable可以分为两类:Error和Exception。分别对应着java.lang.Error和java.lang.Exception两个类。

    Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。

    例如:StackOverflowError(栈内存溢出)和OutOfMemoryError(堆内存溢出,简称OOM)。

    Exception(异常):其他因程序错误或偶然的外在因素导致的一般性问题,需要使用针对性的代码进行处理,使程序继续运行。否则一旦程序发生异常,程序也会挂掉。例如:

    ·空指针访问

    ·试图读取不存在的文件-

    ·网络连接中断

    ·数组角标越界

    根据异常可能出现的阶段,可以将异常分为:

    ·编译时异常(也称为,受检异常)(不是RuntimeException的其他的……Exception都是编译时异常)

    常见的有:

    ClassNotFoundException、FileNotFound、IOException

    ·运行时异常(也称为非受检异常)(RuntimeException)

    常见的运行时异常和演示如下:

    1. import java.util.Date;
    2. import java.util.Scanner;
    3. public class ErrorTest
    4. {
    5. public static void main(String[] args)
    6. {
    7. //举例1:死递归,栈内存溢出的错误 (Exception in thread "main" java.lang.StackOverflowError)
    8. //main(args);
    9. //举例2:OutOfMemoryError
    10. //byte[] arr = new byte[1024*1024*100];//假设堆空间最大为10mb,此处为100mb
    11. // int[] arr = new int[10];
    12. // System.out.println(arr[10]); //ArrayIndexOutOfBoundsException
    13. ErrorTest ee = new ErrorTest();
    14. String str = new String();
    15. //ee.test1();
    16. //ee.test2();
    17. // ee.test3(str);
    18. // ee.test4();
    19. ee.test5();
    20. }
    21. public void test1()
    22. {
    23. String str = "aaa";
    24. int i = Integer.parseInt(str); //NumberFormatException
    25. System.out.println(i);
    26. }
    27. public void test2()
    28. {
    29. Scanner scan = new Scanner(System.in);
    30. int num = scan.nextInt();//若输入abc //InputMismatchException
    31. System.out.println(num);
    32. }
    33. public void test3(Object o)
    34. {
    35. Date dd = (Date) o;//类转换异常 //ClassCastException
    36. }
    37. public void test4()
    38. {
    39. int[] arr = new int[2];
    40. arr = null;//空指针访问异常
    41. System.out.println(arr[0]); //NullPointerException
    42. }
    43. public void test5()
    44. {
    45. int num = 10;
    46. int a = num/0;//分母不能为零 //ArithmeticException
    47. System.out.println(a);//算术异常
    48. }
    49. }

  • 相关阅读:
    uniapp微信小程序开发物料
    【LINUX】使用Service服务开机自启动脚本或者指令
    理解RESTful Api设计
    分布式通信框架
    2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书海口经济学院图书馆
    案例分享|金融业数据运营运维一体化建设
    Nginx 在 Linux 系统上安装 - 细节狂魔
    驱动开发之pinctrl 和 gpio 子系统
    【国外翻译】采访漫威视觉开发总监:AndyPark
    C#宏定义
  • 原文地址:https://blog.csdn.net/2302_79468488/article/details/134241023