Java中的异常


  按键伤人      103   
  2021-01-13      Java      

1、异常分类

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("自定义异常");

作者:javanewbe

ps:以上是Java中的异常全部内容,希望文章能够帮你解决Java中的异常所遇到的游戏开发问题。
本文收录在 游戏编程 🕹️ - 学习Java专题,分享走一走~

猜你喜欢 全系列


您可以在登录后,发表评论




    关于作者
    游戏开发者 - 83
  • 按键伤人
  • 码神
  • 579 文章  √   5 提问  ?
    此作者缺少注释。


    目录