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方法
在这里插入代码片