顶级父类:Throwable
两个子类:Error和Exception
Error:Java虚拟机无法解决的严重问题,一般不编写针对性的代码进行处理
Exception:因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理
异常分为:编译时异常(受检时异常)和运行时异常(非受检时异常)
运行时异常(RuntimeException)举例如下:
StringIndexOutOfBoundsException 字符串角标越界
ArrayIndexOutOfBoundsException 数组角标越界
NullPointerException空指针异常
ClassCastException类型转换异常
NumberFormatException数值转换异常
InputMismatchException输入数据类型不匹配异常
ArithmeticException算术异常
编译时异常举例如下:
IO Exception
Java异常的处理方式: 方式一:try-catch-finally
方式二:throws+异常类型
try-catch-finally的使用 try{
//可能出现异常的代码
}catch(异常类型1 变量名1){
//处理异常的方式
}catch(异常类型2 变量名2){
//处理异常的方式
}catch(异常类型3 变量名3){
//处理异常的方式
}
……
finally{
//一定会执行的代码
}
说明:
1,finally是可选的
2, catch中的代码(异常类)如果没有子父类的关系,谁声明在上,谁声明在下无所谓。
catch中的代码如果有子父类的关系,则要求子类声明在上,父类声明在下,否则,报错。
如下代码则是Exception是NumberFormatException和NullPointerException的父类,所以放在最下面
public static void main(String[] args) {
System.out.println("输入整数:");
Scanner scan=new Scanner(System.in);
String a=scan.next();
try {
int str=Integer.parseInt(a);
} catch (NumberFormatException e) {
// TODO: handle exception
System.out.println("出现数值转换异常了,不要着急,,,,");
}catch (NullPointerException e) {
// TODO: handle exception
System.out.println("出现空指针异常了,不要着急,,,,");
}catch (Exception e) {
// TODO: handle exception
System.out.println("出现空指针异常了,不要着急,,,,");
}
3,常见异常解决方式:
e.getMessage();
e.printStackTrace();
4,finally是一定会执行的,所以常常用于声明资源的释放
5,try-catch-finally是可以嵌套的
throws+异常类型的使用 1,异常与异常之间用逗号隔开
2,此异常要声明在方法处
3,
throw 用于方法的抛出(在方法体内),手动抛出
throws 用于方法的声明,抓取异常
throw用于抛出,throws用于解决
throw表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。
throws属于异常处理的一种方式,声明在方法的声明处。
体会:
try-catch-finally:真正的将异常给处理掉了
throw的方式只是将异常抛给了方法的调用者,并没有将异常真正的给处理掉
自定义异常类:继承于现有的异常结构



