1.定义
当程序出现错误时,能够最大化的减少损失的一种保护手段
2.异常的分类
java中所有异常都是 Throwable 类的子类,关系图如下所示:
其中:
2.1 Error: 描述JVM运行时内部错误,堆、栈溢出
2.2 Exception: 程序中普遍存在的,由于代码错误产生的
2.2.1 IOException: 由于输入输出产生的异常,如打开了一个不存在的文件
2.2.2 RuntimeException: 发生在运行时的异常,如数组越界异常、类型转换异常、空指针(NPE)
注:其他异常:
① 非受查异常:Error、RuntimeException及其子类。不强制用户进行异常处理
② 受查异常:除了非受查异常的所有异常。强制用户进行异常处理
3.异常的捕获
java中异常的捕获用 try 、catch 、finally。格式如下:
try
[ catch ]
[ catch ]
...
[ finally ]
具体用法:
① try: 用于可能出现异常的代码
② catch: 当相应的异常出现,捕获该异常,并自定义解决方式
③ finally: 保证重点代码(如IO流的关闭、JDBC资源的释放等以及网络连接的关闭)一定会被执行的机制,无论是否产生异常,finally代码块中的内容一定会被执行 特例:系统退出 System.exit( ); 此情况下finally语句不执行
//异常的应用
class Person{
public int fun(){
System.out.println(3/1);
try{
System.out.println(10/0);
}
catch(Exception e){
return 0;
}
finally{
System.out.println("异常已经被解决");
return 1;
}
}
}
public class Test{
public static void main(String[] args) {
new Person().fun();
}
}
运行结果:
//退出系统,finally语句不执行
class Person{
public static void fun(){
try{
System.out.println("1");
System.exit(0);
}
catch(Exception a){
System.out.println("2");
}
finally {
System.out.println("3");
}
}
}
public class Test{
public static void main(String[] args) {
new Person().fun();
}
}
运行结果:
4. 异常用到的关键字
4.1 throws: 用在方法声明上,明确表示该方法可能会产生异常。当异常产生时,将异常对象扔回给调用者。
public class Test {
public static void main(String[] args) {
try {
System.out.println(calculate(10, 0));
}
catch (Exception e) {
System.out.println("异常已解决");;
}
}
public static int calculate(int x,int y) throws Exception {
return x/y ;
}
}
运行结果:
4.2 throw: 用在方法中,表示人为进行异常对象的产生。一般与自定义的异常类搭配使用
public class Test{
public static void fun(){
throw new RuntimeException("扔个异常玩一玩");
}
public static void main(String[] args) {
fun();
}
}
运行结果: