Java 异常处理-(第三天)
一、异常
计算机程序运行的过程中,错误总会出现。
网络错误,内存耗尽,无法连接打印机
方法调用出现错误时,可以进行给定返回错误
异常是class,是一种类型信息。采用上次捕获,方法调用分析。
Object->Throwable->Error/Exception->RuntimeException/IOException…
Error是发生严重错误,程序一般无能为力。(网络错误,内存耗尽等)
Checked Exception逻辑错误是必须处理的,包括捕获并处理错误和修复错误。
捕获异常
try{
//执行的语句
}catch(Exception e){
//捕获对应的异常
}
不捕获异常
throws Exception{}//声明异常
main()方法是捕获异常的最后一步,如果不捕获异常,JVM会关闭退出程序
二、捕获异常
try{
//可能发生异常的语句
}catch(Exception e){
//捕获对应的异常Exception及其子类,多个catch(){}语句需要考虑子类的顺序,子类必须写在前面。
}finally{
//不管有无异常都会执行
}
若异常间不存在继承关系,必须编写多条catch语句,异常间使用‘|’或符号
catch(IOException | NumberFormatException e){}//JDK版本>=1.7
三、抛出异常
catch(Exception e){
e.printStackTrace();//打印出方法的调用栈
}
异常是一个class
throw new Exception(e);//抛出异常
==如果finally语句抛出了异常,则catch语句不再抛出。(被屏蔽)
四、自定义异常
extends Exception{}
//子类覆写父类创建多个构造函数
五、使用断言(一般不会使用)
断言是一种程序调试方式,使用assert关键字修饰。
assert x >= 1;//如果断言失败,抛出AssertionError导致程序结束退出
对于可恢复的程序错误,不应该使用断言。
断言只应该适用于开发和测试阶段
六、使用JDK Logging
日志(logging)取代System.out.println(),可以设置输出格式,输出级别,可重定向到文件,按包名控制日志级别(七个日志级别)。
Logger logger = Logger.getGlobal();
logger.info("abc");//输出信息
logger.setLevel(Level.WARNING);
logger.log(Level.WARNING,"warning...",e);//设置级别,输出信息
logger.warn("def");//警告信息
七、使用Commons Logging(推荐使用)
Apache创建的日志模块。可以挂接不同的日志系统,通过配置文件制定挂接的日志系统,自动搜索并使用Log4j,如果没有就使用JDK Logging。(六个日志级别)
Log log = LoggerFactory.getLogger(Main.class);//Main类获取日志实例
log.info("abc");
log.warn("def");
八、使用Log4j(推荐使用)
Log4j是当前最流行的日志框架。
Appender/Filter(过滤)/Layout(格式化信息)
可以输出到Console(屏幕)/File(文件)/Socket(远程)