共计 1864 个字符,预计需要花费 5 分钟才能阅读完成。
开篇介绍
大家好,我是 Java 最全面试题库
的提裤姐,明天这篇是面试系列的第七篇,次要总结了 JavaSE 中异样类相干面试题,在后续,会沿着第一篇开篇的常识线路始终总结上来,做到日更!如果我能做到百日百更,心愿你也能够跟着百日百刷,一百天养成一个好习惯。
说一下 Java 中的异样体系?
Error 和 Exception 的区别?
Error(谬误):
零碎中的谬误,是在程序编译时呈现的谬误,只能通过批改程序能力修改。个别是指与虚拟机相干的问题,如零碎解体,虚拟机谬误,内存空间有余,办法调用栈溢等。
Exception(异样):
示意程序能够解决的异样,能够捕捉且可能复原。遇到这类异样,应该尽可能解决异样,使程序复原运行,而不应该随便终止异样。
写出你最常见的 5 个 RuntimeException?
- java.lang.NullPointerException 空指针异样;呈现起因:调用了未经初始化的对象或者是不存在的对象。
- java.lang.ClassNotFoundException 指定的类找不到;呈现起因:类的名称和门路加载谬误;通常都是程序
试图通过字符串来加载某个类时可能引发异样。
- java.lang.NumberFormatException 字符串转换为数字异样;呈现起因:字符型数据中蕴含非数字型字符。
- java.lang.IndexOutOfBoundsException 数组角标越界异样,常见于操作数组对象时产生。
- java.lang.IllegalArgumentException 办法传递参数谬误。
- java.lang.ClassCastException 数据类型转换异样。
如何解决异样?
异样的解决形式有两种:
- ⾃⼰解决。
- 向上抛,交给调⽤者解决。
具体的解决形式的抉择准则:
- 本人明确的晓得如何解决的,就要解决掉。
- 不晓得如何解决的,就交给调⽤者解决。
注:异样,不能捕捉了之后什么也不做。或者只是使⽤ e.printStacktrac
try()外面有⼀个 return 语句,那么前面的 finally{}外面的代码会不会被执行?什么时候执行,return 前还是 return 后?
如果 try 中有 return 语句,那么 finally 中的代码还是会执⾏。
因为 return 示意的是要整个办法体返回,所以,finally 中的语句会在 return 之前执⾏。
然而 return 前执行的 finally 块内,对数据的批改成果对于援用类型和值类型会所不同:
// 测试 批改值类型
static int f() {
int ret = 0;
try {return ret; // 返回 0,finally 内的批改成果不起作用} finally {
ret++;
System.out.println("finally 执行");
}
}
// 测试 批改援用类型
static int[] f2(){int[] ret = new int[]{0};
try {return ret; // 返回 [1],finally 内的批改成果起了作用
} finally {ret[0]++;
System.out.println("finally 执行");
}
调用上面的办法,失去的返回值是什么?
public int getNum() {
try {
int a = 1 / 0;
return 1;
} catch (Exception e) {return 2;} finally {return 3;}
}
返回值为 3。
代码在走到第 3 行的时候遇到了一个 MathException,这时第四行的代码就不会执行了,代码间接跳转到 catch 语句中,走到第 6 行的时候,异样机制有这么一个准则如果在 catch 中遇到了 return 或者异样等能使该函数终止的话那么有 finally 就必须先执行完 finally 代码块外面的代码而后再返回值。因而代码又跳到第 8 行,惋惜第 8 行是一个 return 语句,那么这个时候办法就完结了,因而第 6 行的返回后果就无奈被真正返回。如果 finally 仅仅是解决了一个开释资源的操作,那么该道题最终返回的后果就是 2。因而下面返回值是 3。
throw 和 throws 的区别?
throw:
- throw 语句用在办法体内,示意抛出异样,由办法体内的语句解决。
- throw 是具体向外抛出异样的动作,所以它抛出的是一个异样实例,执行 throw 肯定是抛出了某种异样。
throws:
- throws 语句是用在办法申明前面,示意如果抛出异样,由该办法的调用者来进行异样的解决。
- throws 次要是申明这个办法会抛出某种类型的异样,让它的使用者要晓得须要捕捉的异样的类型。
- throws 示意出现异常的一种可能性,并不一定会产生这种异样。