JAVA OOP 第三课

一、异常

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文件,里面存储的就是虚拟机运行结果所产生的日志记录。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值