Java中的异常

1、异常分类

在这里插入图片描述
java.lang.Throwable是所有异常的根
java.lang.Error是错误信息
java.lang.Exception是异常信息

2、首先介绍Exception

一个是运行时异常 RuntimeException ,这种异常是强制我们catch或throw的异常。
一 个是检查异常CheckedException,完全由虚拟机接管,也是继承自Exception的,只是虚拟机对这两种异常进行了区分。

2.1 Checked异常()
	只有java语言提供了Checked异常,Java认为Checked异常都是可以被	处理的异常,所以Java程序必须显示处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。()
	主要包含: I/O 错误导致的 IOException、SQLException。
	

1. 试图在文件尾部读取数据
2. 试图打开一个错误格式的 UR
3.   试图根据给定的字符串查找 class 对象,而这个字符串表示的类并不存在
4.   对Checked异常处理方法有两种:
        1 当前方法知道如何处理该异常,则用try...catch块来处理该异常。
    	2 当前方法不知道如何处理,则在定义该方法是声明抛出该异常。

两种方法:

// try...catch捕获并处理这个异常
try{
     //try块中放可能发生异常的代码。     
     //如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。     
     //如果发生异常,则尝试去匹配catch块。

}catch(SQLException SQLexception){
    //每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
    //catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
    //在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
    //如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。    //如果try中没有发生异常,则所有的catch块将被忽略。
}catch(Exception exception){
    //...
}finally{
       //finally块通常是可选的。   //无论异常是否发生,异常是否匹配被处理,finally都会执行。
       //一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
       //finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。 
}
//第二种  函数内部抛出,交给调用者来处理
public void save(User user)
{
      if(user  == null) 
          throw new IllegalArgumentException("User对象为空");
      //......
        
}

2.2 RuntimeException

 Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。
 涉及到一知识点个了解一下就好,异常的冒泡,异常的冒泡是为了在当前发生异常的函数或者这个函数的caller中找到最近的异常处理程序,也就是报异常的地方是最近调用该函数的地方。
 运行异常可能出现在任何地方,且出现频率很高,因此为了避免巨大的 系统资源开销,编译器不对异常进行检查,但如果不处理的话会导致程序终止。
  所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。(出现的话基本上可以断定是程序员自己书写的错误)

主要包含:NullPointerException 、 ClassCastException(类型转换错误)、ArithmeticException(除数为零)

public void method3() throws RuntimeExceptio //直接在方法上抛出
	也可以自定义声明
public void testMethod1_02()
{
	throw new RuntimeException();//自己不处理,抛给调用者
}

3、Error

 Error表示运行时系统的内部错误和资源耗尽错误,表示系统在运行期间出现了严重的错误,属于不可恢复的错误,由于这属于JVM层次的严重错误,因此这种错误会导致程序终止执行。程序对其不做处理。(一般和俺没关系)
 一般包含:OutOfMemoryError(内存资源不足),NoClassDefFoundError(类定义错误)

4、Throw 和 throws 的区别

throws 用在函数上,后面跟的是异常类,让调用者知道该功能可能会出现的问题,只是表示了可能出现的异常。

public void doA(int a) throws Exception1,Exception3{……}

throw 用在函数内,后面跟的是异常对象。抛出具体的问题对象,执行到 throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给函数调用者。throw表示已经出现了异常

if(a==0)
      throw new  Exception3("自定义异常");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值