异常分析(一)

异常(一)

最近在开发web端项目的时候常见一些异常,为此需要进行自我总结一下!

首先聊聊什么是异常,

异常:

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

Java异常是Java提供的一种识别及响应错误的一致性机制。

Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。

Java异常机制用到的几个关键字:try、catch、finally、throw、throws。

try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。
finally – finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
throw – 用于抛出异常。
throws – 用在方法签名中,用于声明该方法可能抛出的异常。

异常分析(一)_第1张图片

据图而论,异常的基类是Object,由上而下可分Error和Exception两大类,都是继承自Throwable,由下而分出多个子类;

Error:即错误,错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的;

Exception:即异常,一般分为运行时异常和非运行时异常;

​ RuntimeException:运行时异常,也叫未检查异常,就是在程序编译中无法捕捉到的异常,但是在运行时,会遇到异常,有时会终止程序的运行;例如除数不为0,空指针异常;此类异常,可以处理也可以不处理,并且可以避免;

​ 除RuntimeException类和它的子类,其他的类都是非运行时异常,或者叫检查异常,也就是说在编译的时候会抛出或者用try-catch的方式进行处理,否则不处理的话编译都不会通过;常见的有IO异常,SQL异常,这些都是需要处理的;

好了,该说的也差不多了,该说一些项目中遇到的异常,如果需要了解更多可以去搜索一些别的博主的记录,其实大致都差不多;只不过是个人总结的不一样!

1.SQLGrammarException: could not execute query

​ 此异常一看都知道是来自于SQL产生的,由于项目使用的古老的SSH框架,所以实体类中对应的字段值根据配置来匹配相应数据库中的字段,而出现此异常无非就是实体类中多出了一个字段,而数据库中却没有;

2.NullPointException

​ 空指针异常,或许大部分人都遇到过,而在项目中常出现这种异常时因为在获取该字段时没有值导致,一般比如数据库中的非空字段,你传了空值过去后就会产生这种异常;

3.com.ibm.mq.MQException

​ 属于MQ相关,客户端无法连接到服务端的mq导致报此异常,检查一下是否配置文件的相关服务器地址是否正确;

4.TypeMismatchException

​ 此异常也困扰我许久,在百度上搜索大部分都是说,在传值的时候没有传对相同类型的值过来导致,或许这是大部分人所遇到的问题;但是我在项目中遇到的并非是这样,而是我有一个联合主键的表,为了获取到其实体,我在service写了个get(Class class,Object obj )方法来获取实体,一般只有一个主键的实体,Object可以是get对应的id值,即stuServiceImpl.get(Student.class,model.getStudent.getSid())就可以得到Student实体类,但是Student有两个主键(sid,sname)的话就不是这样获取学生类了,首先在jsp传值到action的时候,因为action类中new 了一个model,所以所传的值需要按顺序传过来,而在action方法中需要是stuService.get(Student.class,model.getStudent())这样才能获取到;

5.SocketExceptException

​ 此异常简单来说是在进行socket通信时报的异常,即在写数据时可能由于连接服务端已断开,但是却还在写,为此抛出此异常;但是还有一个原因就是,多次点击发送,导致通道阻塞而报此异常,因为socket是单通管通信,一次只能进行一条数据进行通信,而点击多次的话就相当于发送多条数据,导致管道阻塞;

6.java.net.MalformedURLException

​ 此异常可以看出是关于URL的原因,一般来说可能是URL中的参数链接无效或者是空,而在项目由于URL是配置在web.xml中,链接的位置为一个文件,但是在该路径下却没有此文件,导致报此异常,但是此异常报出却不会导致项目的运行,可能没有用到这个URL吧

为一个文件,但是在该路径下却没有此文件,导致报此异常,但是此异常报出却不会导致项目的运行,可能没有用到这个URL吧

由此以上,这几天遇到的,以前也遇到过但是没有做记录,而最近觉得很有必要做一做记录,因为可能会再次遇到,回过头来就可以看看如何解决,或者说遇到的相似的问题是否可以用最少的时间去解决!

你可能感兴趣的:(Java基础,java,exception)