Java中有自有的异常,例如,NullPointerException,ArithematicException,NumberFomatException,IndexOutOfBoundsException,OutOfMemoryException等等,这些事Java工程师定义的uncheckedException异常,是比较常见的异常,是运行时异常,同时也有checkedException这一类是编译时异常,是需要你在运行之前就需要处理的异常,例如,FileNotFoundException, IOException, SQLException,我们常见的处理方法是使用throws关键字和使用try{}catch(){}的方法,具体如何使用我们在下面讲解,但是由于业务多种多样,这些异常不可能涵盖每一种情况,这就需要企业自定义异常,Java同时也支持用户自定义异常,而自定义异常需要将创建的类名继承Exception关键字,这里我们默认是定义编译时异常,如果是想自定义运行时异常,则需要去实现RuntimeException,而大多数的业务的去定义编译时异常,下面是我自定义的一个异常,如图
自定义编译时异常一般是通过使用有参构造方法去调用父类的有参构造方法,父类有参构造方法(Exception),再去调用最终级的Throwable类,我们可以通过去观察FileNotFoundException是否是这种流程,如图
情况确实如此,无论是在Java自带异常还是,用户自定义异常,他们都是去掉用父类有参或者无参构造方法,异常这种一层一层的去调用父类构造方法,是异常发生的基本流程,最终干实事的是最终类Throwable,所以上述的我的自定义的异常是符合异常的基本规范的,最后的是如何去使用自定义的编译时异常去规范我们的程序呢,下面是我对异常的使用,如图
下面时控制台输入,如图
对于一些业务,我们不允许出现年龄小于零的情况,就可以使用这种自定义的编译时异常去规范,也可以起到提醒是效果,可以注意到,我在上面用到了两个关键字一个是throws,一个是throw,前者是出现在方法标签上面是用类抛异常类的,这些异常类是throw所抛的异常类,而后者是用来抛异常类对象的,这异常类的构造方法,我传参为"年龄不得为零",当异常抛给了调用者,调用者再次去抛给main()方法,mian()方法再次将异常抛给JVM,JVM最终会终止程序,这也就是为什么后面的"java"并没有在控制台上输出,然后在控制台上打印出栈信息,可以看到上面有"年龄不得为零"的字符串,我们可以发现如果出现了异常,那么程序就会终止,如果后面还有业务的话,这显然对于一个程序的运行是不友好的,Java中还提供了一种方法也就是上面谈到的try{}catch(){}方法,这种方法可以将异常给抓住,自行解决而不传给JVM,这就大大的提高了程序的效率,下面是修改后的代码,如图
下面是控制台输出
我们可以开到上面可以将"java"字符串打印出来,这就以为者异常并没有抛给JVM而是自行解决,在控制台上打印出栈信息,但是,我们有时使用并不需要打印完全的栈信息,我们就只需要"年龄不得为零"这一个信息,这就需要我们去调用另一个方法,getMessage(),这个方法是属于最终类Throwable的,如图
下面是他的具体用法,如图
下面是控制台输出,如图
文章来源:https://www.toymoban.com/news/detail-855909.html
这样看是不是舒服多了,自定义编译时异常的功能用处广泛,应用的方向广泛,也体现Java高度面向对象的包容性。文章来源地址https://www.toymoban.com/news/detail-855909.html
到了这里,关于如何自定义异常Java的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!