什么是异常
异常: Java程序在执行过程总出现错误,异常出现后会导致下面的代码不执行
public class Test1 {
public static void main(String[] args) {
int age=12;
System.out.println(1/0);//这就出现了异常
System.out.println(age);
}
}
异常的分类
异常分为:检查时异常、运行时异常
区别:
父类 | 是否需要显式处理 | |
---|---|---|
运行时异常 | 直接或间接继承RuntimeException | 不需要 |
检查时异常 | 其他情况时 | 必须 |
异常类的大致继承关系:
异常处理方式
异常的处理方式: try-catch-finally;throw与throws。
try-catch-finally:
1、try用来检查其语句块代码是否有异常;如果有异常则进入catch语句块
2、finally语句块无论是否出现异常都会执行(一般用来释放资源)
3、一个try可以有多个catch分支,就近原则决定进入哪个异常(注意:必须从小到大)
public class Test3 {
public static void main(String[] args) {
int age=12;
try {
System.out.println(1/0); //ArithmeticException异常,就近原则走第一个catch
//String str=null;
//System.out.println(str.length()); //NullPointerException异常,就近原则走第二个catch
//Class.forName("adad"); //Exception异常,就近原则走第四个catch
}catch(ArithmeticException e) {
System.out.println(e);
}catch(NullPointerException e) {
System.out.println(e);
}catch(RuntimeException e) {//运行时异常,为上述两个异常的共同父类
System.out.println(e);
}catch(Exception e) {//为检查时异常和运行时异常的共同父类
System.out.println(e);
}
finally {
System.out.println("无论是否有异常都会执行");
}
System.out.println(age);
}
}
使用log4j将所有异常生成日志保存
为什么?
真正项目在运行时会产生很多异常,如果将这些异常信息全部打印至控制台,则无法显示所有异常,进而无法对程序做系统的修正。
如何做?
将异常信息收集到一个文件中 log4j。
import org.apache.log4j.Logger;//引包
//log4j
public class Test4 {
private static Logger logger = Logger.getLogger(Test4.class);
public static void main(String[] args) {
for(int i=0;i<10000;i++) {//将生成的10000个异常存入log4j文件中
try {
System.out.println(1/0);
} catch (Exception e) {
logger.debug(e.getMessage(),e);
}
}
}
}
**注:**需要在src文件目录下创建一个名为log4j.properties的文件,代码如下:
# DEBUG\u8BBE\u7F6E\u8F93\u51FA\u65E5\u5FD7\u7EA7\u522B\uFF0C\u7531\u4E8E\u4E3ADEBUG\uFF0C\u6240\u4EE5ERROR\u3001WARN\u548CINFO \u7EA7\u522B\u65E5\u5FD7\u4FE1\u606F\u4E5F\u4F1A\u663E\u793A\u51FA\u6765
log4j.rootLogger=DEBUG,Console,RollingFile
#\u5C06\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u63A7\u5236\u53F0
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= [%-5p]-[%d{yyyy-MM-dd HH:mm:ss}] -%l -%m%n
#\u5C06\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u64CD\u4F5C\u7CFB\u7EDFD\u76D8\u6839\u76EE\u5F55\u4E0B\u7684log.log\u6587\u4EF6\u4E2D
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=E://log.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c %X{traceId}-%m%n