程序运行过程中发生的不正常行为叫做异常
异常体系图
Error
栈溢出
内存溢出
Exception
运行时异常
空指针异常
数学运算异常
类型转换异常 classCastException
数组下标越界异常
数字格式化异常 NumberFormatException
int a = Integer.parseInt("s");
编译时异常
是指代码在编译期间就必须处理的异常,否则代码不能编译通过
IOException
ClassNotFoundException
FileNotFoundException
SQLException
throw 和 throws 的区别
throw :手动生成异常对象的关键字,位置在方法体中, 用在方法体内,抛出具体的异常,由方法体处理。
throws:方法抛出的一个异常,可以声明多个,用逗号隔开,由方法调用方处理
try…catch…finally
当需要抛出多个异常,子类异常在前,父类异常在后
try…finally 等于没有抛出异常
try {
int a = Integer.parseInt("");
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("打印finally");
}
System.out.println("打印最后");
try {
int a = Integer.parseInt("");
}finally {
System.out.println("打印finally");
}
System.out.println("打印最后");
执行顺序
try {
int a = Integer.parseInt("");
return;
}catch (Exception e){
e.printStackTrace();
System.out.println("异常");
return;
}finally {
System.out.println("打印finally");
}
try {
int a = Integer.parseInt("3");
System.out.println("正常");
return;
}catch (Exception e){
e.printStackTrace();
System.out.println("异常");
return;
}finally {
System.out.println("打印finally");
}
异常执行顺序
// 捕获异常后,程序会继续执行,aaa不会被执行
try {
Integer a = null;
a.equals("1");
System.out.println("aaa");
}catch (Exception e){
// 捕获异常
e.printStackTrace();
}
System.out.println("程序继续执行");
java.lang.NullPointerException
at com.zs.backend.test.Out.main(Out.java:8)
程序继续执行
try {
Integer a = null;
a.equals("1");
System.out.println("aaa");
}catch (Exception e){
// 捕获异常
//e.printStackTrace();
}
System.out.println("程序继续执行");
程序继续执行
自定义异常
public class Out {
public static void main(String[] args) {
int a = 10;
if(a > 1){
throw new CC("异常");
}
}
}
class CC extends RuntimeException{
public CC(String msg){
super(msg);
}
}
> 1){
throw new CC("异常");
}
}
}
class CC extends RuntimeException{
public CC(String msg){
super(msg);
}
}