Java之异常(1)try-catch-finally

什么是异常

异常: 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
发布了30 篇原创文章 · 获赞 33 · 访问量 1262

猜你喜欢

转载自blog.csdn.net/weixin_45949075/article/details/105417016