1、在Java中异常分为哪一类?
编译时的异常
运行时异常
2、异常的处理机制有几种?
异常捕捉: try…catch…finally,异常慢速: throws。
3、如何定制例外
继承异常类。 通常是RumtimeException或Exception
4、try catch fifinally,try中有返回,finally是否仍要执行?
已执行,finally的执行比try中的return快
结论:
1 .即使有木有异常,也执行finally块中的代码;
2 .如果try和catch中存在返回,则finally仍将运行;
3.finally在return之后的表达式运算之后执行(此时,首先保存返回的值,而不是返回运算后的值)。 不管管finally的代码如何,返回的值都不会改变。 kldl是以前保存的值。 )
4.finally最好不要包含返回。 否则,程序将提前关闭,返回值不是存储在try或catch中的返回值。
5、Excption和错误封装结构
Java可抛出(Throwable )的结构分为三类:检查的异常(CheckedException )、运行时异常(RuntimeException )和错误(Error )。
1 .运行中的异常
定义:运行时执行及其子类称为运行时异常。
特点:Java编译器不检查它。 也就是说,如果程序可能发生这种异常,则编译将通过,只要它是“未在throws声明中抛出”还是“未在try-catch语句中捕获”。 例如,除数为零时发生的ArithmeticException异常、数组越界时发生的IndexOutOfBoundsException异常、故障快速机制引起的ConcurrentModi? cationException异常(java.util包下的所有集合类都将快速失败。 “快速失败”是故障快速,是Java集合的错误检测机制。 如果多个线程执行结构性更改集合的操作,可能会发生故障快速机制。 请记住有可能。 不是一定的。
例如,假设有两个线程:线程1和线程2,线程1通过迭代器遍历集合a中的元素。 假设有一次线程2修改了集合a的结构。 不是简单地修改集合元素的内容,而是结构上的修改。 此时,程序会抛出ConcurrentModi吗? cationException异常导致故障快速机制。 该错误被称为同时修正异常。 故障安全,java.util.concurrent包下的所有类安全失败。 如果在遍历过程中,遍历的数组的内容发生了变化,迭代器是否会抛出ConcurrentModi? cationException异常。 如果未遍历数组的内容发生更改,则可能会反映在迭代过程中。 这就是
ConcurrentHashMap迭代的弱一致表示。 ConcurrentHashMap的弱一致性主要是为了提高效率,是一致性与效率的权衡。 要实现强一致性,必须像使用Hashtable或同步的HashMap一样使用锁定,甚至是全局锁定。 )等,属于执行时异常。
常见的5个运行时异常:
() ) ) )。
IndexOutOfBoundsException ((数组越界) ) ) ) ) ) ) ) )。
(空指针异常) )
ArrayStoreException (数据存储异常,操作数组类型不匹配) )。
卜? 伊娃? owException
2 .检查的异常
定义:Exception类本身以及Exception子类中除“运行时异常”以外的所有子类都是受检异常。 特征: Java编译器会检查它。 这些异常无法在throws中声明并抛出、在try-catch中捕获或编译。 例如,CloneNotSupportedException是被检查异常。 clone ) )如果通过接口克隆对象,并且与该对象对应的类没有实现Cloneable接口,则会抛出CloneNotSupportedException异常。 检查的异常通常可以恢复。
例如:
IOException
文件不基础执行
SQLException
如果不是由程序引起的错误(例如,由于读取文件时文件不存在而导致的FileNotFoundException ),则会应用检查的异常。 但是,未检查的异常通常是由较差的编程引起的,如NullPointerException,这是由于引用对象时不保证对象不为空而引起的。
3 .错误
定义:错误类及其子类。
与特征:运行时异常一样,编译器也不检查错误。 资源不足、约束失败或其他程序无法继续运行
生时,就产生错误。程序本身无法修复这些错误的。例如,VirtualMachineError就属于错误。出现这种错误会导致程序终止运行。OutOfMemoryError、ThreadDeath。Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等
6、Thow与thorws区别
位置不同
throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象。
功能不同
throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;throw 抛出具体的问题对象,执行到 throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时,下面不要定义其他语句,因为执行不到。
throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行 throw 则一定抛出了某种异常对象。
两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
7、Error与Exception区别?
Error和Exception都是java错误处理机制的一部分,都继承了Throwable类。
Exception表示的异常,异常可以通过程序来捕捉,或者优化程序来避免。
Error表示的是系统错误,不能通过程序来进行错误处理。
8、error和exception有什么区别
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
标签:面试题,Java,抛出,程序,try,finally,含答案,异常
来源: https://blog.51cto.com/14409100/2491547
版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。