您的位置 首页 > 德语词汇

exception是什么意思,Exception异常

大家好,感谢邀请,今天来为大家分享一下exception是什么意思的问题,以及和Exception异常的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

exception是什么意思,Exception异常

Throwable类是Java语言中所有错误或异常的超类。当对象是此类(或其子类之一)的实例时,才能通过Java虚拟机或者Javathrow语句抛出。

含义:异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。(开发过程中的语法错误和逻辑错误不是异常)

Error:是Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题。是无法处理的异常,比如OutOfMemoryError,一般发生这种异常,JVM会选择终止程序。因此我们编写程序时不需要关心这类异常。

Exception异常主要分为两类

【注】检查异常指:编译器在编译期间要求必须得到处理的那些异常,你必须在编译期处理了。最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

异常的处理方式:

try...catch关键字:使用try和catch关键字可以捕获异常。try/catch代码块放在异常可能发生的地方。真正的将异常给处理掉了

Catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try后面的catch块就会被检查。如果发生的异常包含在catch块中,异常会被传递到该catch块,这和传递一个参数到方法是一样。

一个try代码块后面跟随多个catch代码块的情况就叫多重捕获。

//try...catch的语法如下\ntry{\n//程序代码\n}catch(异常类型1异常的变量名1){\n//程序代码\n}catch(异常类型2异常的变量名2){\n//程序代码\n}catch(异常类型2异常的变量名2){\n//程序代码\n}\ntry{\n//Stringline=null;\n//Stringline="";\nStringline="abc";\n//当JVM执行程序出现了某个异常时就会实例化这个异常并将其抛出\n//如果该异常没有被异常处理机制控制,则JVM会将异常隐式抛出当方法外(这里是main方法外)\nSystem.out.println(line.length());\nSystem.out.println(line.charAt(0));\nSystem.out.println(Integer.parseInt(line));\n//若try语句块中某句话出错了,则剩下的代码都不会执行!\nSystem.out.println("!!!!!!!!!!!!!!!!");\n}catch(NullPointerExceptione){\nSystem.out.println("出现了空指针!");\n//catch可以定义多个,当try中不同的异常有不同处理办法时可分开捕获并处理\n}catch(StringIndexOutOfBoundsExceptione){\nSystem.out.println("出现了下标越界!");\n}\n\n//若某些异常的处理方式相同时,可以合并在一个catch来处理\ntry{\nStringline="abc";\n//当JVM执行程序出现了某个异常时就会实例化这个异常并将其抛出\n//如果该异常没有被异常处理机制控制,则JVM会将异常隐式抛出当方法外(这里是main方法外)\nSystem.out.println(line.length());\nSystem.out.println(line.charAt(0));\nSystem.out.println(Integer.parseInt(line));\n//若try语句块中某句话出错了,则剩下的代码都不会执行!\nSystem.out.println("!!!!!!!!!!!!!!!!");\n}catch(NullPointerException|StringIndexOutOfBoundsExceptione){\n\tSystem.out.println("出现了空指针或下标越界并处理了!");\n//可以在下面catch超类异常来捕获并处理这一类异常。\n}catch(Exceptione){\n\tSystem.out.println("反正就是出了个错");\n}

return:当代码中出现return时,一定是finally语句块执行完成之后,才会去执行相应的return代码。无论这条return语句放在什么位置。

finally关键字:无论是否发生异常,finally代码块中的代码总会被执行。在finally代码块中,可以运行清理类型等收尾善后性质的语句。真正的将异常给处理掉了

//try...catch...finally的语法如下\ntry{\n//程序代码\n}catch(异常类型1异常的变量名1){\n//程序代码\n}catch(异常类型2异常的变量名2){\n//程序代码\n}finally{\n//程序代码\n}\n//不管try里面是否异常,都会执行finally中的代码块\ntry{\nStringline=null;\nSystem.out.println(line.length());\nreturn;//----------------------上面return执行流程图很好的解释了\n}catch(Exceptione){\nSystem.out.println("出错了!");\n}finally{\nSystem.out.println("finally中的代码执行了!");\n}

自动关闭特性,JDK7之后,java提供了一个新的特性:自动关闭。旨在IO操作中可以更简洁的使用异常处理机制完成最后的close操作。【注意】语法中可在try的"()"中定义的并初始化的对象必须实现了java.io.AutoCloseable接口,否则编译不通过.

//自动关闭语法:\ntry(\n\t定义需要在finally中调用close()方法关闭的对象.\n){\nIO操作\n}catch(XXXExceptione){\n...\n}\n//下面代码是编译器认可的,而不是虚拟机。\n//编译器在编译上述代码后会在编译后的class文件中改回原本的写法\ntry(\n\t\tFileOutputStreamfos=newFileOutputStream("fos.dat");\n){\n\tfos.write(1);\n}catch(IOExceptione){\n\te.printStackTrace();//向控制台输出当前异常的错误信息\n}

throws和thow关键字:如果一个方法没有捕获一个检查性异常,那么该方法必须使用throws关键字来声明。throws关键字放在方法签名的尾部。也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

【注】throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由方法去处理异常,真正的处理异常由此方法的上层调用处理。

throw通常下面两种情况我们主动对外抛出异常:throw关键字的一个非常重要的作用就是异常类型的转换.

throws当一个方法中使用throw抛出一个非RuntimeException的异常时,就要在该方法上使用throws声明这个异常的抛出。此时调用该方法的代码就必须处理这个异常,否则编译不通过。允许throws后面跟着多个异常类型;处理手段有下面两种方式:

publicclassPerson{\nprivateintage;\npublicintgetAge(){\nreturnage;\n}\n//当一个方法使用throws声明异常抛出时,调用此方法的代码片段就必须处理这个异常\npublicvoidsetAge(intage)throwsException{\nif(age<0||age>100){\n//使用throw对外抛出一个异常\n//thrownewRuntimeException("年龄不合法!");\n//除了RuntimeException之外,抛出什么异常就要在方法上声明throws什么异常\nthrownewException("年龄不合法!");\n}\nthis.age=age;\n}\n}\n//【注意】永远不应当在main方法上使用throws!!\ntry{\nPersonp=newPerson();\n/*\n当我们调用一个含有throws声明异常抛出的方法时,编译器要求\n我们必须添加处理异常的手段,否则编译不通过.而处理手段有两种\n1:使用try-catch捕获并处理异常\n2:在当前方法上继续使用throws声明该异常的抛出\n具体用哪种取决于异常处理的责任问题\n*/\np.setAge(100000);//典型的符合语法,但是不符合业务逻辑要求\nSystem.out.println("此人年龄:"+p.getAge()+"岁");\n}catch(Exceptione){\ne.printStackTrace();\n}

子类重写超类含有throws声明异常抛出的方法时对throws的几种特殊的重写规则

publicclassThrowsDemo{\npublicvoiddosome()throwsIOException,AWTException{}\n}\nclassSubClassextendsThrowsDemo{\n//publicvoiddosome()throwsIOException,AWTException{}\n//可以不再抛出任何异常\n//publicvoiddosome(){}\n//可以仅抛出部分异常\n//publicvoiddosome()throwsIOException{}\n//可以抛出超类方法抛出异常的子类型异常\n//publicvoiddosome()throwsFileNotFoundException{}\n//不允许抛出额外异常(超类方法中没有的,并且没有继承关系的异常)\n//publicvoiddosome()throwsSQLException{}\n//不可以抛出超类方法抛出异常的超类型异常\n//publicvoiddosome()throwsException{}\n}

可检测异常,非检测异常

try{\nStringstr="abc";\nSystem.out.println(Integer.parseInt(str));\n}catch(NumberFormatExceptione){\n//异常最常用的方法,用于将当前错误信息输出到控制台\ne.printStackTrace();\n//获取错误消息.记录日志的时候或提示给用户可以使用它\nStringmessage=e.getMessage();\nSystem.out.println(message);\n\n}

自定义异常类

//自定义异常类继承Exception并且重写里面的构造方法\npublicclassIllegalAgeExceptionextendsException{\npublicIllegalAgeException(){\n}\npublicIllegalAgeException(Stringmessage){\nsuper(message);\n}\npublicIllegalAgeException(Stringmessage,Throwablecause){\nsuper(message,cause);\n}\npublicIllegalAgeException(Throwablecause){\nsuper(cause);\n}\npublicIllegalAgeException(Stringmessage,Throwablecause,booleanenableSuppression,booleanwritableStackTrace){\nsuper(message,cause,enableSuppression,writableStackTrace);\n}\n}

【总结】异常处理机制是用来处理那些可能存在的异常,但是无法通过修改逻辑完全规避的场景。而如果通过修改逻辑可以规避的异常是bug,不应当用异常处理机制在运行期间解决!应当在编码时及时修正。

学习记录,如有侵权请联系删除。

关于exception是什么意思和Exception异常的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023