Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 318|回复: 0

Java 常见异常及处理方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-10 17:01:45 | 显示全部楼层 |阅读模式

    Java 常见异常处理方案

     

     

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

    比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。

    异常发生的原因有很多,通常包含以下几大类:

    Java 中一个异常的产生,主要有如下三种原因:

    1: Java 内部错误发生异常,Java 虚拟机产生的异常。

    2: 编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常。

    3: 通过 throw 语句手动生成的异常,这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息。

    这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。为了能够及时有效地处理程序中

    Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

     

    我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常。运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常。

     

    Java 异常强制用户考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理。编写代码处理某个方法可能出现的异常,可遵循如下三个原则:

    在当前方法声明中使用 try catch 语句捕获异常。

    一个方法被覆盖时,覆盖它的方法必须拋出相同的异常或异常的子类。

    如果父类抛出多个异常,则覆盖方法必须拋出那些异常的一个子集,而不能拋出新异常。的运行错误,Java 专门引入了异常类。

    下面是一些常见的异常以及解决方案:

     

    空指针异常:NullPointerException。这个异常我们开发中最常见的异常了,产生以下图为例,其实就是blog这个对象是null,当null调用属性或者方法的时候就会报空指针异常。

    所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。 2.所谓的空指针,就是指针的内容为空,比如上面的s,如果令它指向null,就是空指针。 3.所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法。比如上面的s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常

    空指针异常的解决办法有:

    1:带有字面值的字符串比较

     在应用程序代码中一种常见的情况是将字符串变量与字面值进行比较。字符串字面值可能是字符串或枚举元素。我们将通过使用字面值来调用方法,而不是通过使用null对象来调用方法

    2.检查一个方法的参数
      在执行方法之前,确保检查了参数是否为null.当参数被适当检查后,方法会继续执行。否则,你可以抛出IllegalArgumentException并且通知调用方法传入的参数有误。

    3 优先使用String.valueOf()而不是toString() 

    当你的应用程序代码如要一个对象的字符串来描述时,避免使用对象的toString方法。如果你的对象的引用为null,NullPointerException将会被抛出。反之,考虑使用静态方法String.valueOf(),该方法不会抛出任何异常并且在函数参数为null的情况下会打印null。

    4. 使用三元运算符

    三元运算符能帮助我们避免NullPointerException.运算符具有这样的形式:

    boolean expression ? value1 : value2;

    三元运算符能帮助我们避免NullPointerException.运算符具有这样的形式:首先,计算布尔表达式,如果表达式为true,value1被返回,否则value2被返回。我们能使用三元运算符来处理null指针,例如:

      String message = (str == null) ? “” : str.substring(0, 10);

      变量message将为空,如果str的引用为null,否则,如果str指向实际的数据,message将获取str的前10个字符。

    5.创建返回空集合而不是null的方法

    一种非常好的技术是创建一个返回空集合的方法,而不是返回null值。你的应用程序代码可以迭代空集合并使用它的方法和域,而不会抛出NullPointerException

    类型转换异常:ClassCastException这个错误也很常见,通常在程序中出现强制类型转换时出现这个错误。

    数组下标越界:ArrayIndexOutOfBoundsException。数组的长度决定了它所能装载的数据的量,比如数组的长多是4,数组是从0开始计数的,但是调用的确是7,超出数组的范围,所以报错。

    hql或者sql查询异常:SQLException或hql.ast.QuerySyntaxException。这是hql或者sql的异常,说明你写的sql或者hql有错误,需要调试修改。

     

    404。路径错误。出现404一定是你的请求路径有问题,或者文件路径不存在。

     

    内存溢出:OutOfMemoryError。代码中存在死循环,(处理循环)启动参数设定过小(设定服务器的启动参数增大),内存中一次加载的数据量过于庞大(减少一次加载的数据),集合类应用的对象未回收(手动回收未回收对象)这个异常导致的结果十分严重,据老师所讲。美国七十年代发射的航天器,就是因为这个原因导致系统死机爆炸。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 06:07 , Processed in 0.063923 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表