异常

异常

1.异常

定义:java程序执行时出现的错误,会导致下面的java程序代码不会执行。

2.分类

Throwable为异常,子类Error和Excception,在Exception下又分为:RuntimeException和非RuntimeException

1.Error:错误

JVM内部错误,资源耗尽等严重情况。

主要分为:OutOfMemoryError:内存溢出

StackOverFlowError:栈溢出

2.Exception

a.运行时异常:RuntimeException

直接或间接继承RuntimeException,不需要显式处理

b.检查时异常:

直接继承类Exception,需要进行显式处理,例如使用下面语句进行异常处理

1.try{}catch{}
2.throws 异常名//抛出异常

3.异常处理

1.try-catch-finally

try语句件检查代码块是否有异常,如果有异常,则进入catch语句,finally语句无论是否出现异常都会执行,一个try可以有多个catch分支,就近原则(注:在书写catch语句时,异常类型必须从小到大)。该语句已经包括了异常的捕获和处理

2.throw/throws

两个都是属于抛出异常,并没有对异常进行处理,只是将产生的异常上抛给调用他的类。只是二者的使用方法不一样。

throw:抛出一个异常类创建的对象,用于方法内或代码块内

throws:抛出异常类,用于方法参数列表之后。

4.log4i

真正的项目在实际运行的时候,会有很多的异常,但是控制台不会输出所有的异常,进而无法对系统进行修正

解决:将所有的异常汇聚导一个文件中。

引入log4i.jar包,在src根目录下创建一个log4j.properties文件,

在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//控制报错信息输出到哪里。如果不需要输出到Console则只需将他删除即可。

#\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=G://Project//log.log //设置日志文件输出的位置
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c %X{traceId}-%m%n

使用

public class Test1 {
	private static Logger logger = Logger.getLogger(Test1.class);//建立logger变量
	public static void main(String[] args) {
		
		for(int i=0;;i++) {
			
			try {
				System.out.println(1/0);
			} catch (Exception e) {
				logger.debug(e.getMessage(),e);//输出异常信息
				
			}
		}
	}

5.自定义异常类

背景

单纯的输出无法定义出现异常的位置,可以使用throw抛出一个异常对象。

throw + 异常对象

异常对象为自己所定义的异常,因为已有的异常无法满足日常开发的需要,因此针对所可能出现的异常进行创建类,输出提示信息。

步骤:

1.新定义类,继承已有的异常类

2.使用父类的构造方法放,传入提示信息

注意

1.如果自定义异常继承检查时异常类,则该自定义异常为检查时异常,如果继承运行时异常类,那么该自定义异常为运行时异常。

2.throw抛出的异常时运行时异常对象,不需要显式的使用throws和try-catch语句。如果自定义的异常类为非运行时异常,那么就需要显式解决,要么抛出该异常,要么使用try-catch语句进行包裹。

3.但是仅仅是抛出异常,没有进行处理,那么之后的代码都不会进行执行。但是如果在抛出异常处理后,那么之后的代码也就会被执行。

4.throw不能直接书写代码。

5.处理异常,如果已经在方法中对可能出现的异常已经进行了处理,那么就不会在抛出异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值