java runtimeexcepion_Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch...

今天在做一个将String转换为Integer的功能时,发现Integer.parseInte()会抛出异常NumberFormatException.

函数Integer.parseInt(String)定义

1 public static intparseInt(String s)2 throws NumberFormatException

测试代码:

1 public classTest2 {3 public static voidmain(String[] args)4 {5 Integer num = Integer.parseInt("ff");6 System.out.println(num);7 }8 }

我们知道,所有的会抛出异常的地方都需要try catch 捕获,或者使用throws继续向上抛出。那么为什么上面的代码会通过编译呢?原来Java里面有Exception和RuntimeException这两个类。RuntimeException是Excetpion的子类。如果一个某一个异常是RuntimeException的子类而不是Exception的直接子类,那么我们可以不用显示的try catch捕获,而是在发生异常的时候抛给JVM捕获。当然我们也可以写上try catch来处理,不交给JVM。如下面的代码:

1 public classTest2 {3 public static voidmain(String[] args)4 {5 try

6 {7 Integer num = Integer.parseInt("ff");8 System.out.println(num);9 }catch(Exception e)10 {11 System.out.println("程序出现了异常!");12 }13 }14 }

关于Java中的异常,还有一些常见问题,现在罗列在下面:

1) Exception类关系

Throwable是所有异常的父类。如常见的:NullPointerException和ClassNotFoundException

f9b358aac2a1deb6ca3d4811e09b811b.png

64c8f79249d75d7a232b87cb4cf88dae.png

2)Error和Exception

Throwable下有两个子类,一个是Exception,另一个是Error。那么Error和Exception有什么区别呢?

Error:是指JVM错误。这个是我们自己写程序中不会遇到的,是JVM运行过程中自己抛出的异常。这个不需要程序员过多的关注。

Exception:所有用户可以处理的异常的父类。也就是说,我们写代码的过程中可能会遇到的所有的异常的父类就是Exception

3)Exception和RuntimeException

这就是本文一开始讨论的话题。Exception是RuntimeException的父类。程序员在写代码的时候,如果遇到抛出的是RuntimeException,则可以根据情况选择是否用try catch或者throws 对异常进行处理。如果遇到的异常是Exception子类,但又不是RuntimeException子类,那么程序中必须显示的try catch或者throws 进行处理。

5ac048401bb9717716832cea7f0fbb86.png

4)throw与throws的区别

throw指的是我们程序遇到异常的时候,在当前上下文中不处理。说得更狭隘一点,比如我们在一个函数中,如果有异常,我们直接用throws抛出,交给函数调用处进行处理,而不在本函数中处理。

throws指的是如果函数中有用throw抛出异常,需要在函数声明的末尾加上throws语句,表明当前函数会抛出异常,从而通知函数的调用出进行显式处理。throws和throw是配合使用的。如下面的代码:

1 public classTest2 {3 public static voidmain(String[] args)4 {5 doSomething();6 }7

8 public static void doSomething()throwsException9 {10 Integer num = Integer.parseInt("ff");11 System.out.println(num);12 }13 }

上面的代码无法通过编译,因为在doSomthing()里面抛出了异常,需要在Main函数中处理。Main函数要么加上try catch 语句,要么将此异常继续向上抛出,交给JVM处理。但一般不这么做。我们总希望程序能正确的运行并退出。下面是正确的处理异常代码:

1 public classTest2 {3 public static voidmain(String[] args)4 {5 try

6 {7 doSomething();8 }9 catch(Exception e)10 {11 System.out.println("doSomething函数出现了异常!异常信息如下:");12 e.printStackTrace();13 }14 System.out.println("Main函数正常退出!");15 }16

17 public static void doSomething()throwsException18 {19 Integer num = Integer.parseInt("ff");20 System.out.println(num);21 }22 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值