我是靠谱客的博主 幸福绿茶,最近开发中收集的这篇文章主要介绍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块后的代码块)

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面试题:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部