异常
Java异常是一个描述在代码段中发生的异常(也就是运行时出错)情况的对象。当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被引发(throw,或称为抛出)。该方法可以选择自己处理异常或传递该异常
异常:可能使会使程序进行终止的一种错误(取决于处理方式)
异常的分类:
1.运行时异常(非受检异常)
2.非运行时异常(受检异常)
运行时异常在代码编译过程中不能检测出异常,但任可以进行异常的处理.
运行时异常在代码编译过程中就会被检测,必须进行异常处理才能使程序运行.
异常的处理:
异常有时会导致程序的终止运行,异常的处理.可以保证程序不因出现异常而中止运行,必须要对出现的异常进行处理
异常体系结构
java把各种不同类型的异常情况进行分类,用Java类来表示异常情况,这种类被称为异常类。把异常情况表示成异常类,可以充分发挥类的可扩展和可重用的优势。
由五个关键字 try、catch、throw、throws 和 finally 处理。
Java 中可用于处理异常的两种方式:
自行处理:可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。try、catch、finally
使用try将所有可能出现的异常代码放入,当出现异常时获取到相应异常对象 使用catch与相应的异常类进行比较,执行相应的处理代码,使用finally进行最终处理
回避异常:通知潜在调用者,如果发生了异常,必须由调用者处理。Throws
public static void main(String[] args) throws Exception {
// 异常的分类
// 1受检异常
// (编译时异常,在代码编写过程中由java健壮性可以实时检测的出的异常)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
// 受检异常书写后会进行报错(受检异常需显示的进行异常处理)
sdf.parse("");
// 2非受检异常(运行时异常)
// (在编译时不受检测(检测不出来)代程序运行过程中出现的异常)
//System.out.println(2 / 0);
// 非受检异常书写后不会报错 在程序运行过程中出现异常会隐式提供处理方式
// 异常处理两种方式
// 1自行处理(出错自己解决->事先写好处理异常的代码,当出现异常时进行调用)
// 使用关键字进行处理
// 语法:
// try{可能出现异常的代码
// }catch(将要匹配的异常){
// 匹配的相应异常处理的方法
// }finally {
// 最终处理的代码
// }
// 自行处理异常
//使用try进行异常捕获
//catch进行异常匹配处理
//使用finally进行最终处理
try {
//捕获异常
String str="1asdas564sa6das";
Date parse = sdf.parse(str);
System.out.println(parse);
} catch (ParseException e) {
//在出现异常时会创建相应的异常对象
//根据相应的异常对象匹配相应的carch进行执行
//所有的异常的异常对象都可以使用EXception 保存
// e.printStackTrace();打印错误信息
System.out.println("解析出错");
}finally {
//最终处理(可以省略)
//不论异常是否出现都会执行相应代码
//用于资源的释放
//1没有终止程序运行的异常 2捕获并处理了所有异常 3需要最终处理的代码
System.out.println("最终处理");
}
//在处理多个异常时通过多个catch进行匹配执行
// 2回避处理(出现异常自己不处理交由调用者处理)
//使用throws关键字将可能出现的异常抛出
//交由调用者进行处理 调用者根据实际情况选择自行处理还是继续回避
//除非有自行解决否则将依次上传给最终调用者
//将可能出现的异常使用throws关键字抛出
//多个异常使用,分割 或使用父类对象抛出
//方法参数列表后throws 异常1,异常2(Exception)
}
最后一个catc块一般使用Exception进行匹配(可以将所有数据类型匹配到),防止没有匹配的异常时程序异常终止
Exception类是所有异常类的父类,根据多态可以保存任何子类对象,如果将其放在首个catch语句块中,那么后面所有语句的catch都不会进行任何操作,没有意义,所以一般放在最后一个catch语句中用于防止没有匹配的异常出现
自定义异常
自定义异常类的概念
自定义的异常类是由开发人员根据需求开发的异常类.
程序中使用自定义的异常类,通过自定义异常类可以让开发人员更加方便的定位程序出错的位置且更加详细的描述异常信息。
开发人员根据实际需求按照特定功能指定语法书写的自定义非原有提供的异常
异常分为两类
非运行时异常Exception
运行时异常RuntimeException
自定义异常的书写
创建一个类继承与Exception类或RuntimeException 调用Exception类构造方法传入异常信息,实现自定义异常的创建
//创建编译时异常
//创建类继承Exception类
//书写构造方法调用父类构造方法
public class MyException extends Exception {
public MyException(String msg) {
super(msg);
}
}
//运行时异常
//代码调用时不会要求书写异常解决
//需要手动书写
//继承RuntimeException书写构造方法调用父类构造方法
public class MyRunTimeException extends RuntimeException{
public MyRunTimeException(String msg){
super(msg);
}
}
Log4j
Log for java
日志(log):程序在运行过程中生成的操作文件
log4j了解决日志相关的问题,log4j是Apatch提供开源的日志包(java拓展工具包)
当程序运行过程中出现异常或需要记录的操作时,需要使用日志进行记录
日志优先级
标示着日志信息输出的紧急级别,可以通过配置为不同级别的日志设置不同的处理方式.
// Logger.getLogger(Test.class);
Logger log = Logger.getLogger("systemOut");
// log4j提倡使用四种级别
log.info("info级别的日志输出");
log.debug("debug级别的日志输出");
log.warn("warn级别的日志输出");
log.error("error级别的日志输出");
注意事项:
1 配置文件名固定为log4j.properties
2 配置文件首行必须为#log4j.rootLogger = [level],appenderName,appenderName2,…语法形式
3 创建logger对象导入org.apache.log4j.Logger 包