异常处理

  • 异常,不可避免
    • 执行中发生的不正常情况(开发中语法和逻辑错误不算)
  • Throwable类,异常根父类
    • Public String getMessage() //打印错误信息
    • public void printStackTrace() //打印异常抛出轨迹
  • 机制,异常向上抛出,等待处理
  • java健壮性,鲁棒性
    • 异常处理
    • 垃圾回收
    • 强类型语言
    • 地址不允许运算,避免指针异常
  • 程度分类
    • error,java虚拟机无法解决的严重问题。处理不了,不进行代码处理
    • exception,其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性代码进行处理
      • 空指针
      • 试图读取不存在文件
      • 类型错误
      • 越界
      • 除零
  • 处理方式分类
    • 受检异常:在程序中必须处理检查的异常(必须写异常处理处理语句)
      • Exception其子类,RuntimeException及子类除外,
    • 非受检异常: 在程序中不是必须检查处理的异常
      • Error 及子类,严重错误,jvm无法处理
      • RuntimeException 及其子类,轻微错误,比如除零异常
  • 异常处理方法
    • 捕获 try{ 可能出现的异样语句 }catch (异常类型 对象引用){异常处理语句}finally{语句块} //参数类型为异常选择
      • try代码块时待捕获异常代码块
      • catch代码块是根据错误类型选择处理方式的代码块
      • finally是必须执行的代码块
        • finally和return,finally若未执行则,拦截return,执行完finally之后再执行return
        • 注return返回的值是储存在临时变量里的值
    • throw语句可以用来从方法中主动抛出
      • 一旦抛出异常,此方法就提前出栈,并不带着正常的返回值,而是带着需要处理的异常
      • 方法签名添加警告(throws 异常名)
      • 方法体用throw抛出异常
      • main方法中一般不要抛出异常,一旦抛出,程序崩溃,入口方法适用
      • 一般方法尽量抛出异常,交给上层处理
    • 捕获再抛出
      • 捕获到异常之后使用自定义异常包装之后抛出
      • 更加统一,可以同一的代码块处理
  • 自定义异常
    • 提供两个构造器
    • 继承exception的异常时受检异常,必须处理
    • 使用
      • 方法签名加异常警告,(throws xxxxExcepton)
      • 方法中使用throw来抛出异常
    • 提醒使用者必须处理这个异
//自定义异常举例
class DividedByZeroException extends Exception {
	
	//构造器,错误信息
	public DividedByZeroException(String message) {
		super(message);
	}
	
	//构造器,接收异常,做包装
	public DividedByZeroException(Throwable cause) {
		super(cause);
	}
}
原文地址:https://www.cnblogs.com/refengqingfu/p/9978754.html