异常——使用Java面向对象编程

本文详细介绍了Java中的异常处理机制,包括try-catch-finally、异常类型、异常分类以及如何声明和抛出异常。此外,还讲解了Log4j这一开源日志记录工具的使用,包括日志的三种类型、配置文件设置以及如何在代码中记录日志。

第五章 异常——Java

一、什么是异常

​ 异常就是在程序的允许过程中所发生的不正常的事件。

二、异常处理

​ Java的异常处理是通过五个关键词来实现的: **try、catch、finally、throw和throws **

1.try-catch

  • 如果 try 块中所有语句正常执行完毕,不会发生异常,那么 catch 快中的所有语句都将会被忽略。
  • 如果 try 语句快在执行的过程中遇到异常,并且这个异常与 catch 中声明的异常类型相匹配。那么 try 快中其余剩下的代码被忽略,而相应的 catch 快将会被执行。匹配是指catch所处理的异常类型与所生存的异常类型完全一致或是它的父类。
  • 如果 try 语句块中在执行过程中遇到异常,而抛出的异常在 catch 块里面没有被声明,那么程序立即退出。
    • 报异常的方法有以下两种
      • void printStackTrace :输出异常的信息。信息包括程序运行到当前类的执行流程,他讲输出从方法调用到异常抛出处的方法调用序列。
      • **String getMessage ( ) ** :返回异常信息描述字符串。该字符描述异常产生的类型,是 printStackTrace( ) 方法输出信息的一部分。

2.try-catch-finally

  • try-catch 语句后加入 finally 快,把该语句放入 finally 块。无论是否发生异常, finally 块中的代码总能被执行。
  • try-catch-finally 程序块的执行的流程大致分为两种
  • 如果 try 块中所有的语句正常执行完毕,那么 finally 块就会被执行。
  • 如果 try 语句块在执行过程中碰到异常,无论这种异常能否被catch块捕获到,都将执行 finally 块中的代码
  • try-catch-finally 结构中的 try 块是必需的, catchfina 块为可选,但两者至少必须出现其中之一。
  • 需要注意的是,即使在 try 块和 catch 块中存在 return 语句, finally 块中语句也会被执行。发生异常时的执行顺序:执行 try 块或 catchreturn 之前的语句,执行 finally 块中的语句,执行 try 块或 catch 中的 return 语句退出。
  • finally 块中语句不被执行的唯一情况:在异常处理代码中执行 System.exit(1) ,直接退出。

3.多重catch块

  • 系统从上到下分别对每个catch语句块处理的异常类型进行检查,并执行第一个与异常类型匹配的catch语句。执行其中一条catch语句之后,其后的catch语句都将被忽略。
  • 在使用多重 catch 块中, catch 块的排列顺序必须是从子类到父类,最后一个一般都是 Exception 父类。

4.声明异常——throws

  • 在java中用关键字 throws 声明摸个方法可能抛出的各种异常。 throws 可以同时声明多个异常,之间用逗号隔开。被声明异常之后调用必须处理异常

处理异常的两种方式

  • 通过 try-catch 捕获
  • 通过 throws 继续声明异常。如果调用者不打算处理异常,则可以继续通过 throws 声明异常,让下一个调用者处理异常。 main() 方法声明的异常将由Java虚拟机来处理。

语法

public void 方法名 throws 异常,异常(){}

5.抛出异常——throw

手动抛出异常

语法:

throw new Exception("错误语句");

6.throw和throws的区别表现在以下三个方面

作用不同throw 用于在程序中抛出异常;throws 用于声明在该方法内抛出了异常。

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

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

7.常见的异常类型

异常说明
Exception异常层次结构的跟类
ArithmeticException算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问 null 对象成员
ClassNotFoundException不能加载所需的类
IllegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,如把"abc"转换成数字

二、.异常的分类

在这里插入图片描述

Throwable 类:所有异常都是 Throwable 类的子类,他派生两个子类,即 ErrorException

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

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

运行时异常:包括 RuntimeException 及其使用子类,不要求程序必须对题目做出处理。

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

三、Log4j——开源日志记录工具

1.记录的内容分为以下三种:

  • SQL日志:记录系统执行的SQL语句。
  • 异常日志:记录系统运行中发生的异常事件
  • 业务日志:记录系统运行过程,如用户登录,操作记录

2.如何使用log4j记录日志

​ (1)在项目中加入log4j的 JAR 文件 直接在项目上 Ctrl+C-Ctrl+V

​ (2)创建 log4j.properties 文件。

​ (3)编写 log4j.properties 文件

### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug, 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.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n

​ (4)使用 log4j 记录日志信息

声明一个成员变量

private static Logger logger=Logger.getLogger(类名.class.getName());

3.log4j 配置文件

(1)输出级别
日志记录器输出级别:fatal>error>warn>info>debug 日志记录器输出级别:fatal > error > warn > info >debug fatal>error>warn>info>debug
fatal:指出验证的错误事件将会导致应用程序的退出

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

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

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

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

四、总结:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾拾柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值