一、异常
- 异常分类
1、异常的基类:Throwable -->java.lang.Throwable
2、异常的子类:Error、Exception
①Error:一般是我们的代码引起了JVM本身资源耗尽的错误,被称为致命性异常。注意:这种错误是异常机制解决不了的。
②Exception:
编译时异常:编写代码的过程中出现的问题,必须要解决问题。
运行时异常:程序运行过程中出现的小问题,把异常处理掉,程序还可以往下接着运行。
-
常见的异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException -
异常的处理:
1、抛出异常:throw、throws
①throw表示方法内抛出的某种异常对象,如果不是运行时异常,需要在方法的声明时加上该异常的抛出(throws语句)或者在方法体内部try–catch处理该异常,否则编译报错。
②throws用在方法的尾部声明方法内可能要抛出的异常 抛给调用者进行异常处理。如果调用者没有处理可以接着往上抛,一直到jvm虚拟机。直接停止程序。2、捕获并解决异常:try-catch
①try-catch格式:try { 可能出现异常的代码块 } catch ( Exception e ){ 异常处理 }
②多重catch:代码块中可以出现多个异常,通过多个catch捕捉,如果catch中的异常类型满足子父关系,一定要将子类异常放前面。
③finally语句:finally是可选的,一般用来关闭资源–>关闭IO流,数据库连接等。
④一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常处理,一旦处理完成,就跳出当前的try-catch结构(在没有写finally的情况下),继续执行后面的代码。
⑤在try结构中声明的变量,一旦出了try结构就不能再被调用。3、自定义异常:
作用:java中给我们提供的异常很多,但是有些满足不了我们的需求,所以此时需要我们自己去定义异常。
public void setSex(String sex) throws SexException {
//设置性别的值只能为男和女
if("男".equals(sex) || "女".equals(sex)){
this.sex = sex;
}else {
//抛出异常
throw new SexException("性别输入错误!");
}
}
public class SexException extends Exception {
public SexException(String message) {
super(message);
}
//重写printStackTrace()信息,也可以不重写,直接输出错误栈信息
@Override
public void printStackTrace() {
System.out.println("我自己定义的性别异常");
}
}
二、日志处理
- 概念:用来记录程序中的行踪的
- 作用:用来定位和找到问题;
- 操作:
1、导包
①右键新建文件夹或包lib
②将jar文件拷贝到lib目录中
③lib目录上右键–【Add as Library】
2、添加配置文件
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
### 把日志信息输出到文件:anbo.log ###
log4j.appender.file=org.apache.log4j.FileAppender
#指定输出目录
log4j.appender.file.File=AAA.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %m%n
### 设置优先级别、以及输出源 ###
log4j.rootLogger=info,stdout,file
-
注意
①日志文件必须以log结尾。
②日志的优先级别:debug<info<warn<error
③程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。