异常
java中代码运行时出现的问题大致分为两类:
错误:error
语法逻辑导致的程序运行问题
异常:exception
基于java健壮性有代码书写、运行时进行提升的异常
Java异常是一个描述在代码段中发生的异常(也就是运行时出错)情况的对象。当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被引发(throw,或称为抛出)。该方法可以选择自己处理异常或传递该异常。
如果进行了异常的处理那么,在出现异常时不会终止程序的运行
异常体系结构
java把各种不同类型的异常情况进行分类,用Java类来表示异常情况,这种类被称为异常类。把异常情况表示成异常类,可以充分发挥类的可扩展和可重用的优势。
异常的分类
①编译时异常(受检异常)
由java虚拟机在程序编写时进行健壮性检查,当某一方法可能出现问题是需要显式的解决后才能继续编写
②运行时异常(非受检异常)
由java虚拟机在程序运行时进行健壮性操作,当某一方法执行过程中出现不正当操作时出现提示,无需显式解决
异常的处理
由五个关键字 try、catch、throw、throws 和 finally 处理。
Java 中可用于处理异常的两种方式:
自行处理:可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。
使用try catch finally关键字进行异常处理
SimpleDateFormat sdf = new SimpleDateFormat("asdasd");
try {
// 使用try{}包裹可能出现问题的代码
System.out.println(sdf.parse("2021"));
// 当发生异常时会创建相应的异常对象
} catch (ParseException e) {
System.err.println("解析错误!");
// catch(异常)
// 与try块内生成的异常进行比较匹配则执行相应代码
return;
} finally {
// 最终执行
// 写在finally中的代码无论是否发生异常都会执行
//常用来释放资源
System.out.println("最终执行");
}
异常类常用方法
回避异常:通知潜在调用者,如果发生了异常,必须由调用者处理。
在发生异常的方法上使用throws关键字进行异常的抛出,谁调用这个方法谁处理
public static void main(String[] args) throws ParseException {
//方法中出现throws以及异常类代表这个方法执行时可能出现的异常,需要调用方进行处理
自定义异常
自定义的异常类是由开发人员根据需求开发的异常类.
程序中使用自定义的异常类,通过自定义异常类可以让开发人员更加方便的定位程序出错的位置且更加详细的描述异常信息。
异常简单分为两类,那么自定义异常也简单分为两类:
自定义受检异常
创建类继承Exception
//自定义受检异常
//创建自定义异常类继承Exception
public class MyException extends Exception {
// 创建有参构造方法将异常信息传入异常类
// 调用父类构造方法传入数据
public MyException(String msg) {
super(msg);
}
}
自定义运行时异常
创建类继承RunTimeException
//自定义运行时异常
//创建自定义异常类继承RuntimeException
public class MyRuntimException extends RuntimeException{
// 创建有参构造方法将异常信息传入异常类
// 调用父类构造方法传入数据
public MyRuntimException(String msg) {
super(msg);
}
}
Log4j的使用
log日志
在程序运行过程中,对客户以及程序执行过程的展示并进行记录的过程称之为日志
通常与异常一同使用用于记录程序执行时出现的问题,便于维护人员对程序进行维护
Log4j是java中对于日志操作最基础也是最常用的工具类之一,使用配置文件的形式。操控日志输出位置、输出格式、输出级别。
log4j的使用
log4j是额外工具类(在安装jdk并没有提供)需要手动安装
1.获取工具类
log4j.jar:log4j使用包含的所有类、包
本质上是已经编译好的java文件可以直接使用
2.在开发工具类导入工具类jar包
将jar包复制到工程的src,右键build path->add to build path
3.书写配置文件
在src下创建文件夹log4j.properties按照log4j书写配置文件
log4j.rootLogger =ALL,systemOut
#输出到控制台
#指定输出位置
log4j.appender.systemOut = org.apache.log4j.ConsoleAppender
#配置日志信息的格式
log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout
#自定义格式
log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
#输出级别
log4j.appender.systemOut.Threshold = ERROR
#ImmediateFlush = TRUE:默认值是true,所有的消息都会被立即输出
log4j.appender.systemOut.ImmediateFlush = TRUE
log4j.appender.systemOut.Target = System.out
4.使用
// logger没有构造方法通过静态getLogger方法获取
Logger log = Logger.getLogger(Test.class);
// log4j常用日志生成方法
//对象名.日志级别(日志信息)
log.debug("debug日志信息");
log.info("info日志信息");
log.warn("warn日志信息");
log.error("error日志信息");
Log4J配置文件
#1书写根标签多个输出只需要一个根标签
log4j.rootLogger = [All],systemOut
#2配置输出位置
log4j.appender.systemOut =org.apache.log4j.ConsoleAppender
#3根据输出位置配置额外书写
log4j.appender.systemOut.Threshold=DEBUG
log4j.appender.systemOut.ImmediateFlush=TRUE
log4j.appender.systemOut.Target=System.out
#4配置输出样式
log4j.appender.systemOut.layout =org.apache.log4j.PatternLayout
#额外配置输出格式
log4j.appender.systemOut.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss,SSS}][%l]%m%n