一、异常
1、异常分类
(1) Error
Error异常:为JVM虚拟机监管以外的异常情况,该异常可以通过try…catch去捕获,但无法通过电脑软件去解决,例如出现网络异常。
(2) Exception
Exception异常:为JVM虚拟机监管以内的异常情况,既可以被捕获,也可以被解决;Exception异常中又分为Exceptiony异常和RuntimeException异常。
Exception异常:编译异常,该异常要求强制解决,如若不解决,虚拟机报错,不执行后续代码。
RuntimeException异常:运行时异常,不要求强制解决。
//常见异常
1、java.lang.InputMismatchException //输入不匹配异常
2、java.lang.ArithmeticException //算数计算异常
3、java,lang.ArrayIndexOutOfBoundsException //数组越界异常
4、java.lang.NumberFormatException //数字格式异常
5、java.lang.ClassCastException //类型转换异常
6、java.lang.NullPointerException //空指针异常
7、java.lang.OutOfMemoryError:java heap space //初始化内存错误
二、处理方法
1、方法分类
(1) 逻辑程序
出现RuntimeException运行时异常时,优先考虑程序逻辑的方法解决而异常情况。
(2) 异常机制
1、捕获:try…catch
- 捕获异常:java中对异常有正对性的语句进行捕获,可以对出现的异常进行指定方式的处理。捕获异常语法如下:
try{
编写可能会出现异常的代码
}catch(Exception ex){
处理异常的代码
}finally{
释放资源(比如:lock.unlock)
}
- try:该代码块中编写可能产生异常的代码。
- catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。
- finally:有些特定的代码块无论异常是否发生,都需要被执行,在finally代码块中存放的代码都是一定会被执行的。
try{
lock.writeLock().lockInterruptibly();
if (wh.left() > 0) {
cond.await();
} else {
wh.setCount(10);
System.out.println("生产了10件商品...");
cond.signalAll();
}
}catch (Exception ex){
System.err.println(ex.getMessage());
break;
}finally {
lock.writeLock().unlock();
}
2、抛出:throw
- 抛出异常:在编写程序时,我们必须要考虑程序出现问题的情况。比如:在定义方法时,方法需要接受参数。那么当调用方法使用收到的参数时,首先需要对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时徐亚使用抛出异常的方式来告诉调用者。
- 如何抛出异常:
1)创建一个异常对象,封装一些提示信息(信息可以自己编写)
2)将这个异常对象告知调用者,通过throw抛出一个异常对象,将异常对象传递个调用者。
public static void arrayCopy(int[] src,int startPos,int[] dest, int beginIndex,int length)throws Exception{ //声明抛出异常类型:Exception
if(null==src || null==dest){
//抛出异常对象:new NullPointerException
throw new NullPointerException("src or dest null pointer");
}
if(startPos<0 || startPos>src.length){
throw new ArrayIndexOutOfBoundsException("array src index out of bounds:startPos"+startPos);
}
if(beginIndex<0 || beginIndex>dest.length){
throw new ArrayIndexOutOfBoundsException("array dest index out of bounds:beginIndex"+beginIndex);
}
if(src.length-startPos<length || dest.length-beginIndex<length){
throw new ArrayIndexOutOfBoundsException();
}
for (int count=0; count <length ; count++) {
dest[beginIndex+count] = src[startPos+count];
}
}
三、日志记录
1、方法
1、导入jar包:log4j.jar
- 1)先在idea页面中选中右上角Project Structure这个图标
- 2)在Project Structure页面中的左边一列选中Libraries这个选项
- 3 ) 再在Project Structure页面中的中间一列点击“+”号,选择JAVA
- 4)在右边一列找到log4j.jar的目录,将包导入该工程中,导入后在idea的操作页面的左边一列下方的外部资源链接库External Libraries中显示log4j-1.2.17jar,同时在该工程的路径里面会产生一个logs文件夹。
2、拷入配置文件:log4j.properties
- 1) 将我们的log4j.properties文件直接复制粘贴到idea操作页面的src这个目录之下
3、创建类的成员变量:
import org.apache.log4j.Logger;
public class Validator {
private static Logger log = Logger.getLogger(Validator.class);
//log.info(String val); 正常信息记录
//log.warn(String val); 警告信息记录
//log.error(String val); 异常信息记录
public static void test(){
int[] src = {1,3,5,6,7,78,88};
int[] dest = new int[10];
try{
arrayCopy(src,0,dest,1,src.length);
log.info("拷贝成功");
}catch(Exception ex){
log.error(ex.getMessage());
}
for (int i : dest) {
System.out.println(i);
}
}
public static void main(String[] args) {
test();
}
}
当虚拟机运行结束后,反馈的结果会在logs文件里面形成一个log.log文件,里面存储的就是虚拟机运行结果所产生的日志记录。