java异常!!和log4jjar包使用!!!

一、本章内容:异常
1、什么叫异常?(异常的定义)
在写程序过程中发生错误
2、分类
编译错误:在编译阶段就报错
代码没有办法编译成class文件
运行错误:
在代码运行class文件的时候,发生了错误
逻辑错误:
编译正常,运行正常,只是结果与预期的不合。
3、工具面对错误的时候,默认情况是怎么处理:
1、编译错误/运行错误:直接终止代码的运行
2、逻辑错误:没有任何处理手段
4、处理异常的手段:
1、try:可能发生异常[错误]的代码–>try确实好用,但是不建议过多–》需要的监控多–》耗费性能就高
必须要有合作伙伴:要么catch,要么finally,二者至少出现一个
try…catch
try…finally
try…catch…finally
2、catch:捕获try里面发生的错误类型,捕获指定的类型的异常
语法:catch(异常类名 对象名){}
1、catch捕获指定类型
2、catch写的父类能捕获子类异常
3、catch可以有多个
1、catch后面的类名不能有相同的
2、最多执行一个catch,满足了前面的后面的就不会执行
3、catch后面的类名,父类必须在后,子类在前
4、是不是执行catch整个程序就结束?
不是,只是当前错误,在这里结束了。
5、如果try里面没有发生错误,catch就不会执行
6、private String detailMessage;
异常的信息描述,只读–》getMessage()
7、建议多放子类
3、finally:不管try里面有没有发生错误,finally一定会执行
除非:
1、如果代码遇到了System.exit(0);
2、如果finally也发生异常了,finally就不会被执行完毕
3、手动退出应用程序:
1、程序直接被死亡
2、终止cpu的使用权
4、throw:抛出异常
1、throw 异常对象名;
2、注意:throw 可以放多个对象名?
不能
5、throws:声明异常—》要求对方一定要解决这个错误
1、throws 异常类名;
2、throws后面可以放多个类名?
可以放多个,以逗号[,]隔开
5、解决异常的手段:
1、try…catch…finally—>自己处理问题
2、throw…throws–>把原因抛出来
6、异常类
父类:Throwable
子类:Error Exception
Eorror,错误,
程序–》写的代码的集合,如内存溢出,jvm错误
Exception,异常—》代码需要处理的
编译报错[CheckedException,检查时异常]:需要立刻处理,不处理,我们代码没有办法运行
运行报错[RuntimeException]:需要处理,不处理,在运行的过程中程序被迫中止
if(in.hasNextInt())

				请手写你写在项目过程,遇到的最多的5-8个异常
				  InputMisMactchException:输入时类型不匹配
				  NullPotinException  空指针异常
				  ArrayIndexOutOfBoundsExc... 数组下标越界
				  StringIndexOutOfBoundsExc...字符串下标越界
				  ClassCastExc... 类转换异常
				  NumberFormatExc.... 格式转换异常
				  ArithmeticException算术异常 
				  Exception异常
				  SQLException数据库异常

7、日志框架:把打印日志长久的保存起来—》log4j、log4j2
1、注意:这个框架是java本身没有的功能
2、jar包:
1、一些用java底层代码封装的一个完整的功能
2、怎么使用:
1、在项目中导入jar
2、写配置文件
3、使用jar里面的功能
3、log4j的配置文件–》log4j.properties文件
1、文件名:log4j.properties
.properties—》配置文件
自定义标签—》key=value形式存在
document[“key”]—>value
.xml---------->配置文件
以自定义标签的形式存在
xmlNode[“key”].innerText
.yml---------->配置文件
2、文件位置
默认位置:src目录
如果你不存方在src目录下,你就需要自定义读取路径
3、文件内容:
log4j.rootLogger=debug,con,filedebug, filefatal
### 定义输入级别[全局的],输出的目的地名字
如果定义是warn级别,就可以warn,error,fatal
如果定义是:info,可以保存:info,warn,error,fatal
只要>=当前定义的级别,都会被保存起来

		    以下说法错误:
				log4j.rootLogger=debug,info
					保存debug及其以上
					保存info及其以上
				log4j.rootLogger=error,debug
					保存error及其以上
					保存debug及其以上
			所以,一个配置只需要定义一个日志输出级别
		配置输出目的地的信息:
			1、目的地类型:
				1、控制台--》org.apache.log4j.ConsoleAppender
				2、输出到文件--》org.apache.log4j.FileAppender
			2、目的地类型配置代码:
			log4j.appender.目的地名字=org.apache.log4j.ConsoleAppender--->控制台
			log4j.appender.目的地名字=org.apache.log4j.FileAppender---》文件
			3、控制台的输出配置:
			  ### 定义使用的输出语句的:System.err--》System.err.println("")--》红色;System.out--》System.out.println(""); //输出的黑色
			  log4j.appender.con105.Target=System.err/System.out
			  ### layout布局
			  log4j.appender.con105.layout=org.apache.log4j.SimpleLayout  
			4、日志输出到文件的:
				log4j.appender.目的地名字.File=文件名
				log4j.appender.目的地名字.Threshold = 当前文件保存的错误级别 
				log4j.appender.filefatal.Append = true# true追加,false覆盖以前
			5、layout布局方式:
				org.apache.log4j.SimpleLayout  --》log4j自带的普通格式
				org.apache.log4j.HTMLLayout  ---》输出的是html格式
				org.apache.log4j.PatternLayout  ---》自定义格式
					# 输出的格式
					log4j.appender.filedebug.layout.ConversionPattern=[%5p]-%m%n
					%p:优先级
						%5p--->优先级输出的时候所占的长度,内部不够空格来凑
					%m:消息
					%n:换行
					%d:日期
	4、日志的输出级别:
		1、定义:错误也分等级,有的小错误,有的严重问题
		2、有哪些?
			debug---》调试的时候信息
			info----》普通信息
			warn----》警告
			error---》错误
			fatal---》严重错误
			
			按从小到大的顺序,把日志等级排好

二、回顾
1、异常
1、定义:写程序过程中发生的错误
2、分类:
编译错误:编译过程中
运行错误:编译通过,在运行的过程中报错
逻辑错误:编译通过,运行也通过,预期的结果不一样
3、默认处理手段:程序直接终止
4、处理手段:
1、try…catch…finlly
try监控可能会发生错误的代码
catch捕获try里面发生的异常
catch(异常类名 对象名)catch捕获指定的异常类
1、可以出现多个catch
1、catch后面类名不能有相同的
2、子类在父类之前
3、满足了前面的catch后面的都不会匹配
finally:不管异常与否都会执行的代码
除非:遇上System.exit(boolean);finally也遇到了错误;手动终止程序

	配合:try必须出现的,catch和finally二选一
2、throw...throws
	throw抛出异常---》告诉调用者出现了什么错误
	throws声明异常--》要求调用者一定要处理这个错误

2、异常的类
Throwable
Error:错误,仅靠程序代码本身无法处理的错误
Exception,异常
CheckedException:检查时异常,编译时就会发生的错误
RuntimeException:运行时异常,运行的过程中
3、日志框架–》log4j[slf4j,log4j2,logback…]
1、使用步骤
1、导入jar
2、写配置文件
3、使用Logger对象
一定要注意导包
2、log4j,日志等级
debug
info
warn
error
fatal
3、配置文件:
1、注意文件名命名
2、注意文件的位置

	如果自定义读取方式,那么命名位置就没有要求
4、为什么要导入jar
	1、因为我当前要使用的功能,java没有自带
	2、有一些大神,把一些已经完成的功能,封装,变成了jar

你可能感兴趣的:(java)