异常以及常见运行时异常及其代码

异常

在Java语言中,将程序执行中发生的不正常情况称为异常(开发过程中的语法错误和逻辑错误不是异常)
异常(Exception)一般分为两类:运行时异常(非受检异常)和编译时异常(受检异常)

1、Error和Exception的区别

Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机一般会选择线程终止。
Exception是程序本身可以处理的异常

2、运行时异常和非运行时异常

运行时异常都是RuntimeException类及其子类异常,如ClassCastException、IndexOutOfBoundsException等,这些异常一般是由程序逻辑错误引起的.
非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如果不处理,程序就不能编译通过。如IOException等以及用户自定义的Exception异常。

异常的体系结构图

在这里插入图片描述

运行时异常举例

  1. java.lang.NullPointerException (空指针异常)
  2. java.lang.ArrayIndexOutOfBoundsException (数组下标越界异常)
  3. java.lang.NumberFormatException (数字格式异常)
  4. java.lang.ArithmeticException (算数异常)
  5. java.lang.ClassCastException (强制类型转换异常)
  6. java.lang.ClassNotFoundException (类找不到异常)
  7. java.lang.IndexOutOfBoundsException (索引下标越界异常)
  8. java.sql.SQLException (SQL执行异常)
  9. java.io.IOException (输入输出异常)
  10. java.lang.IllegalArgumentException (方法参数异常)
  11. java.lang.IllegalAccessException (无访问权限异常)
  12. java.lang.NoSuchMethodError (方法不存在错误)
  13. java.lang.InstantiationError(实例化异常)
  14. java.lang.LinkageError(连接错误)
  15. java.lang.StackOverflowError(堆栈溢出)
  16. java.lang.OutOfMemoryError(内存溢出异常)

运行时异常的解释

  1. java.lang.NullPointerException
    这个异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。
public void test1(){
        int arr1[] =null;
        System.out.println("arr1[2]");
     } 
  1. java.lang.ArrayIndexOutOfBoundsException
    这个异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了
public void test2(){
          int[] arr2=new int[10];
          System.out.println(arr2[10]);
     }
  1. java.lang.NumberFormatException
    数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。
public void test4(){
            String str2="123";
            str2="abc";
            int num=Integer.parseInt(str2);
       }
  1. ArithmeticException
    算数异常
    比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数 学运算的地方,公式是不是有不妥了。
        public void test6(){
              int a=10;
              int b=0;
              System.out.println(a/b);
        }   
  1. ClassCastException
    类造型异常(强制类型转换异常)
     public void test3(){
          Object obj=new Date();
          String str=(String)obj;
     }
  1. java.lang.ClassNotFoundException
    异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确
    错误信息:找不到该类包

首先在项目文件中没有添加相应的jar包在依赖里看是否有jar包
如果有jar包。双击打开他,如果提示已经损坏需要重新下过,重新导入
最后的原因是没有将maven工程的jar包发布到部署的项目文件中。在内置的tomcat中没有生成lib依赖

  1. java.lang.IndexOutOfBoundsException
    索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。

  2. java.sql.SQLException
    Sql语句执行异常

  3. java.io.IOException
    输入输出异常

  4. java.lang.IllegalArgumentException
    方法参数错误
    很多J2ME的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会 出现这个异常,再比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异 常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

  5. java.lang.IllegalAccessException
    无访问权限异常
    当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情 况下要注意这个异常。

  6. java.lang.NoSuchMethodError
    方法不存在错误
    当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。

  7. java.lang.InstantiationError
    实例化异常
    实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.

  8. java.lang.LinkageError
    连接错误
    链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况

  9. java.lang.StackOverflowError
    堆栈溢出
    堆栈溢出错误,一般都是使用递归的时候层次调用太深抛出的异常。原因在于 : 无限调用递归函数, 函数是以栈帧的形式存在于虚拟机栈内存中, 一直创建栈帧, 导致栈溢出.

  10. java.lang.OutOfMemoryError
    内存溢出异常
    检查代码中是否有死循环或递归调用。
    检查是否有大循环重复产生新对象实体。
    检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
    检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收
    或者是JVM内存设置过小,可以调大jvm内存,和优化代码,Java堆用于存储对象实例, 只要不断地创建对象, 并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制来清除这些对象, 那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常. (摘抄自深入理解java虚拟机), 所以一直new String() 并不会造成堆内存溢出.

原文引用链接:
https://blog.csdn.net/weixin_53148080/article/details/119838100
https://zhidao.baidu.com/question/585708962.html
https://blog.csdn.net/a34651714/article/details/102834548

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值