Java OOP异常

Java OOP异常

异常就是在程序的运行过程中所发生的不正常的事件,如所需文件找不到、网络连接不通或中断、算术运算出错(如被零除)、数组下标越界、装载了一一个不存在的类、对null对象操作、类型转换异常等。异常会中断正在运行的程序。

异常处理

异常处理机制就像我们对平时可能会遇到的意外情况,预先想好了一些处理的办法。也就是说,在程序执行代码的时候,万一发生了异常,程序会按照预定的处理办法对异常进行处理,异常处理完毕之后,程序继续运行。Java的异常处理是通过五个关键字来实现的: try. catch. finally. throw 和throws.下面将依次学习。

try-catch块

把可能出现异常的代码放入try语句块中,并使用catch语句块捕获异常.

语法:

try{

}catch(异常类型 e)

try- catch程序块的执行流程比较简单,首先执行的是try 语句块中的语句,如果try语句块在执行过程中遇到异常,并且这个异常与catch中声明的异常类型相匹配那么在try 块中其余剩下的代码都将被忽略,而相应的catch 块将会被执行。匹配是指catch所处理的异常类型与所生成的异常类型完全-致或是它的父类。程序将忽略try块中其余剩下的代码而去执行catch语句块。
如果try语句块在执行过程中遇到异常,而抛出的异常在catch块里面没有被声明,那么程序立刻退出。

在catch块中可以加入用户自定义处理信息,也可以调用异常对象的方法输出异常信息,常用的方法主要有以下两种。

1.void printStackTrace( ):输出异常的堆栈信息。堆栈信息包括程序运行到当前类的执行流程,它将输出从方法调用处到异常抛出处的方法调用序列
2.String getMessage( ):返回异常信息描述字符串。该字符串描述异常产生的原因,是printStackTrace( )方法输出信息的一部分。

​ 常见的异常类型

异常说明
Exception异常层次结构的根类
ArithmeticException算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问null对象成员
ClassNotFoundException不能加载所需的类
InputMismatchException欲得到的数据类型与实际输入的类型不匹配
llegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,如把"abe"转换成数字
try-catch-finally块

在try-catch语句块后加入fnally 块,把该语句放入fnally块。无论是否发生异常, fnally 块中的代码总能被执行

try-catch- finally结构中try块是必需的. catch 和finally块为可选,但两者至少须出现其中之一。需要特别注意的是,即使在try块和catch块中存在return语句,finally 块中语句也会被执行。发

生异常时的执行顺序:执行try块或catch中return之前的语句,执行finally块中的语句,执行try块或catch中的return语句退出.

多重catch块

段代码可能会引发多种类型的异常,这时,可以在一个try语句块后面跟多个catch语句块,分别处理不同的异常。但排列顺序必须是从子类到父类,最后一个一般都是Exception类。因为所有异常子类都继承自Exception 类,所以如果将父类异常放到前面,那么所有的异常都将被捕获,后面catch块中的子类异常将得不到被执行的机会。当运行时,系统从.上到下分别对每个catch语句块处理的异常类型进行检测,并执行第一个与异常类型匹配的catch语句。执行其中的一条catch语句之后,其后的catch语句都将被忽略。

语法:

try{

}catch(异常类型 e){
    
}catch(异常类型 e){
    
}
异常分类

1.Throwable类:所有异常类型都是Throwable类的子类,它派生两个子类,即Eror和Exception。

2.Error类:表示仅靠程序本身无法恢复的严重错误,如内存溢出动态链接失败.虚拟机错误。应用程序不应该抛出这种类型的对象(- 般是由虚拟机抛出)。假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以在进行程序设计时,应该更关注
Exception类。

3.Exception类:由Java应用程序抛出和处理的非严重错误,如所需文件找不到、网络连接不通或中断、算术运算出错(如被零除)、数组下标越界、装载了一个不存在的类、对null对象操作、类型转换异常等。它的各种不同的子类分别对应不同类型的异常。

4.运行时异常:包括RuntimeException及其所有子类,不要求程序必须对它们做出处理。

5.Checked异常(非运行时异常):除了运行时异常外的其他Exception继承来的异常类。程序必须捕获或者声明抛出这种异常,否则会出现编译错误,无法通过编译。处理方式包括两种:通过try-catch 在当前位置捕获并处理异常:通过throws声明抛出异常,交给上一级调用方法处理。

开源日志记录工具log4j

在MyEclipse中使用log4j的步骤比较简单,主要分为以下四个步骤。
1.在项目中加入log4j所使用的JAR文件。
2.创建log4j.properties文件。
3.编写log4j.properties文件,配置日志信息。
4.在程序中使用log4j记录日志信息。

日志及分类

日志根据记录内容的不同,主要分成以下三类。

1.SQL日志:记录系统执行的SQL语句。

2.异常日志:记录系统运行中发生的异常事件。

3.业务日志:记录系统运行过程,如用户登录、操作记录。

如何使用log4j 记录日志

1.在项目中加入log4j所使用的JAR文件。在MyEclipse中选中要使用log4j的项目,然后依次选择"Projet"- “properties” 一” Java BuildPath"一"Libraries" 一"Add Extenal JAR…“选项,弹出选择JAR的窗口,找到自己计算机上存放的文件,即lg4j-1.2.17.jar.如图5. 18所示。确认后回到项目的属性窗口,单击“OK” 按钮即可。

2.创建log4j . properties文件。使用log4j需要创建log4j propterties文件,该文件专门用来配置日志信息,如输出级别、输出目的地、输出格式等。选择要使用log4j的项目,右击src,依次选择"New"- "File"选项,弹出“New File’对话框,输入文件名‘log4j. properties
单击"Finish” 按钮,结束创建

3.(3)编写log4j. properties文件,配置日志信息。现在,我们就
一起来编写这个文件,根据配置,将在控制台和文件中同时记录
日志信息,日志文件的名字是jbit.log。

##设置Logger输出级别和输出目的地###
log4j.rootLogger=info,stdout,logfile

###把日志信息输出到控制台###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
##设置

###把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConsversionPattern=%d(yyyy-MM-dd HH:mm:ss)
%l %F %p %m%n
log4j配置文件
1.输出级别

log4j . rootLogger- =debug, stdout, logfile

其中,debug 指的是日志记录器(Logge) 的输出级别,主要输出级别及含义如下。
fatal:指出严重的错误事件将会导致应用程序的退出。
error:指出 虽然发生错误事件,但仍然不影响系统的继续运行。warn:表明会出现潜在错误的情形。
info: 在粗粒度级别上指明消息,强调应用程序的运行过程。
debug: 指出细粒度信息事件,对调试应用程序是非常有帮助的。

输出级别优先级:

fatal > error > warn > info > debug

2.日志输出目的地Appender

1og4j . rootLogger=debug, stdout , logfile

log4j允许记录日志到多个输出目的地,一个输出目的地被称为一个Appender.log4j中最常用的Appender有以下两种。

log4j允许记录日志到多个输出目的地,一个输出目的地被称为一个Appender.log4j中最常用的
Appender有以下两种。
1.ConsoleAppender:输出日志事件到控制台。通过Target 属性配置输出到System.out 或System. err,默认的目标是System. out。

2.FileAppender: 输出日志事件到一一个文件。通过File属性配置文件的路径及名称。

3.日志布局类型Layout

Appender必须使用一一个与之相关联的布局类型Layout,用来指定它的输出样式。log4j 中最常用的Layout有以下三种。

1.HTMLLayout:格式化日志输出为HTML表格。
2.SimpleLayout: 以一种非常简单的方式格式化日志输出,它输出级别Level,然后跟着一个破折号“——”最后是日志消息

3.PatternLayout: 根据指定的转换模式格式化日志输出,从而支持丰富多样的输出格式。需要配置layout. ConversionPattern 属性,若没有配置该属性,则使用默认的转换模式。

4.转换模式ConversionPattern

对于PatternLayout,需要配置layout . ConversionPattern属性,常用的配置参数及含义如下。
%d:用来设置输出日志的日期和时间,默认格式为IS08601。也可以在其后指定格式,比如%d{yyy-MM-dd HH:mm:s},输出格式类似于2016-03-09 17: 51: 08。
%m:用来输出代码中指定的消息。
%n:用来输出一个回车换行符。

%I:用来输出日志事件的发生位置,包括类名、发生的线程,以及在代码中的行数。例如,如果输出为cn. jbit.log. Test11.main(est11 java:21).则说明日志事件发生在cnjbi.log包下的Test11类的main线程中,在代码中的行数为第21行。
%p:用来输出优先级,即debug、info、 warn. eror fatal 等。
%F:用来输出文件名。
%M:用来输出方法名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值