我是靠谱客的博主 幸福绿茶,这篇文章主要介绍Java中的异常及异常处理机制一、捕获异常二、捕获异常三、声明异常四、抛出异常try-catch块常见的异常类型try-catch-finally多重catch块声明异常(使用throws声明异常)抛出异常(使用throw抛出异常)开源日志记录工具log4j面试题:,现在分享给大家,希望可以做个参考。

Java中的异常处理,真的好多好多内容!!!!所有小猿今天特地肝了一篇大的关于异常的总结,快进来康康~~~

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

通过if-else来解决异常问题
1、代码臃肿
2、程序员要花很大精力“堵漏洞”
3、程序员很难堵住所有“漏洞”

一、异常

是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
Java编程语言使用异常处理机制为程序提供了错误处理的能力
1、程序中预先设置好对付异常的处理办法
2、程序运行发现异常
3、对异常进行处理
4、处理完毕,程序正常运行

Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

一、捕获异常

1、try

执行可能产生异常的代码

2、catch

二、捕获异常

finally

无论是否发生异常,代码总能执行

三、声明异常

1、throws

声明方法可能要抛出的各种异常

四、抛出异常

throw

手动抛出异常

try-catch块

一、正常(执行try-catch块后的代码块)

复制代码
1
2
3
4
5
6
7
8
9
public void method(){ try { // 代码段(此处不会产生异常) } catch (异常类型 ex) { // 对异常进行处理的代码段 } // 代码段 }

二、出现异常(try块发生异常,产生异常对象,异常类型匹配进入catch块,程序继续执行)

复制代码
1
2
3
4
5
6
7
8
9
10
11
public void method(){ try { // 代码段 1 // 产生异常的代码段 2 // 代码段 3 } catch (异常类型 ex) { // 对异常进行处理的代码段4 } // 代码段5 }

异常是一种特殊的对象,类型为java.lang.Exception或其子类
printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程

三、异常类型不匹配(程序诊断运行)

复制代码
1
2
3
4
5
6
7
8
9
10
11
public void method(){ try { // 代码段 1 // 产生异常的代码段 2 // 代码段 3 } catch (异常类型 ex) { // 对异常进行处理的代码段4 } // 代码段5 }

四、在catch块中处理异常

1、加入用户自定义处理信息
如:System.err.println("出现错误:被除数和除数必须是整数, ” +“除数不能为零。”);
2、调用方法输出异常信息
e.printStackTrace();
3、异常对象常用的方法
void printStackTrace() 输出异常的堆栈信息
String getMessage() 返回异常信息描述字符串,是printStackTrace()输出信息的一部分

常见的异常类型

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

try-catch-finally

1、是否发生异常都执行,不执行的唯一情况
2、try发生异常,进入catch块,再进入finally块
try无异常,中断程序,退出Java虚拟机

存在return的try-catch-finally块

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
public void method(){ try { // 代码段 1 // 产生异常的代码段 2 } catch (异常类型 ex) { // 对异常进行处理的代码段3 return; }finally{ // 代码段 4 } }

try块发生异常,产生异常对象,异常类型匹配进入catch块,执行finall块,再执行catch块中的return退出方法

多重catch块

1、引发多种类型的异常
排列catch 语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void method(){ try { // 代码段 // 产生异常(异常类型2) } catch (异常类型1 ex) { // 对异常进行处理的代码段 } catch (异常类型2 ex) { // 对异常进行处理的代码段 } catch (异常类型3 ex) { // 对异常进行处理的代码段 } // 代码段 }

try块发生异常,产生异常对象,与异常类型1不匹配,与异常类型2匹配,异常类型匹配进入catch块,执行try-catch 块后的代码段

声明异常(使用throws声明异常)

1、声明异常,多个异常用逗号隔开
2、在一个方法体中抛出了异常,通知调用者
①调用者处理异常
②(main方法声明的异常由Java虚拟机处理)调用者继续声明异常

抛出异常(使用throw抛出异常)

除了系统自动抛出异常外,有些问题需要程序员自行抛出异常

开源日志记录工具log4j

1、日志(log)

主要用来记录系统运行中一些重要操作信息
便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到原因

2、日志分类

SQL日志、异常日志、业务日志

3、log4j是一个非常优秀的开源日志记录工具

控制日志的输出级别
控制日志信息输送的目的地是控制台、文件等
控制每一条日志的输出格式

4、使用log4j记录日志步骤

①在项目中加入log4j的JAR文件
②创建log4j.properties文件
③配置日志信息
④使用log4j记录日志信息

5、配置日志信息

日志记录器输出级别:fatal > error > warn > info >debug

设置Logger输出级别和输出目的地

复制代码
1
2
log4j.rootLogger=debug, stdout,logfile//目的地的名字和目的地的名字

把日志信息输出到控制台

复制代码
1
2
3
4
log4j.appender.stdout=org.apache.log4j.ConsoleAppender//日志信息输出到控制台 log4j.appender.stdout.Target=System.err//信息打印到System.err上 log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout//指定日志布局类型

把日志信息输出到文件:jbit.log

复制代码
1
2
3
4
5
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//指定日志布局类型

面试题:

一、try-catch块中存在return语句,是否还执行finally块,如果执行,说出执行顺序

1、不管有没有异常,finally块中代码都会执行;
2、当try.catch中有return时,finally仍然会执行;
3、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
4、在执行时,是return语句先把返回值写入内存中,然后停下来等待finally语句块执行完,return再执行后面的一段。
5、至于返回值到底变不变,当finally调用任何可变的API,会修改返回值;当finally调用任何的不可变的API,对返回值没有影响。

二、try-catch- finally块中, finally块唯一不执行的情况是什么?

1、 try之前异常,系统报错,当然不会执行finally
2、 try 或 catch块中,如果有exit()会使程序提前退出
说出5个常见的运行时异常

复制代码
1
2
3
4
5
6
ClassCastException(类转换异常) IndexOutOfBoundsException(数组越界) NullPointerException(空指针) ArrayStoreException(数据存储异常,操作数组时类型不一致) IO操作的BufferOverflowException异常

三、throw与throws的区别是什么?

throw:
1、表示方法内抛出某种异常对象
2、如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上
3、throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错
4、执行到 throw 语句则后面的语句块不再执行
throws:
1、方法的定义上使用 throws 表示这个方法可能抛出某种异常
2、需要由方法的调用者进行异常处理

最后

以上就是幸福绿茶最近收集整理的关于Java中的异常及异常处理机制一、捕获异常二、捕获异常三、声明异常四、抛出异常try-catch块常见的异常类型try-catch-finally多重catch块声明异常(使用throws声明异常)抛出异常(使用throw抛出异常)开源日志记录工具log4j面试题:的全部内容,更多相关Java中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部