概述
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块后的代码块)
public void method(){
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
二、出现异常(try块发生异常,产生异常对象,异常类型匹配进入catch块,程序继续执行)
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
异常是一种特殊的对象,类型为java.lang.Exception或其子类
printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程
三、异常类型不匹配(程序诊断运行)
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()输出信息的一部分
常见的异常类型
异 常 类 型 说 明
Exception 异常层次结构的父类
ArithmeticException 算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问 null 对象成员
ClassNotFoundException 不能加载所需的类
IllegalArgumentException 方法接收到非法参数
ClassCastException 对象强制类型转换出错
NumberFormatException 数字格式转换异常,如把"abc"转换成数字
try-catch-finally
1、是否发生异常都执行,不执行的唯一情况
2、try发生异常,进入catch块,再进入finally块
try无异常,中断程序,退出Java虚拟机
存在return的try-catch-finally块
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
} catch (异常类型 ex) {
// 对异常进行处理的代码段3
return;
}finally{
// 代码段 4
}
}
try块发生异常,产生异常对象,异常类型匹配进入catch块,执行finall块,再执行catch块中的return退出方法
多重catch块
1、引发多种类型的异常
排列catch 语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句
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输出级别和输出目的地
log4j.rootLogger=debug, stdout,logfile//目的地的名字和目的地的名字
把日志信息输出到控制台
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
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个常见的运行时异常
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中的异常及异常处理机制一、捕获异常二、捕获异常三、声明异常四、抛出异常try-catch块常见的异常类型try-catch-finally多重catch块声明异常(使用throws声明异常)抛出异常(使用throw抛出异常)开源日志记录工具log4j面试题:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复