常见的异常和错误

一、异常是什么?

异常俗称“bug”
Bug一词的原意是“臭虫”或“虫子”;而在电脑系统或程序中隐藏着的一些未被发z现的缺陷或问题,人们俗称“bug”。
Bug”的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。1945年的一天,赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶条贴上飞蛾,并把“bug”来表示“一个在电脑程序里的错误”,“Bug”这个说法一直沿用到今天。

而异常处理,对于每个开发者来说一点不陌生。
有人这样描述,“一个开发者80%的时间都是在处理程序异常”。

在Java中,异常分为检查时异常,与运行时异常。
在这里插入图片描述
Throwable是 Java 语言中所有Exception(异常)和 Error(错误)的超类。

1.Error(错误)

Error是指Java 运行时系统的内部错误和资源耗尽错误。
对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。

2.Exception(异常)

异常发生在程序运行期间,影响正常的执行流程,后续程序终止运行。
异常主要分为Runtime Exception(运行期异常)和 非Runtime Exception(非运行期异常/编译期异常)

运行期异常,就是程序正常执行因为触发某个条件,导致异常发生

常见运行时异常异常类型
空指针异常NullPointerException
算术异常类ArithmeticExecption
数组下标越界异常:ArrayIndexOutOfBoundsException
类型强制转换异常ClassCastException
数组负下标异常:NegativeArrayException
文件未找到异常FileNotFoundException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
方法未找到异常:NoSuchMethodException

编译期异常,就是程序编译时抛出的异常,编译不会通过,不解决掉,程序就无法运行起来。

编译期异常异常类型
输入/输出异常IOException
操作数据库异常SQLException
线程中断异常InterruptedException
数字格式化异常NumberFormatException
  1. IOException

IOException(Input/Output Exception,输入/输出异常)是Java编程中常见的异常类型之一。它是java.io包中定义的一个异常类,通常用于处理输入/输出操作时可能发生的异常情况。

IOException表示在进行输入和输出操作时发生了异常,例如文件读写时遇到问题、网络通信中出现异常等。它是一个checked异常,意味着在编写代码时必须显式处理或抛出该异常,以避免编译错误。

IOException的报错原因多种多样,包括但不限于:

文件或资源不存在。
文件或资源无法被访问(权限问题)。
磁盘空间不足。
网络连接问题(如连接超时、断开连接)。
编码问题(如读取或写入文件时使用的字符编码不正确)。
底层I/O系统错误(如硬件故障)。
为了处理IOException,程序员通常使用try-catch语句块来捕捉并处理这些异常,以便在发生异常时采取适当的措施,如关闭文件或网络连接、输出错误消息等。此外,也可以选择使用throw关键字抛出异常,让调用者来处理。

总之,IOException是Java中用于处理输入/输出操作异常的重要机制,对于确保程序的健壮性和可靠性具有重要意义。

  1. SQLException

SQLException是Java中处理数据库操作时可能遇到的异常类型。它通常表示在执行SQL语句或数据库操作时发生了错误。SQLException可能由多种原因引起,包括但不限于以下几种情况:

数据库连接问题:当数据库服务停止、重启,或者存在网络问题(如网络不通、路由器故障、防火墙或代理无法通过)、数据库连接超时等情况时,都可能导致SQLException。
SQL语句错误:SQL语句可能存在语法错误,或者由于表结构发生变化、参数异常、权限不足等原因导致SQL语句无法正确执行。
数据库资源限制:例如数据库连接数、内存、文件系统或数据缓存的限制,都可能导致SQL语句无法正常执行,并抛出SQLException。
数据完整性约束:当试图插入无效的数据或违反数据完整性规则时,数据库也会抛出SQLException。
当遇到SQLException时,可以尝试以下解决方法:

检查连接:确保数据库连接正常,并且数据库服务正在运行。同时检查数据库连接参数是否正确,以及数据库服务器是否被防火墙或其他网络问题所阻塞。
检查SQL查询:检查SQL查询语句是否正确,包括语法、拼写和参数等。确保查询语句符合SQL语法规则,并且参数已正确传递。
检查权限:确保访问数据库的用户具有足够的权限执行所需的操作。
检查数据完整性约束:确保数据完整性规则得到正确的实施,避免插入无效的数据或违反数据完整性规则。
此外,SQLException通常包含有关错误的详细信息,如错误消息、SQLState代码和错误代码等。这些信息可以帮助开发者更好地定位和解决问题。可以使用getMessage()方法获取错误消息,getSQLState()方法获取SQLState代码,以及getErrorCode()方法获取错误代码。

  1. InterruptedException

InterruptedException是Java异常处理中的一个类,它继承自Exception。这个异常用于表示程序在执行过程中被中断,通常是由外部事件(如用户按下Ctrl+C)或另一个线程通过interrupt()方法中断当前线程而引起的。

当一个线程在等待、休眠或其他不会释放锁的条件下被中断时,它会抛出InterruptedException。例如,当线程正在执行Thread.sleep()方法时,如果另一个线程调用了该线程的interrupt()方法,那么该线程就会抛出InterruptedException。

处理InterruptedException通常有两种方式:响应中断或恢复中断。响应中断是指当线程被中断时,需要对此进行响应并做出一些处理,如将线程的中断状态标志位重新设置为false,以便后续代码可以正常执行。恢复中断则是指通过重新调用Thread.currentThread().interrupt()方法,将中断状态重新设置为true,以便让上层调用者知道线程已经被中断了。

在编写多线程程序时,处理InterruptedException是非常重要的,因为它可以帮助程序员更好地控制线程的执行流程,并避免程序出现意外的行为。

4.NumberFormatException
NumberFormatException 是 Java 编程语言中的一个异常类,属于运行时异常(RuntimeException)的子类。这个异常通常发生在应用程序试图将一个字符串转换成一个数字类型(如 int、long、float、double、BigInteger 或 BigDecimal),但字符串并不包含一个有效的数字表示时。

例如,当你使用 Integer.parseInt(String s) 或 Double.parseDouble(String s) 等方法,并且提供的字符串 s 不包含有效的整数或浮点数时,就会抛出 NumberFormatException。

二、异常处理机制

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

1.抛出异常:throws和throw

throws:通常被用在声明方法时,用来指定方法可能抛出的异常,多个异常可使用逗号分隔。
throws关键字将异常抛给上一级,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。

throw:通常用在方法体中或者用来抛出用户自定义异常,并且抛出一个异常对象。

2.捕捉异常:try-catch语句

try-catch语句:捕捉throw抛出的异常,使用try-catch语句块或者try-catch-finally语句处理。

由于运行时异常的不可查性,为了更合理、更容易地实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出,允许应用程序忽略运行时异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值