Bootstrap

Java题集练习4

Java题集练习4

1 异常有什么用?

用来找到代码中产生的错误 防止运行出错

2 异常在java中以什么形式存在?

异常在java中以类的形式存在,分为运行时异常和编译期异常,他们都在类Exception中

3 异常是否可以自定义?如何自定义异常?

异常是可以进行自定义的,可以使用through关键字来自定义异常

4 三种处理方式 五个关键字如何使用?

第一种处理方式

可以通过throws关键字在定义方法时抛出异常,代码如下
public class ExceptionExample {
    //定义一个遍历数组方法,可能会出现数组下标越界异常
    //我们使用throws关键字来抛出这个异常
    public static void select(int[] ints) throws ArrayIndexOutOfBoundsException{
        for (int i :
                ints) {
            System.out.print(i);
            if (i != ints[ints.length - 1]){
                System.out.print(" ");
            }
        }
    }

    public static void main(String[] args) {
        int[] ints = {1,2,3,4,5,6};
        select(ints);
    }
}

第二种处理方式

我们可以使用try/catch语句块将可能会产生异常的语句写进去,来防止发生异常时代码无法运行
public class ExceptionExample {
    //定义一个遍历数组方法,可能会出现数组下标越界异常
    public static void select(int[] ints){
        //将可能会发生数组越界异常的语句写进try/catch语句块内
        try {
            for (int i :
                    ints) {
                System.out.print(i);
                if (i != ints[ints.length - 1]){
                    System.out.print(" ");
                }
            }
        }
        //catch用来抛出异常
        catch (ArrayIndexOutOfBoundsException o){
            System.out.println("数组下标越界异常");
            o.printStackTrace();
        }
    }

    public static void main(String[] args) {
        int[] ints = {1,2,3,4,5,6};
        select(ints);
    }
}

第三种处理方式

我们可以在具体什么情况下会发生异常时使用throw关键字来抛出异常,也会防止代码发生异常无法运行
public class ExceptionExample {
    //定义一个遍历数组查询某个元素方法,可能会出现数组下标越界异常
    public static void select(int[] ints,int index){
        int var = 0;
        //如果我们要查询的下标大于数组的长度,就使用throw抛出异常
        if (index > ints.length - 1){
            throw new ArrayIndexOutOfBoundsException();
        }
        for (int i = 0;i < index;i++){
            if (i == index - 1){
                var = ints[i];
            }
        }
    }

    public static void main(String[] args) {
        int[] ints = {1,2,3,4,5,6};
        select(ints,7);
    }
}

五个关键字应该如何使用

首先我们要了解这五个关键字是什么,它们分别是try,catch,finally,throw,throws

在这里插入图片描述

上面这张图诠释了他们各自的使用场所及功能

5 error和exception的差别

单从英文意思上来讲,error表示为错误,exception表示为异常。错误时不可逆转的,而异常是可以被规避的。

从java语言中来说,Error和Exception类都是Throwable的子类,只有Throwable类的实例才可以被抛出或者被捕获,他是异常处理机制的基本类型

1 Exception是指在程序正常运行中可以预料的意外情况,可以被捕获并进行相应的处理

2 Error是指正常情况下不大可能出现的情况,绝大部分的Error都会岛主程序出现非正常情况,不可被修复,常见的OutOfMemoryError就是Error的子类

6 两种异常都是什么,都什么时候用

Exception分为可检查异常和不可检查异常,可检查异常在源代码里必须被显示捕获,所以也叫编译时异常;不可检查异常又叫运行时异常,比如NullPointerException空指针异常和ArrayIndexOutOfBoundsException数组下标越界异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求

7 举例五个以上检查异常

检查异常常见的有:
  • ClassNotFoundException 找不到具有指定名称的类的定义异常

  • DataFormatException 数据格式异常

  • IOException 输入输出异常

  • SQLException 提供有关数据库访问错误或其他错误信息的异常

  • FileNotFoundException 当试图打开指定路径名表示的文件失败异常

  • EOFException 当输入过程中意外到达文件或流末尾时异常

8 final,finally,finalize差别

三者从使用方式和作用来看没有任何共同点,只是长得相似容易混淆

final

  • final修饰的类没有子类,即不能被继承

  • final修饰的方法不能被重写

  • final修饰的属性值不能被改变

finally

  • finally用来抛出异常,通常与try/catch语句块搭配使用,他的代码块内用于写一些无论是否发生异常都会执行的语句块,通常用于一些流的关闭

finalize

  • finalize方法用于垃圾回收,一般情况下不需要我们去实现finalize,当对象被回收的时候需要释放一些资源,比如socket链接,在对象初始化时创建,整个生命周期内有效,那么需要实现finalize方法,关闭这个链接;但是当调用finalize方法后,并不意味着GC会里立即回收该对象,所以有可能真正调用的时候,对象又不需要回收了,然后到了真正要回收的时候,因为之前调用过一次,这次就不会调用了,会产生问题,所以不推荐使用finalize方法
在这里插入代码片
;