1.errors和exception的区别是什么?
二者都是JAVA异常处理的重要子类,各自都包含大量子类
区别:
exception:程序本身可以处理的异常,可以通过catch来进行捕获,遇到这种错误,应对其进行处理,使应用程序可以继续正常运行;exception又可以分为运行时异常和非运行时异常
errors:属于程序无法处理的错误,不可以catch进行捕获
2.throw和throws的区别是什么?
1.throw 关键字用于在方法内部抛出异常。它可以抛出一个已经定义好的异常对象。
throws 关键字用于在方法声明中声明可能抛出的异常。如果一个方法可能抛出异常,但是在方法内部没有使用 throw 关键字抛出,那么在方法声明中使用 throws 关键字声明可能抛出的异常
2.throws可以单独使用,但throw不能;
3.运行时异常和非运行时异常区别是什么?
是否强制要求调用者必须处理此异常,是的话就是非运行时异常
4.try-catch-finally中那个部分可以省略?
catch;
try只适合处理运行时异常,try-catch适合处理运行时异常+普通异常,也就是说如果你用try去处理普通异常却不加以catch处理,编译时不通过的,因为是编译器的硬性规定,普通异常如果选择捕获,则必须用catch显示声明以便于进一步处理,而运行时异常在编译时没有如此规定,所以catch可以省略
5.jvm是如何处理异常的?
Java 字节码中,每个方法对应一个异常表。当程序触发异常时,Java
虚拟机将查找异常表,并依此决定需要将控制流转移至哪个异常处理器之中。Java 代码中的 catch 代码块和 finally
代码块都会生成异常表条目。
6.try-catch-finally中,如果catch中return了,finally还会执行吗?
会,在return前执行
1.finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。
2.如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。
7.java常见异常?
java.lang StackOverflowError:堆栈溢出错误
java.lang.OutOfMemoryError:内存不足错误
java.lang.InstantiationError:实例化错误
java.lang.ArrayIndexOutOfBoundsException: 数组索引越界异常
java.lang.NullPointerException:空指针异常