前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java面试题3:Java异常篇

Java面试题3:Java异常篇

作者头像
程序员洲洲
发布2024-06-06 21:49:41
810
发布2024-06-06 21:49:41
举报
文章被收录于专栏:项目文章
  • 1、finally 块中的代码什么时候被执⾏?
  • 答: 在 Java 语⾔的异常处理中,finally 块的作⽤就是为了保证⽆论出现什么情况,finally 块⾥的代码⼀定会被执⾏。 由于程序执⾏ return 就意味着结束对当前函数的调⽤并跳出这个函数体,因此任何语句要执⾏都只能在 return 前 执⾏(除⾮碰到 exit 函数),因此 finally 块⾥的代码也是在 return 之前执⾏的。 此外,如果 try-finally 或者 catch-finally 中都有 return,那么 finally 块中的 return 将会覆盖别处的 return 语 句,最终返回到调⽤者那⾥的是 finally 中 return 的值。 ————————————————————————————————————————————
  • 2、finally 是不是⼀定会被执⾏到?
  • 答: 不⼀定。下⾯列举两种执⾏不到的情况: (1)当程序进⼊ try 块之前就出现异常时,会直接结束,不会执⾏ finally 块中的代码; (2)当程序在 try 块中强制退出时也不会去执⾏ finally 块中的代码,⽐如在 try 块中执⾏ exit ⽅法。 —————————————————————————————————————————————
  • 3、try-catch-finally 中,如果 catch 中 return 了,finally 还会执⾏ 吗?
  • 答: 会。程序在执⾏到 return 时会⾸先将返回值存储在⼀个指定的位置,其次去执⾏ finally 块,最后再返回。因此, 对基本数据类型,在 finally 块中改变 return 的值没有任何影响,直接覆盖掉;⽽对引⽤类型是有影响的,返回的 是在 finally 对 前⾯ return 语句返回对象的修改值。 ——————————————————————————————————————————————
  • 4、try-catch-finally 中那个部分可以省略?
  • 答: catch 可以省略。try 只适合处理运⾏时异常,try+catch 适合处理运⾏时异常+普通异常。也就是说,如果你只⽤ try 去处理普通异常却不加以 catch 处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必 须⽤ catch 显示声明以便进⼀步处理。⽽运⾏时异常在编译时没有如此规定,所以 catch 可以省略,你加上 catch 编译器也觉得⽆可厚⾮。 ————————————————————————————————————————————————
  • 5、Error 和 Exception 的区别?
  • 答: Error 类和 Exception 类的⽗类都是 Throwable 类。主要区别如下: Error 类: ⼀般是指与虚拟机相关的问题,如:系统崩溃、虚拟机错误、内存空间不⾜、⽅法调⽤栈溢出等。这类 错误将会导致应⽤程序中断,仅靠程序本身⽆法恢复和预防; Exception 类:分为运⾏时异常和受检查的异常。 ——————————————————————————————————————————————————
  • 6、运⾏时异常与受检异常有何异同?
  • 答: 运⾏时异常:如:空指针异常、指定的类找不到、数组越界、⽅法传递参数错误、数据类型转换错误。可以编译通 过,但是⼀运⾏就停⽌了,程序不会⾃⼰处理; 受检查异常:要么⽤ try … catch… 捕获,要么⽤ throws 声明抛出,交给⽗类处理。 ——————————————————————————————————————————————————
  • 7、throw 和 throws 的区别?
  • 答: (1)throw:在⽅法体内部,表示抛出异常,由⽅法体内部的语句处理;throw 是具体向外抛出异常的动作,所 以它抛出的是⼀个异常实例; (2)throws:在⽅法声明后⾯,表示如果抛出异常,由该⽅法的调⽤者来进⾏异常的处理;表示出现异常的可能 性,并不⼀定会发⽣这种异常。 ————————————————————————————————————————————————————
  • 8、常⻅的异常类有哪些?
  • 答: NullPointerException:当应⽤程序试图访问空对象时,则抛出该异常。 SQLException:提供关于数据库访问错误或其他错误信息的异常。 IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 FileNotFoundException:当试图打开指定路径名表示的⽂件失败时,抛出此异常。 IOException:当发⽣某种 I/O 异常时,抛出此异常。此类是失败或中断的 I/O 操作⽣成的异常的通⽤类。 ClassCastException:当试图将对象强制转换为不是实例的⼦类时,抛出该异常。 IllegalArgumentException:抛出的异常表明向⽅法传递了⼀个不合法或不正确的参数。 ————————————————————————————————————————————————————
  • 9、主线程可以捕获到⼦线程的异常吗?
  • 答: 线程设计的理念:“线程的问题应该线程⾃⼰本身来解决,⽽不要委托到外部”。 正常情况下,如果不做特殊的处理,在主线程中是不能够捕获到⼦线程中的异常的。如果想要在主线程中捕获⼦线 程的异常,我们可以⽤如下的⽅式进⾏处理,使⽤ Thread 的静态⽅法
代码语言:javascript
复制
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandle());

——————————————————————————————————————————

  • 10、Java中怎么分异常?
  • 答:
  • 所谓异常是指程序在运行过程中发生的一些不正常事件。(如:除0溢出,数组下标越界,所读取的文件不存在) 异常又可以分为:编译时异常,运行时异常 ————————————————————————————————————————————
  • 11、异常的处理机制有哪几种?
  • 答: 异常捕捉:try…catch…finally,异常抛出:throws。 —————————————————————————————————————————————
  • 12、try catch fifinally,try里有return,finally还执行么?
  • 答: 执行,并且finally的执行早于try里面的return 结论: 1.不管有木有出现异常,finally块中代码都会执行; 2.当try和catch中有return时,finally仍然会执行; 3.finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的; 4.finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。 —————————————————————————————————————————————————
  • 13、 Excption与Error包结构请解释一下。
  • 答: Java可抛出(Throwable)的结构分为三种类型:被检查的异常(CheckedException),运行时异常 (RuntimeException),错误(Error)。 1.运行时异常 定义:RuntimeException及其子类都被称为运行时异常。 特点:Java编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕 获它",还是会编译通过。例如,除数为零时产生的ArithmeticException异常,数组越界时产生的IndexOutOfBoundsException异常,failfast机制产生的ConcurrentModi?cationException异常(java.util包下面的所有的集合类都是快速失败的,“快速失败”也就是fail-fast,它是 Java集合的一种错误检测机制。当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。记住是有可能,而不是一定。 例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的 内容),那么这个时候程序就会抛出ConcurrentModi?cationException 异常,从而产生fail-fast机制,这个错叫并发修改异常。Fail-safe,java.util.concurrent包下面的所有的类都是安全失败的,在遍历过程中,如果已经遍历的数组上的内容变化了,迭代器不会抛出 ConcurrentModi?cationException异常。如果未遍历的数组上的内容发生了变化,则有可能反映到迭代过程中。这就是 ConcurrentHashMap迭代器弱一致的表现。ConcurrentHashMap的弱一致性主要是为了提升效率,是一致性与效率之间的一种权衡。要成为强一致性,就得到处使用锁,甚至是全局锁,这就与Hashtable和同步的HashMap一样了。)等,都属于运行时异常。 常见的五种运行时异常: ClassCastException(类转换异常) IndexOutOfBoundsException(数组越界) NullPointerException(空指针异常) ArrayStoreException(数据存储异常,操作数组是类型不一致) Bu?erOver?owException 2.被检查异常 定义:Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。特点 : Java编译器会检查它。此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。例如,CloneNotSupportedException就属于被 检查异常。当通过clone()接口去克隆一个对象,而该对象对应的类没有实现Cloneable接口,就会抛出CloneNotSupportedException异常。被检查异常通常都是可以恢复的。 如: IOException FileNotFoundException SQLException 被检查的异常适用于那些不是因程序引起的错误情况,比如:读取文件时文件不存在引发的FileNotFoundException 。然而,不被检查的异 常通常都是由于糟糕的编程引起的,比如:在对象引用时没有确保对象非空而引起的 NullPointerException 。 3.错误 定义 : Error类及其子类。 特点 : 和运行时异常一样,编译器也不会对错误进行检查。当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。程序本身无法修复这些错误的。例如,VirtualMachineError就属于错误。出现这种错误会导致程序终止运行。OutOfMemoryError、ThreadDeath。 Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等。 ————————————————————————————————————————————
  • 14、final, finally, finalize的区别。
  • 答: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。 —————————————————————————————————————————————
  • 15、Java中的异常处理机制的简单原理和应用。
  • 答: 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。 ——————————————————————————————————————————
  • 16、编程题:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档