Java-关于异常处理笔记

什么是异常?

在程序开发过程中,我们要尽量避免错误的发生,但是总会发生一些不可预期的事情,例如除法除数为0,内存不足,栈溢出等,这些就属于异常;
Java中提供了异常处理机制,处理这些不可预期的事情;

异常也被称为例外,是程序运行过程中会发生的,会打断程序正常执行的事件,
以下是几种常见的异常:
1.算术异常(ArithmeticException)
2.没有给对象开辟内存空间时出现的空指针异常(NullpointException)
3.找不到文件异常(FileNotFoundException)

在程序设计的时候,必须要考虑可能发生的异常事件,并做出相应的处理,这样才能保证程序能够正常运行。

Java的异常处理机制也秉承着面向对象的基本思想,在Java中,所有的异常都以类的形式存在,除了内置的异常类之外,Java也可以自定义异常类,此外,Java的异常处理机制也允许自定义抛出异常。

异常的分类有哪些?

在Java中,所有的异常均可以当作对象来处理,即当发生了异常的时候产生了异常对象;
Java.lang.Throwable类是Java中所有错误类或异常类的根类
两个重要的子类是Exception类和Error类。

1.Error类:表示程序无法处理的错误,通常指的是JVM出错,表示应用程序运行时出现了巨大错误,例如JVM运行时出现的OutOfMemoryError以及Socket编程时出现的端口占用的程序无法处理的错误,这些都需要交由系统进行处理。

2.Exception类:是指程序本身可以处理的异常,可以分为编译时异常和运行时异常。
运行时异常:是指RuntimeException以及其子类的异常。这类异常在编译期间不会被编译器检测出来,可以捕获也可以不捕获;

常见的异常有哪些?

1、java.lang.NullPointerException(空指针异常)
调用了未经初始化的对象或者是不存在的对象。经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针, 即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化, 依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。

2、 java.lang.ClassNotFoundException指定的类不存在
这里主要考虑一下类的名称和路径是否正确即可,通常都是程序试图通过字符串来加载某个类时可能引发异常。比如:调用Class.forName();或者调用ClassLoad的finaSystemClass();或者LoadClass();

3、 java.lang.NumberFormatException字符串转换为数字异常
当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常.如现在讲字符型的数据“123456”转换为数值型数据时,是允许的。但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理。

4、java.lang.IndexOutOfBoundsException数组下标越界异常
查看调用的数组或者字符串的下标值是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候先查看一下数组的length,以免出现这个异常。

5、java.lang.IllegalArgumentException方法的参数错误
比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

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

7、java.lang.ArithmeticException数学运算异常
当算术运算中出现了除以零这样的运算就会出这样的异常。

8、java.lang.ClassCastException数据类型转换异常
当试图将对某个对象强制执行向下转型,但该对象又不可转换又不可转换为其子类的实例时将引发该异常,如下列代码。
Object obj = new Integer(0);
String str = obj;

9、 java.lang.FileNotFoundException文件未找到异常
当程序试图打开一个不存在的文件进行读写时将会引发该异常。该异常由FileInputStream,FileOutputStream,RandomAccessFile的构造器声明抛出,即使被操作的文件存在,但是由于某些原因不可访问,比如打开一个只读文件进行写入,这些构造方法仍然会引发异常。

10、java.lang.ArrayStoreException数组存储异常
当试图将类型不兼容类型的对象存入一个Object[]数组时将引发异常,如
Object[] obj = new String[3]
obj[0] = new Integer(0);

11、java.lang.NoSuchMethodException方法不存在异常
当程序试图通过反射来创建对象,访问(修改或读取)某个方法,但是该方法不存在就会引发异常。

12、 java.lang.NoSuchFiledException方法不存在异常
当程序试图通过反射来创建对象,访问(修改或读取)某个filed,但是该filed不存在就会引发异常。

13、 java.lang.EOFException文件已结束异常
当程序在输入的过程中遇到文件或流的结尾时,引发异常。因此该异常用于检查是否达到文件或流的结尾

14、java.lang.InstantiationException实例化异常
当试图通过Class的newInstance()方法创建某个类的实例,但程序无法通过该构造器来创建该对象时引发。Class对象表示一个抽象类,接口,数组类,基本类型 。该Class表示的类没有对应的构造器。

15、java.lang.InterruptedException被中止异常
当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。

16、java.lang.CloneNotSupportedException 不支持克隆异常
当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。

17、java.lang.OutOfMemoryException 内存不足错误
当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。

18、java.lang.NoClassDefFoundException 未找到类定义错误
当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。
违背安全原则异常:SecturityException
操作数据库异常:SQLException
输入输出异常:IOException
通信异常:SocketException

异常的使用规则是什么?

异常处理机制的主要作用是当捕获程序在运行时发生的错误时发生的异常并进行相应的处理;

异常的处理不会干预道程序的正常的工作流程;

主要遵循以下几点规则:
1.在当前方法声明中使用trycatch语句捕获异常
2.如果一个方法被覆盖,那么覆盖它的方法必须抛出相同的异常或者异常的派生类
3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常

常见的异常的处理机制有哪些?

1.try catch 处理机制:

try{
           .......//执行程序块
           
}catch (异常类 对象){
           .......//异常发生后需要执行程序块
}....
finally {
           .......//无论如何都需要执行的程序块
}

2.使用throws抛出异常:

throws关键字是方法声明时使用的,表示此方法中不处理异常,一旦产生异常将交给方法调用处进行处理。

当使用throws声明的方法,这样就必须强制用户使用try catch进行处理了。

3.总结:
try catch:是这之间所包含的代码如果出现异常时捕获他,并进行处理的,如果代码之间有错误,不会影响程序继续执行下去,程序会继续往后执行。

throws:表明方法可能会引发异常,在方法内部并不处理这个异常,想要得到异常的话,调用者使用try catch语句即可得到。

throw:与throws不同,throws是在方法上声明,表示此方法产生的类由被调用处处理,而throw是在函数体内使用,是人为的抛出一个异常。两者相同的地方在于,只是针对异常的抛出,但两者都不会去处理异常,真正的异常由函数的上层调用来完成。

finally:不管有没有异常程序段中都会被执行的代码

自定义异常如何使用?

class 异常名称  extend Excption{
               ......
}

可以在自定义的异常类中编写方法来处理相关事件。

断言语句有什么用?

断言语句是专门用于代码调试的语句,通常用于程序不准备使用异常捕获的错误。
在程序调试的时候,加入断言语句可以帮助检测错误。

定义语法:

assert  布尔表达式;
assert  布尔表达式:字符串表达式;   //如果布尔表达式为真,就输出字符串表达式,并中止程序执行。

一般情况下,是在可能出现错误的情况的地方,加上断言语句,用于检测调试。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值