异常
异常的定义:
程序运行过程中出现的错误,称为异常。也就是程序运行过程中出现了不正常现象,导致代码运行不下去,进而导致程序的中断。
在Java中,把各种异常现象抽象形成了异常类。
Error与Exception
Error表示不希望被程序捕获或者是程序无法处理的 错误。
Exception,它表示用户程序可能捕捉的异常情况或者说是程序可以处理的异常。同时Exception又分为运行时异常(RuntimeException)和非运行时异常。
具体分类如图,认识即可:
异常的处理
throw
之前的throw 抛出异常,用在出现异常的位置,或者类上往外抛出,抛给父类。
但异常实际上并没有被解决
try - catch - finally
try{
//代码执行区域
}catch(Exception e){
//异常处理区域
}finally {
//无论如何,都会执行的代码块
}
/**
* throws 是 写在 方法的声明上的, 将方法产生的异常 抛给上层调用者
*
* @throws Exception
*/
public static void test() throws Exception{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try{
// 可能会产生异常
Date parse = df.parse("1990-11-11");
}catch(Exception e) {
// 捕获异常, throw 抛出一个异常
// throw 在方法中使用的,throw 后跟一个异常对象, 将异常对象 抛给他所在的方法
throw e;
}finally {
//解决异常的方案
//无论如何,都会执行的代码块
}
}
try - with
// 使用 try-with 结构,更加优雅的关闭资源
// try-with 只能关闭 具有 close() 方法的资源
try(FileInputStream in = new FileInputStream("D:/xxx.txt")) {
byte[] bytes = in.readAllBytes();
System.out.println(new String(bytes));
}catch(Exception e){
e.printStackTrace();
}
自定义异常
自定义一个异常类,并 ALT+INSERT 提供这四个方法
public class ByteNumberOutOfRoundException extends RuntimeException{
public ByteNumberOutOfRoundException() {
super();
}
public ByteNumberOutOfRoundException(String message) {
super(message);
}
public ByteNumberOutOfRoundException(String message, Throwable cause) {
super(message, cause);
}
public ByteNumberOutOfRoundException(Throwable cause) {
super(cause);
}
}
然后测试(下面用的不是上面这个异常类)
Array<Integer> array = new DynamicArray<>();
array.add(1);
array.add(2);
try {
System.out.println(array.getele(1000));
}catch (Exception e){
throw new DynamicArrayException("总而言之,就是错了");
}
断言(Assert)
断言的运用场景:
1.变量值如果很确定是某个值,则可以用断言。
2.可在正常情况下程序不会到达的地方放置断言,例如没有default的switch,则default可加上断言。
3.测试前置条件、后置条件
4.一个内部方法,返回布尔值,当检查类状态正常时返回true。
assert expression1:
public static void main (String[] args) {
boolean flag = 1>2;
assert flag;
}
assert expression1:expression2:
public static void main (String[] args) {
boolean flag = 1>2;
assert flag : "flag is false 断言失败";
}