【Java核心技术】异常处理

在这里插入图片描述

1、异常体系结构

  • java.lang.Throwable
    • java.lang.Error:一般不编写针对性的代码进行处理
    • java.lang.Exception:可以进行异常的处理
      • 编译时异常(checked)
        • IOException
          • FileNotFoundException
        • ClassNotFoundException
      • 运行时异常(unchecked)
        • NullPointerException
        • ArrayIndexOutOfBoundsException
        • ClassCastException
        • NumberFormatException
        • InputMismatchException
        • ArithmeticException

2、异常处理的方式一:try-catch-finally

try {
  //可能出现异常的代码
} catch (异常类型1 变量名1) {
  //处理异常的方式1
} catch (异常类型2 变量名2) {
  //处理异常的方式2
} catch (异常类型3 变量名3) {
  //处理异常的方式3
}
......
finally {
  //一定会执行的代码
}

try-catch-finally的说明

  • 使用try将可能出现异常代码包装起来。在执行过程之,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配
  • 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的try-catch结构(在没有写finally的情况)。继续执行其后的代码
  • catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓;如果满足子父类关系,则要求子类一定声明在父类的上面,否则报错。
  • 常用的异常对象处理的方式:
    • String getMessage()
    • printStackTrace()
  • 在try结构中声明的变量,在出了try结构以后,就不能再被调用
  • try-catch-finally结构可以嵌套

try-catch-finally的体会

  • 使用try-catch-finally处理编译时异常,使得程序在编译时就不再报错,但是运行时仍可能报错。相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。
  • 开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally了。针对编译时异常,我们一定要考虑异常的处理。

finally的说明

  • finally是可选的
  • finally中声明的是一定会被执行的代码。即使catch中又出现异常了,try中有return语句,catch中有return语句等情况。
  • 像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。

3、异常处理的方式二:throws + 异常类型

  • "throws + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。异常代码后续的代码,就不再执行!
  • try-catch-finally:真正的将异常给处理掉了;throws的方式只是将异常抛给了方法的调用者,并没有真正将异常处理掉。
  • 开发中如何选择使用try-catch-finally还是使用throws?
    • 如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理
    • 执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throws的方式进行处理。而执行的方法a可以考虑是用try-catch-finally方式进行处理。

4、自定义异常类

  • 继承于现有的异常结构:RuntimeException、Exception
  • 提供全局常量:serialVersionUID
  • 提供重载的构造器

5、附加:Eclipse中的快捷键

  • 补全代码的声明:alt + /
  • 快速修饰:ctrl + l
  • 批量导包:ctrl + shift + o
  • 使用单行注释:ctrl + /
  • 使用多行注释:ctrl + shift + /
  • 取消多行注释:ctrl + shift + \
  • 复制指定行的代码:ctrl + alt + down 或 ctrl + alt + up
  • 删除指定行的代码:ctrl + d
  • 上下移动代码:alt + up 或 alt + down
  • 切换到下一行代码空位:shift + enter
  • 切换到上一行代码空位:ctrl + shift + enter
  • 如何查看源码:ctrl + 选中指定的结构 或 ctrl + shift + t
  • 退回到前一个编辑的页面:alt + left
  • 进入到下一个编辑的页面(针对与上面那条来说的):alt + right
  • 光标选中指定的类,查看继承树结构:ctrl + t
  • 复制代码:ctrl + c
  • 撤销:ctrl + z
  • 反撤销:ctrl + y
  • 剪切:ctrl + x
  • 粘贴:ctrl + v
  • 保存:ctrl + s
  • 全选:ctrl + a
  • 格式化代码:ctrl + shift + f
  • 选中数行,整体往后移动:tab
  • 选中数行,整体往前移动:shift + tab
  • 在当前类中,显示类结构,并支持搜索指定的方法、属性等:ctrl + o
  • 批量修改指定的变量名、方法名、类名等:alt + shift + r
  • 选中的结构的大小写的切换:变成大写:ctrl + shift + x
  • 选中的结构的大小写的切换:变成小写:ctrl + shift + y
  • 调出生成getter/setter/构造器等结构:alt + shift + s
  • 显示当前选择资源(工程 or 文件)的属性:alt + enter
  • 快速查找:参照选中的Word快速定位到下一个:ctrl + k
  • 关闭当前窗口:ctrl + w
  • 关闭所有的窗口:ctrl + shift + w
  • 查看指定的机构使用过的地方:ctrl + alt + g
  • 查找与替换:ctrl + f
  • 最大化当前的View:ctrl + m
  • 直接定位到当前行的首位:home
  • 直接定位到当前行的末位:end

猜你喜欢

转载自blog.csdn.net/qq_51808107/article/details/131428791