当前位置: 首页 > 后端技术 > Java

面试必问:Javacheckedexceptions和uncheckedexceptions有什么区别?不要误会我的意思,..

时间:2023-04-02 02:13:50 Java

来源:www.iteye.com/blog/yangshen998-1311682}publicstaticvoidmain(){ExceptionTypeTestett=newExceptionTypeTest();ett.doSomething();}}问题1:上面的程序可以编译吗?并解释原因。答:可以编译通过。分析:按照常理,定义doSomething方法就是定义ArithmeticException异常,在main方法中调用。然后你应该继续扔或接住它。但是ArithmeticException是继承自RuntimeException的运行时异常。Java中的异常分为两类:已检查异常(checkedexception)和未检查异常(uncheckedexception)。未经检查的异常也称为RuntimeException(运行时异常)。对于运行时异常,java编译器不要求你把它捕获或者必须继续抛出,但是对于checkedexception(检查异常)要求你在方法中要么捕获要么继续抛出。问题2:把ArithmeticException改成IOException可以编译上述程序吗?并解释原因。答:无法编译。分析:IOExceptionextendsException属于checkedexception,必须处理,或者必须捕获,或者必须抛出。总结:java中有两种异常:已检查异常(checkedexception)和未检查异常(uncheckedexception)。未经检查的异常也称为RuntimeException(运行时异常)。几种未检查异常(uncheckedexception)处理方式:捕获并继续抛出未处理的检查异常(checkedexception,除了RuntimeException,其他异常均为checkedexceptions)几种处理方式:继续抛出,否定方法,可以一直抛到java虚拟机Handlewithtry...catch来捕获注意checkedexception必须处理,或者必须捕获或者必须抛出异常处理(Exception)1.异常:程序重新运行过程中发生的异常事件,这将中断指令过程的正常运行。程序运行时出现异常,编译时出现的问题称为语法错误。2、异常处理机制:1)当程序重新运行过程中发生异常时,JVM自动创建一个该类型的异常对象。同时将异常对象交给运行时系统。(Throwinganexception)2)runtime系统收到异常对象时,会在产生异常的代码附近寻找相应的处理方法。3)异常处理有两种方式:catch和handle:显示在异常代码附近,用try/catch处理(不合理)。处理异常。查看异常发生的方法是否有向上声明异常,如果有向上声明,向上级查询处理语句。如果没有向上声明,JVM会中断程序的运行并进行处理。使用throws向外声明(合理的处理方式)3、异常分类:java.lang.ThrowableError错误:JVM内部严重的问题。无法恢复。程序员不必处理它。例外:常见问题。通过合理的处理,程序也可以回到正常的执行流程。需要程序员来处理它。RuntimeException:也叫未检查异常。这种异常对于程序员来说是一个逻辑问题。应该承担责任。Java编译器不强制要求。也就是说,这种异常在程序中可以处理也可以不处理。-Non-RuntimeException:也叫检查异常(checkedexception)。这种异常是由一些外部偶然因素引起的。Java编译器强制执行处理。换句话说,程序必须处理此类异常。4.常见异常:1)Non-checked:NullPointerException、ClassCastException、ArrayIndexsOutOfBoundsException、ArithmeticException(算术异常,0除外溢出)2)Checked:Exception、FileNotFoundException、IOException、SQLException。5.异常处理的两种方式:1).用try/catch显示处理(不合理)try{//可能发生异常的代码段;}catch(异常类型1变量名){//处理异常的specifiedtype//处理该类型代码段的异常;e.printStackTrace();}catch(){}[finally{//无论是否发生异常都必须执行的代码段;//常用于清理资源}]2).向上声明:使用throws关键字,外部声明(合理的处理方法)声明了该方法可能抛出的异常列表。...方法名(参数列表)throwsExceptiontype1,Exceptiontype2向上语句告诉这个方法的调用者,使用这个方法时应该处理这些异常。6.手动抛出异常:当程序逻辑不符合预期时,中止下面代码的执行。在方法的代码部分,可以使用throw关键字手动抛出异常。注意:如果手动抛出checkedexception,那么必须处理这个方法(异常要向上声明);如果是手动抛出unchecked异常,可以处理也可以不处理。7、自定义异常:当需要一些与特定业务相关的异常信息类时。Exception可以被继承来定义一个checkedexception。您还可以从RuntimeException或其子类继承来定义未经检查的异常。8、异常总结:一张图,两种处理方法。9、异常做法:观察抛出异常的名称和行号非常重要。知道如何处理的异常就应该捕获并处理,不知道如何处理的异常就应该传递下去。最小化try语句块的大小。for(inti=1;i<=1000;i++){try{...}catch(...)}不合理尽量减少try-catch语句的嵌套。在catch块代码段中,应该打印异常的stacktrace信息,以方便调试。使用throws关键字声明方法可能抛出的异常。throws可以声明该方法可能会抛出一个或多个异常。异常以','分隔。如果声明的可能抛出的异常未经检查,则此方法的调用者可能会也可能不会处理它。如果检查了声明的可能抛出的异常,方法的调用者必须处理它。使用throw关键字手动抛出异常。如果手动抛出的异常是checkedexception,则必须通过两种方式处理:用try/catch显示(不合理)和用throws声明(合理的处理方法)应该捕获并处理那些你知道如何处理的异常,以及传递那些你不知道如何处理的异常。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!