抛出异常用throw关键字同时只能抛出一个异常。抛出异常的时候有两种选择 直接try-catch抓取还有就是底层不解决异常,底层往上抛,在顶层解决异常,异常在底层表现不容易被顶层发现
java中通过throws声明某个方法抛出的各种异常,可以同时声明多个异常,用逗号隔开。声明异常只是表明有可能会有异常抛出。
public class CeShi{
//声明异常类型 在此方法中不需要立马抓取 声明以后会让 上一层抓取
public void cc() throws NullPointerException {
//抛出异常 手动抛出
throw new NullPointerException("这是一个异常");
}
public static void main(String[] args) {
CeShi c = new CeShi();
//抓取异常
try {
c.cc();
//显示异常
} catch (Exception e) {
e.printStackTrace();
}
}
}
Throwable是异常Exception和错误Error的父类
Error是仅靠程序本身无法恢复的严重错误
Exception是由java应用程序抛出和处理的非严重错误。分为checkedException和RuntimeException。
CheckedException属于程序必须马上处理的异常 过不了编译
RuntimeException是运行时异常不要求程序马上处理且可以通过编译。
五种常见运行时异常:
NullPointerException 空指针异常
ArithmeticException 除零异常(零不能做除数)
ArrayIndexOutOfBoundsException 数组越界异常
ClassCastException 构造方法异常
RuntimeException 运行时异常
自定义异常
何时需要自定义异常?
当JDK中的异常类型不能满足程序的需要时,可以自定义异常。(一般自定的时候都是需要异常帮程序做一些事情的时候)
1、定义一个异常2、编写构造方法继承父类的实现3、实例化自定义异常类型4、使用throw抛出
自定义异常的情况在一些项目中会用到很多 一般继承的时候都会选择Exception和RuntimeException
//RuntimeException 运行时异常
public class MyException extends RuntimeException{
//自定义异常
public MyException(int string) {
}
public MyException(){
System.out.println("这是我的异常");
}
public MyException(String i){
System.out.println("这是我的异常");
}
}