java异常学习总结

一. 概念
异常是Java中提供的一种识别及响应错误情况的一致性机制。有效地异常处理能使程序更加健壮、易于调试。
二.异常
error:系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理。
Exception:Exception是所有异常类的父类。分为非RuntimeException和RuntimeException。
非RuntimeException:指程序编译时需要捕获或处理的异常,如IOException、自定义异常等。属于checked异常。
RuntimeException:指程序编译时不需要捕获或处理的异常,如:NullPointerException等。属于unchecked异常。一般是由程序员粗心导致的。如空指针异常、数组越界、类型转换异常等。
三. 常用方法
Exception类和其他普通类一样,有自己的属性和方法,为我们提供异常的相关信息。常用的方法有:
方法 说明
public String getMessage() 返回关于发生的异常的详细信息。这个消息在Throwable类的构造函数中初始化了。
public void printStackTrace() 打印toString()结果和栈层次到System.err,即错误输出流。
// 打印追踪栈帧
e.printStackTrace();
// 获取错误信息
System.out.println(e.getMessage());
// 获取错误栈帧的内存地址(没有意义)
System.out.println(e.getStackTrace());
四.异常处理
4.1 throws
【语法格式】 
修饰符 返回类型 方法名(参数列表) throws 异常类名列表
throws多个异常,用逗号隔开,只是提醒,不会真正处理,所以无所谓继承关系
【示例】 
public class TestException { 
public static void main(String[] args) throws FileNotFoundException{ 
File file = new File(“our.txt”); 
InputStream input = new FileInputStream(file); 

}
【注意】 
子类继承父类,并重写父类的方法时,若方法中抛出异常,则要求:子类方法抛出异常只能是父类方法抛出的异常的同类或子类。
4.2 throw
throw的作用是抛出异常,抛出一个异常类的实例化对象。
【语法格式】 
throw new XXXException();
【示例】 
public class ExceptionDemo { 
public static void main(String[] args) throws Exception { 
Exception exp = new Exception(“异常方法演示”); 
throw exp; 

}

【总结】
这种抛出异常的方式一般在满足某条件时主动抛出,即满足用户定义的逻辑错误发生时执行。
含有throw语句的方法,或者调用其他类的有异常抛出的方法时,必须在定义方法时,在方法头中增加throws异常类名列表。
使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。
4.3 try…catch
【语法格式】
try{
有潜在异常抛出的语句组
}catch(异常类名 异常形参){
异常处理语句组
}catch(异常类名 异常形参){
异常处理语句组
}catch(异常类名 异常形参){
异常处理语句组
}catch(异常类名 异常形参){
异常处理语句组
}finally{
语句组
}
其中:

  1. try用来捕获语句组中的异常
  2. catch用来处理异常可以有一个或多个,而且至少要有一个catch语句或finally语句
  3. finally中的语句组无论是否有异常都会执行
    常用捕捉异常方式
  4. try…catch try…finally
  5. try…catch…finally
  6. try…catch1…catch2…finally(体现异常出现的大小顺序) 
    说明:多重catch处理异常,大异常类在后,小异常类在前。
    【示例】 
    (1)可以写多个catch语句进行捕捉.但是从上到下要么没有继承关系,要么就是从子类到父类,不能写父类到子类,因为父类就把子类异常捕捉了。
    } catch (FileNotFoundException e) {
    System.out.println(“找不到指定文件”);
    } catch (NullPointerException e) {
    System.out.println(“不能为空”);
    } catch (Exception e) {
    System.out.println(“别的异常”);
    }
    (2)catch中可以有多个异常捕捉,不可以有继承关系,如果有就直接写父类,没有的话 异常类型 | 异常类型 | 异常类型… e
    } catch (NullPointerException | FileNotFoundException e) {
    System.out.println(1);
    } catch (RuntimeException e) {
    e.printStackTrace();
    }
    (3)java1.7开始只要把开启资源的语句放到try(开启资源语句){}就会自动关闭资源。

5.自定义异常
系统定义的异常主要用来处理系统可以预见的常见运行错误,对于某个应用所特有的运行错误,需要编程人员根据特殊逻辑来创建自己的异常类。
【语法格式】 
public class 自定义异常类名 extends Exception{ … }

public static void m1(int age) throws myException {
if (age < 18 || age == 18) {
throw new myException(“年龄必须大于18岁”);
}
System.out.println(“注册成功!!!”);
}
}
public class myException extends Exception {
public myException() {
}
public myException(String error) {
super(error);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值