Java基础(七)—— 异常

本文最后更新于:2021年9月28日 晚上

概览:Java异常

Java异常

Java异常

  • 受检异常

    • 所有继承自Exception的异常称为受检异常
    • 必须在方法签名上声明
    • 调用会抛异常的方法时,必须catch住异常
  • 非受检异常

    • 所有继承自RuntimeException
    • 不需要在方法签名上声明
    • 可以不用catch且不用在调用方法上声明

Exception常用方法

  • getMessage:用来获取异常描述,一般抛出的异常必须包含相关描述,如果必要,还需要带上抛出异常时的一些状态变量。
  • getCause:获取导致该异常的原因,异常可以嵌套,例如可以将一个受检异常包装成一个非受检异常,当非受检异常被catch住之后希望获得导致该异常的异常时,可以使用getCause来得到原始异常。
  • printStackTrace:在stderr中输出异常堆栈,但是,此方法无论何时都不应该被调用。
  • getStackTrace:获取堆栈信息。

catch & finally

  • catch块,放置异常处理的逻辑,比如给数据库中的记录打上异常标记,回滚事务等。
  • 一般来说必须打印日志,并输出一些关键数据。
  • catch还可以添加监控。

finally

  • 来关闭资源!以及处理其他逻辑。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
String filepath = "D:\\JavaCode\\LearnThread\\src\\main\\resources\\log4j.properties";
File file = new File(filepath);
InputStream is = null;
int totalnum = 0;

try {
is = new BufferedInputStream(new FileInputStream(file));

int bytesnum = 0;
while((bytesnum = is.read()) != 0){
totalnum += bytesnum;
}
} catch (FileNotFoundException e) {
logger.error("文件不存在,filepath: {}", filepath);
throw new RuntimeException("文件不存在");
} catch (IOException e) {
logger.error("文件读取错误,filepath: {}",filepath);
totalnum = 0;
}finally {
System.out.println("文件总字符数:"+ totalnum);
if(is != null){
try {
is.close();
} catch (IOException e) {
logger.error("关闭文件失败,fileparh: {}",filepath);
}
}
}

Guava Throwables

  • getCausalChain:得到异常链
  • getRootCause:得到最原始的异常,即最早的throw点
  • propagate:将Exception包装成RuntimeException或者Error,简化异常处理。
  • getStackTraceAsString:获取异常调用栈的信息,通过String返回

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!