核心原因:语言设计者觉得这样设计是最好的,O(∩_∩)O~
至于为什么python不是这么设计的,C#不是这么设计的,核心原因也是他们的语言设计者觉得不用catch异常是最好的,O(∩_∩)O~
那到底是显式去处理更好,还是不用显式去处理更好呢?
我来谈一下我的个人见解:
首先我们来定义什么叫异常,java中设计了两种类型的异常:checked exception和unchecked exception(即runtimeException),checked exception是需要显式捕获的,他向上层代码传递了一些信息,比如你校验用户登陆的时候,如果用户名在数据库中查不到,你可以抛出UserNotFoundException(定义为checked exception)来给上层代码传递这个User not found的信息,比如密码不对,可以创建一个PasswordErrorException。
再来说说RuntimeException,这种异常不需要显式捕获,比如IllegalArgumentException(参数不合法),DivideZeroException(除以0的异常),这种异常更像是一个错误的调用方法导致的,它在给上层代码传递的信息是:你用了一个很不对的方法在调用我,这是错误的,后果很严重哦,你如果没有防范措施(没有显式捕获),我可是会让终止这次方法调用链哦
至于为什么python不是这么设计的,C#不是这么设计的,核心原因也是他们的语言设计者觉得不用catch异常是最好的,O(∩_∩)O~
那到底是显式去处理更好,还是不用显式去处理更好呢?
我来谈一下我的个人见解:
首先我们来定义什么叫异常,java中设计了两种类型的异常:checked exception和unchecked exception(即runtimeException),checked exception是需要显式捕获的,他向上层代码传递了一些信息,比如你校验用户登陆的时候,如果用户名在数据库中查不到,你可以抛出UserNotFoundException(定义为checked exception)来给上层代码传递这个User not found的信息,比如密码不对,可以创建一个PasswordErrorException。
再来说说RuntimeException,这种异常不需要显式捕获,比如IllegalArgumentException(参数不合法),DivideZeroException(除以0的异常),这种异常更像是一个错误的调用方法导致的,它在给上层代码传递的信息是:你用了一个很不对的方法在调用我,这是错误的,后果很严重哦,你如果没有防范措施(没有显式捕获),我可是会让终止这次方法调用链哦
对异常这个概念大家本身就没有一个统一的认识,比如python的设计者觉得:往上层代码传递信息根本不用checked exception,直接用多个方法返回值就可以了,所以他就只设计了第二种异常