异常
1、异常
1、异常的定义:在程序运行中出现的错误。
2、异常分为三类:
编译错误:不能运行,在编译阶段就报错。
运行错误:正常编译,但是运行错误。
逻辑错误:正常编译,正常运行,结果错误。
程序遇到错误默认处理手段:程序之间终止本行代码。
2、处理异常手段:try-catch-finally处理异常,
try:监控代码,监控可能发生错误的代码。
catch:捕获异常,语法catch(类名,对象名)类名是异常的类名。catch可以出现一次性出现多个,要求:子类必须在父类的前面。结果:只会执行一个,第一次匹配的执行。
finally:一定会处理,除非遇到system.exit(1)。
public class TestLog1 {
private static Logger logger = Logger.getLogger(TestLog1.class.getName());
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
try {
System.out.print("请输入被除数:");
int num1 = in.nextInt();
logger.debug("输入被除数:"+num1);
System.out.print("请输入除数:");
int num2 = in.nextInt();
logger.debug("输入除数:"+num2);
System.out.println(String.format("%d / %d = %d",num1,num2,num1/num2));
logger.debug("输出运算结果:"+String.format("%d / %d = %d", num1,num2,num1/num2));
} catch (InputMismatchException e) {
logger.error("被除数和除数必须是整数",e);
}catch(ArithmeticException e) {
logger.error(e.getMessage());
}catch(Exception e) {
logger.error(e.getMessage());
}finally {
System.out.println("欢迎使用本程序!");
}
}
}
try是必选,catch和finally是二选一,程序终止:close()结束。
throw-throws:抛出异常。
throw:抛出异常(内部动作,有异常自己解决不了)语法:在方法里面throw异常对象名
throws:声明异常(外部动作,请求外援动作)语法:方法名小括号里面调用的方法一旦声明了异常,那么外援一丁丁要处理异常,没有处理,则编译报错。请求外援:1、有错误自己解决不了,2、请求外援的动作
public class Test {
private static Logger logger = Logger.getLogger(Test10.class.getName());
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
System.out.print("请输入被除数:");
int num1 = in.nextInt();
logger.debug("输入被除数:"+num1);
System.out.print("请输入除数:");
int num2 = in.nextInt();
logger.debug("输入除数:"+num2);
System.out.println(String.format("%d / %d = %d",num1,num2,num1/num2));
logger.debug("输出运算结果:"+String.format("%d / %d = %d", num1,num2,num1/num2));
} catch (InputMismatchException e) {
logger.error("被除数和除数必须是整数",e);
}catch(ArithmeticException e) {
logger.error(e.getMessage());
}catch(Exception e) {
logger.error(e.getMessage());
}finally {
System.out.println("欢迎使用本程序!");
}
}
}
3、异常结构
Throwable
Error Exception
1、异常类型
异常 | 说明 |
---|---|
Exception | 异常层次结构的根类 |
ArithmeticException | 算术错误情形,如以零除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null对象成员 |
ClassNoFoundException | 不能加载所需的类 |
InputMismatchException | 欲得到数据类型与实际输入的类型不匹配 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对选哪个强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把“abc”转换成数字 |
4、日志
日志作用:把异常信息永久保存到文件
日志框架:log4j、slf4j、logback
学习步骤:1、导入jar包。2、定义配置文件:log4j.properties(固定文件名+固定位置)。3、使用logger。4、配置文件:#设置输出级别目的地,#等级本身及其以上,#目的地可以有多个
log4j.appnder.目的地名称 = org.apche.log4j.目的地类型
log4j.uppnder.filrfatal.layou.conversion Pattern = [%9P] - %m%n
1、日志等级
debug(Object i); debug(Object i,Throwable t); 调试
info(Object i); info(Object i,Throwable t); 信息
warn(Object i); warn(Object i,Throwable t); 警告
error 错误
fatal(Object i); fatal(Object i,Throwable t); 严重错误
layou:布局
SimpleLayout:简单格式
HTMLLayou:HTML格式
PattmLayou:自定义格式
P:输出的等级
M:消息,输出内容
N:换行
###设置Logger输出级别和输出目的地
log4j.rootLogger=Info, stdout,logfile
###把日志信息输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender//输出地址
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout//输出格式
log4j.appender.stdout.layout.ConversionPattern=%d %l %m %n
###把日志信息输出到文件
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