throwable异常的根类
1. error:程序出现无法控制的错
2. Exception:可控的,可以手动修改,处理
1)RuntimeException:运行时异常
2)编译期异常
RuntimeException:运行时异常处理方式:
try{ }catch(){ }
try{ }catch(){ }finally{}
throws(向上抛) 在方法的声明处抛出一个异常,java虚拟机处理异常的方式默认为:输出异常信息,结束程序。
throw 手动抛出一个异常对象
格式:
try{
包含可能发生异常的代码
}catch(Exception e){
一旦try中代码发生异常,发生的异常会被catch捕获,并执行这里的代码对异常进行处理,处理完毕,程序继续向下执 行。
如果try中没有发生异常,则不会被catch捕获。
}
finally意为最终的,表示最终要执行的,
与try…catch组合使用,不管发生不发生异常,最终都要执行finally中的代码。
finally语句是一个可选选项,可以有,也可以没有。
如果在try或catch中使用return结束方法了,那么也会在return前执行finally语句
运行期异常的特点:如果出运行期的异常,单线程最后会被main方法抛出异常,这时方法终止。
(main方法中在抛出异常之前的代码都会被执行,在调用有异常的代码时,由于有异常出现它之后的代码将不会被执行)
throws和throw区别
throws在方法声明处抛出方法内部可能发生的异常给调用者。
throw:在方法内部根据需求手动抛出异常,方法再根据抛出的该异常进行相应的处理。
throw的功能只是根据需求,抛出一个异常对象而已。
至于说,throw抛出的是编译期异常、还是运行期异常,解决方式就不归throw考虑的范围内,
因为throw的作用仅仅是抛出一个异常而已。
常见异常
1.数学异常(除数为0返回)
ArithmaticException
2.数组下标异常
ArrayIndexOutOfBoundsException
3.空指针异常
NullPointerException
4.强转类型不符异常
ClassCastException
5.文件找不到异常
FileNotFoundException
6.格式化异常(日期类,传入类型不符时返回)
ParseExcption
自定义异常
自定义一个类,继承父类Exception,定义的类包含两个构造器
1>默认的构造器
2>带有详细信息的构造器
package com.exception;
/**
*@author 曰业而安
*@version 创建时间 2019年6月18日 下午3:29:34
*类说明:自定义异常类
*
*/
public class MyException extends Exception{
/**
* 无参构造函数
*/
public MyException() {
super();
}
/**
* 用指定的详细信息和原因构造一个新的异常
* @param message
* @param cause
*/
public MyException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
/**
* 用详细信息指定一个异常
* @param message
*/
public MyException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
/**
* 用指定原因构造一个新的异常
* @param cause
*/
public MyException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
}
自定义异常的使用,就不展示代码部分啦。结合业务需求,捕捉异常给出提示信息,这样我们的代码就比较友好啦。