一.异常介绍
异常:在程序执行过程中发生的不正确情况称为异常。(开放过程中语法错误与逻辑错误不算异常)
分类:
1)Error(错误):Java虚拟机无法解决的严重错误,如JVM系统的内部错误、资源耗尽等。
2)Exception:又分为运行时异常和编译时异常。
注意:
1)运行时异常可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。
2)编译时异常是必须处理的异常。编译异常常发生在文件、网络、数据库中。
二:异常处理
【常用处理方式有两种】
1)try-catch-finally
捕获发生的异常,自行处理
2)throws
将发生的异常抛出,交给调用者来处理,最顶级的处理者就是jvm
【处理机制】
如果没有显示用try-catch,则默认为throw
【try-catch】
快速入门:
public String getName;
public static void main(String[] args) {
try {
Person person = new Person();
person = null;
System.out.println(person.getName);//空指针异常
int n1=10;
int n2=0;
int res=n1/n2;//数字运算异常
} catch (NullPointerException e) {
System.out.println("空指针异常="+e.getMessage());
}catch(ArithmeticException e){
System.out.println("算数异常="+e.getMessage());
}catch(Exception e){
System.out.println(e.getMessage());
}finally {
System.out.println("无论如何finally语句都会被执行");
}
}
}
1)如果发生异常,则异常后的代码不会正常执行,直接进入catch块
2)如果没有发生异常,则不会进入catch块内
3)不管是否发生异常都会执行finally
4)也可以进行try-finally,相当于没有捕获异常,程序会崩掉
【throws】
1)我们在处理异常的时候, 通常希望知道这段代码中究竟会出现哪些可能的异常. 我们可以使用 throws 关键字, 把可能抛出的异常显式的标注在方法定义的位置. 从而提醒调用者要注意捕获这些异常
2)throws后面的类型可以是方法中的异常类型,也可以是它的父类
public static int divide(int x, int y) throws ArithmeticException {
if (y == 0) {
throw new ArithmeticException("抛出除 0 异常");
}
return x / y;
}
【抛出异常】
1)除了 Java 内置的类会抛出一些异常之外, 程序猿也可以手动抛出某个异常. 使用 throw 关键字完成这个操作.
public static void main(String[] args) {
System.out.println(divide(10, 0));
}
public static int divide(int x, int y) {
if (y == 0) {
throw new ArithmeticException("抛出除 0 异常");
}
return x / y;
}
【throws和throws】
throws:在方法声明处。异常处理的一种方式。后面跟异常类型。
throw:在方法体内。手动生成异常对象的关键字。后面跟异常对象。