java常见异常范例

java.lang.NullpointerException

    @org.junit.Test
    public void test01() {
        Man man = new Man();
        System.out.println("man's father is : "+man.getFather());

//      1、调用不存在的对象
        System.out.println("man's father age is  : "+man.getFather().getAge());

//      2、不存在的文件夹、文件
        File file = new File("E:\\myFile\\daily_temp\\ss");

       selectFile(file);

    }

    public static void selectFile(File file) {
        File[] files = file.listFiles();
        List<File> list = new ArrayList<File>();
        for (File f : files) {// 空指针异常
            if(!(f.toString().contains("$RECYCLE.BIN"))){
                //每个磁盘都会有$RECYCLE.BIN这个回收站文件夹,这个文件夹读取不到,所以要排除这个文件夹
                if (f.isFile()) {
                    list.add(f);
                } else if (f.isDirectory()) {
//                    递归将该文件夹下的文件夹继续搜索文件
                    selectFile(f);
                }
            }
        }
        for (File fileList : list) {
//            文件名以.pdf结尾的打印出来
            if (fileList.getName().endsWith(".pdf")) {
                System.out.println(fileList.getName());
            }
        }
    }

java.lang.ClassCastException

    @org.junit.Test
    public void test04() {
        Object object = new Object();
        /*当试图将对某个对象强制执行向下转换*/
        Man man = (Man) object;

    }

java.lang.IndexOutOfBoundsException

    @org.junit.Test
    public void test05() {
        int[] i = new int[5];
        //数组下标越界(ArrayIndexOutOfBoundsException)
        System.out.println(i[5]);

        ArrayList<String> list = new ArrayList<String>();
        //下标越界
        System.out.println(list.get(2));

    }

java.lang.ArithmeticException

    @org.junit.Test
    public void test06() {
        //异常生成范例
        int i = 1/0;
    }

java.io.InvalidClassException

    @org.junit.Test
    public void test02() {

        /*Java会默认为每一个类生成一个隐式serialVersionUID,它通过类名,方法名等诸多因素经过计算而得,
        理论上是一一映射的关系,也就是唯一的。可是当类中属性改变后,反序列化过程,将报错*/

//        解决方法:人为的添加一个serialVersionUID

        Man man = new Man();
        man.setAge(18);
        man.setName("xiaofang");
        man.setGender(0);

        String fileName = "E:\\myFile\\daily_temp\\man";
//        先序列化
//        write(man,fileName);

//        反序列化
        Man read = read(fileName);
        System.out.println(read);
    }

    //序列化  写的过程
    public static void write(Serializable s,String fileName){
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(fileName));
            objectOutputStream.writeObject(s);
            objectOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //反序列化 读的过程
    public Man  read(String fileName){
        Object obj=null;
        // 反序列化
        try {
            ObjectInput input = new ObjectInputStream(new FileInputStream(fileName));
            obj = input.readObject();
            input.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (Man)obj;
    }

java.lang.ClassNotFoundException

    @org.junit.Test
    public void test03() {
//        1. 没有正确的导入jar导致。
//
//        2. 项目中引用了多个版本的jar,导致版本冲突,由于版本的升级,可能所使用的方法已经被废弃。
//
//        3. 由于系统中加载web.xml文件的顺序导致,(使用到了spring 的自动注入注解)可能是还没有把spring 正常的加载到内存中,就使用spring的autowrite,导致找不到改类。
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值