了解出现异常并解决

异常

  异常的概述

       异常:未预料到的情况

生活中的异常

       因为未预料到的事情打断了本来要做的事,不得不停下原来想要做的事情,来解决眼下发生的意外

计算机中的异常

       因为某些问题无法在计算机看来是无法解决的,所以抛出了异常,并终止了程序,程序未达到原先预想的结果

       例如 : 除法中除数为 0 时,系统会抛出:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at demo03.Demo01.main(Demo01.java:17)

Java异常处理机制

java对异常提供了5个关键词一套成熟的异常类的体系结构

  • 五个关键词:try、catch、finally、throw、throws
  • 异常机构体系:

Throwable:

Exception:顶级父类(可以通过修复代码修复的异常)

RuntimeException 运行时异常:不要求立即处理,运行时可能出错,也可能不出错

NullPointerException:NPE,空指针异常

CheckException 受检异常:要求立即处理

FileNotFoundException 文件找不到异常

Error:错误(必须通过修改代码或修改环境才能解决的问题)

基础 try-catch

try {
    // 可能会出现异常的代码段
    // 尝试抓住异常的代码段
    // ***结束后直接跳出try-catch***
} catch(异常类型 变量名) {
    // 抓住异常后,如何处理异常
    // ***处理完异常,会继续向下执行 try-catch 后的内容***
} 
// 后续的代码段

多重catch

  • 指定不同的异常类型,处理不同类型的异常
  • 最后一个catch添加一个 Exception 类型的捕获(Exception可以捕获所有的异常)
try {
    
} catch(异常类型1 变量名) {
    
} catch(异常类型2 变量名) {
    
}	

try-catch-finally

  • 无论是否出现异常,都会执行 finally 中的内容(finally 中一般编写释放资源类的代码)
  • finally 和 return 在 try-catch 代码块中同时出现,它会先执行 finally 再执行 return。
try {
    // 可能出现异常的代码段
} catch (异常类型 变量名) {
    // 异常处理
} finally {
    // 无论是否出现异常,都希望能执行
}

try-finally

  • 只想释放资源,而不想进行异常处理
try {
    
} finally {
    
}

注意:finally,catch 都需要配合 try 使用

throw

       手动抛出异常(一般配合if语句使用,在发现不合理的情况时,创建并抛出异常)

throw 异常对象;
  • try-catch是积极的处理方法,它主张发现异常,并处理异常。
  • throw 抛异常是一种消极的处理方法,它主张发现异常,抛上去让调用者解决。

throws

       声明异常,声明该方法可能出现哪些异常(消极的处理办法)

访问权限修饰符 返回值类型 方法名(形式参数列表) throws 异常类型, ... {
    
}

注意:并不是消极的处理办法就一定不好,根据情况决定,有时需要调用者知道报错的原因

常见的异常处理

  1. 直接输出异常提示(System.out.println())
  2. 使用异常输出(System.err.println(),红色输出)
  3. 打印异常堆栈跟踪/信息(默认 JVM 就是这么处理的)
  • printStackTrace() : void
  • getMessage() : String 有些异常抛出时没有提示信息
  • 你自己打印和 JVM 默认打印的区别在于:JVM 默认打印完会中断程序

打印的堆栈信息包括:

  • 异常发生在 main/主 线程
  • 异常类型:异常提示信息
  • 异常出现具体位置:类、方法、行号

     4. 自定义异常处理,根据需求决定

自定义异常

自定义异常 is a Exception类/RuntimeException类

/*
 * 自定义的异常
 */
public class IllegalHealthException extends RuntimeException {

	public IllegalHealthException() {
		super();
	}

	public IllegalHealthException(String message) {
		super(message);
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值