Java中的异常

1.什么是异常

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

2.什么是异常处理

异常处理机制就像我们对平时可能会遇到的意外情况,预先想好了一些处理的办法。也就是说,在程序执行代码的时候,万一发生了异常,程序会按照预定的处理办法对异常进行处理,异常处理完毕之后,程序继续运行。

Java的异常处理是通过五个关键字来实现的:try,catch,finally,throw和throws。

2.1 try-catch块

在Java的异常处理机制进行处理,把可能出现异常的代码放入try语句块中,并使用catch语句块捕获异常。

try-catch程序块的执行流程比较简单,首先执行的是try语句块中的语句,这时可能会有以下三种情况。

a. 如果try块中所有语句正常执行完毕,不会发生异常,那么catch块中的所有语句都会被忽略。

b. 如果try语句在执行过程中遇到异常,并这个异常与catch中声明的异常类型相匹配,那么在try块中剩下的代码都会被忽略,而相应的catch块将会被执行。匹配是指catch所处理的异常类型与所生成的异常类型完全一致或者是它的父类。

c. 如果try语句在执行过程中遇到异常,而抛出的异常在catch块中没有声明,那么程序立刻退出。

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

a. void printStackTrace() :输出异常的堆栈信息。

b. String getMessage() :返回异常信息描述字符串。

常见的异常类型
异常说明
Exception异常层次结构的根类
ArithmeticException算术错误
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException访问null对象成员
ClassNotFoundException不能加载所需的类
InputMismatchException数据类型不匹配
IllegalArgumentException方法接收到非法参数
ClassCastException强制类型转换出错
NumberFormatException数字格式转换异常

2.2 try-catch-finally 块

try-catch-finally程序块的执行流程分为两种情况。

a. 如果try正常执行完毕,那么finally块就会被执行。

b. 如果try碰到异常,无论异常能不能被catch捕获,finally都会执行。

try-catch-finally结构中的try块是必需的,catch和finally块为可选,但两者必须出现其中之一。finally块中语句不被执行的唯一情况:在异常处理代码中执行System.exit(1);将退出Java虚拟机。

2.3 多重catch块

一段代码可能引发多种类型的异常。我们可以在一个try语句后面跟多个catch语句块,分别处理不同的异常。但排序顺序必须是子类到父类,最后一个一般都是Exception类。因为所有异常子类都继承Exception类,所以如果将父类放在前面,那么所有的异常都会捕获,后面的catch块中的子类异常将得不到被执行的机会。

2.4 声明异常——throws

在Java语言中通过关键字throws声明某个方法可能抛出的各种异常。throws可以同时声明多个异常,之间用逗号隔开。

通过如下两种方式进行处理。

a. 通过try-catch捕获并处理异常

b. 通过throws继续声明异常。

3.抛出异常

3.1 抛出异常——throw

在Java中可以使用throw关键字来自行抛出异常。

throw和throws的区别:

a. 作用不一样:在throw用于程序抛出异常;throws用于声明在该方法内抛出了异常。

b. 使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。

c.内容不同:throw抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类。

3.2 异常分类

Java的异常体系包括许多异常类,它们之间存在继承关系。

Throwable类:所有异常类型都是它的子类。它派生了两个子类,Error和Exception。

Error类:表示仅靠程序本身无法恢复的严重错误。

Exception类:由Java应用程序抛出和处理的非常严重错误。

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

非运行时异常(CheckedException):除运行时异常外的其他由Exception继承来的异常类程序必须捕获或者抛出这种异常。

4.开源日志记录根据log4j

1.在eclipse中使用log4j

在eclipse中使用log4j的步骤比较简单,主要分四个步骤;

a. 在项目中加入log4j所使用的JAR文件

b.创建log4j.properties文件

c.编写log4j.properties文件,配置日志信息

d.在程序中使用log4j记录日志信息

2.log4j配置文件

2.1输出级别

log4j.rootLogger=debug,stdout,logfile

其中,debug是日志记录器的输出级别,主要的输出级别如下:

fatal:指出严重的错误事件将会导致应用程序的退出。

error:指出虽然发生错误事件,但仍然不影响系统的继续运行。

warn:表明会出现潜在错误的情形。

info:在粗粒度级别上指明消息,强调应用程序的运行过程。

debug:指出细粒度信息事件,对调试应用程序是非常有帮助的。

输出级别的优先级:

fatal>errpr>warn>info>debug

2.2日志输出目的地 Appender

log4j.rootLogger=debug,stdout,logfile

其中,stdout,logfile指日志输出目的地的名字。

log4j可以有多个目的地,一个输出目的地称为一个Appender。常用的Appender有以下两种。

a. ConsoleAppender:输出日志事件到控制台。

b. FileAppender:输出日志到文件。

2.3 日志布局类型Layout

Appender必须使用一个与之相关的布局类型Layout,用来指定它的输出样式。如以下。

a. HTMLLayout:格式化日志输出HTML表格。

b. SimpleLayout:简单格式输出日志

c. PatternLayout:自定义格式输出日志。

2.4 转换模式ConversionPattern

当类型为PatternLayout时,需要配置输出格式,常用配置参数如下:

%d:用来输出日志的日期和时间。

%m:用来输出代码中指定的信息。

%n:用来输出回车换行符。

%l:用来输出日志事件发生的位置。

%p:用来输出优先级。

%F:用来输出文件名。

%M:用来输出方法名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值