java异常

Posted on 2023-06-08 16:57  liuxin6de1b  阅读(11)  评论(0编辑  收藏  举报

生活中的异常:和正常状态下的事件格格不入的场景,我们称之为异常

计算机中的异常:正常情况下代码不会出现的场景

计算机中什么是异常处理

如果代码出现与正常情况下相悖的场景,需要用代码去进行异常处理

1.try-catch-正常

try{代码(存放希望被执行的代码,这里的代码可能有异常,可能没有异常)

}catch(异常的类型    异常名称变量(一般为e)){异常处理的具体细节(捕获异常)

}

2.try-catch-异常

try{代码(存放希望被执行的代码,这里的代码可能有异常,可能没有异常)

}catch(异常的类型    异常名称变量(一般为e)){异常处理的具体细节(捕获异常)

}catch(异常的类型    异常名称变量(一般为e1)){异常处理的具体细节(捕获异常1)

}

如果代码中同时出现多个可能出现异常的场景,只会捕获一次异常,也就是说只执行一次catch模块分支,并且捕获的顺序是由上至下

一般捕获遵循的规则是上小下大

如果只捕获小的,不捕获大的(Exception)会导致异常类捕获不完整

如果只捕获大的,不捕获小的会导致捕获异常无法具体定位

如果捕获的顺序不合理,比如上大下小,由于代码的执行顺序是由上至下所以会导致只捕获大的异常,之后的具体的小的异常不在捕获,原因是异常只捕获一次

3.try-catch-不匹配

如果没有捕获的到对应的异常则try catch失效

4.常见的异常类型

Exception异常层次结构的父类

ArithmeticException算术错误情形,如以零作除数

ArrayIndexOutOfBoundsException数组下表越界

NullPointerException尝试访问null对象成员

ClassNotFoundException不能加载所需的类

IllegalArgumentException方法接收到非法参数

ClassCastException对象强制类型转换出错

NumberFormatException数字格式转换异常,如把abc转换成数字

5.try-catch-finally-exit

finally会在程序正常或是程序异常的情况下都执行,做补充,但是有一个特例,就是在catch中加入System.exit(0)的行为,中断虚拟机,退出程序,则不执行finally语句

6.try-catch-finally-return

先执行finally后执行return

异常

1.声明异常

public static void show()throws Exception{

}提示用户这个代码可能有异常,也可能没有异常

public static void main (String[]args)throws Excception{

Demo demo =new Demo()

demo.show(); 调用异常的第一种方式

}

public static void main(String[]args){

Demo demo=new Demo();

try{demo.show();

}catch (Exception e){

e.printStackTrace();

}调用异常的第二种方式

}

2.抛出异常(人为抛出异常)

if (sex.equals("男"))||sex.equals("女"){

不是男就是女

}else{

throw new Exception(“不是人”)

}throws 是系统声明有异常;throw是人为抛出的异常。

3.异常的分类

1.错误error 定义:无法用代码解决的异常(没法通过改代码解决问题)

2.异常Exception定义:可以用代码去捕获(解决)

3.exception分两类 检查时异常 运行时异常

检查时异常(checked Exception)定义 代码运行前(编译时)必须处理

运行时异常(runtime Exception)定义 代码编译时不强制性处理

4.log4j

1.log4j

定义:开源日志记录

功能:实现以“文件”形式记录异常信息,程序正常运行的关键信息

步骤:先new一个新的项目project,在项目中new一个directory名称命名为lib,将log4j复制粘贴至lib中,将log4j解压(耳机上面的选项),在src中新建类;private static Logger logger=Logger.getlogger(类名.class.getName());导包一定要找到log4j,很容易倒错包

在每个输出和异常后面加入logger.debug("输出")

log4j是用来阅读日志的

只输出控制台

删除log4j.properties中的logfile

只输出到文件

删除log4j.properties中的stdout

修改输出的时间格式

log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-mm-dd  HH:mm:ss}%1 %F %P %m%n

计算机能自动识别是年月日时分秒

日志文件名称

log4j.appender.logfile.File=my.log    my.log可以修改

日志的级别顺序

debug<info<warn<error

日志只能识别级别等级等于或高于它的,无法识别等级比自己低的

 

Copyright © 2024 liuxin6de1b
Powered by .NET 9.0 on Kubernetes