浅谈Java异常01

1:什么是异常

    异常就是Java程序执行之后在执行期遇到的错误,遇到异常时候我们首先要做的是什么,首先我们要做的是看异常的类型以及出现异常的代码块,一般来说,如果是在程序运行时期出现的异常很容易修复,看下异常类型就大概知道在哪里出现的错误

2:我们应该怎么处理异常

    首先我们来说如果不处理异常会发发生什么事情,如果我们任由一个异常发生而不去处理他的时候,默认会直接把异常信息打印出来而不去做任何处理,这样会导致程序各种不可预期的结果。

    我们的Java程序运行的过程中如果出现了异常事件,可以生成一个异常类对象,该异常对象封装了异常的信息,并提交给Java运行时系统。在我理解来,生成异常对象类的过程就是try,捕获到一个异常类,然后catch,catch的意思就是如果捕获到这个异常的时候应该执行的逻辑。

3:小结

    异常是运行期间出现的错误,运行期间出现错误以后JAVA处理这种错误的方式是首先会找相应的catch代码,看看有没有使用catch去捕获异常,如果有catch存在,那么JAVA就会自动跳到catch那里去处理异常,如果没有catch,那么JAVA将会把这个错误抛出去,然后将相关的错误信息打印出来。想用catch捕获异常时必须要写try,没有try就不能用catch,try里面写的是有可能产生异常的语句,catch里面写的是当try里面的语句运行时出现了异常的处理方式。

  方法声明的时候可以指明这个方法有可能会抛出的异常类型,使用throw抛出异常,声明方法后面有throws声明的可能出现的异常一定要去捕获。

所以,从这里,可以了解到Java抛出异常的方式:1.由虚拟机自动进行处理,2用throws子句来抛出异常

4:异常的分类

从大的方面来讲,异常主要分为error错误与Exception异常。两者的共同祖先是Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。

从两者的翻译中来看,一个是错误,一个是异常。所谓错误,就是应用程序中比较严重的问题,大多数与编写者执行的操作没有必要关系。例如,Java所需要执行的内存不够时候,就会报error错误

所谓异常【Exception】,就是程序中可以被预测,可以被修复的问题。

5:针对于Exception异常的分类

    从上文中可以看出,异常分为Exception异常与Error错误。那么细分,Exception异常又可以被分为哪几类?

Exception可以被细分为两类:运行时候异常【非检查异常unchecked exceptions】与非运行时异常[检查了的异常checked exceptions]

运行时候异常:RuntimeException类是Exception类的子类,它叫做运行时异常,Java中的所有运行时异常都会直接或者间接地继承自RuntimeException类。注意:所有的运行时异常都会直接或者间接的继承RuntimeException,Java中凡是继承Exception而不是继承RuntimeException的都是非运行时候的异常,一个try后面可以跟着多个catch,但是最终只有一个catch被执行,所以,catch(Exception e)应该被放在最后一个catch执行

 RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。

处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

针对于运行时候异常,是如果一切正常不应该发行的异常,但是的确发生了,这类错误本身就是个bug,需要我们去修复,所以不建议使用try catch。

非运行时候异常:我们必须对其进行处理,否则的话会编译不通过。对运行时候的异常,我们可以对其不进行处理,而且建议也不对其进行处理。对于非运行时候的异常,1.使用try..catch..finally进行捕获,2.在产生异常的方法声明后面写上throws 某一个Exception类型,如throws Exception,将异常抛出到外面一层去。

非运行时候异常:通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架可以通过依赖注入来管理对象之间的关系。泛型依赖注入是Spring 4版本引入的一个新特性,它允许我们使用泛型类型作为依赖注入的目标类型。 在Spring中,我们可以使用`@Autowired`注解来实现依赖注入。在Spring 4之前的版本中,我们只能使用具体的类型来指定注入的目标类型。但是在Spring 4中,我们可以使用泛型类型来指定注入的目标类型。 泛型依赖注入的好处之一是可以减少重复的代码。例如,我们可以定义一个通用的泛型接口或抽象类,然后在具体的类中使用泛型类型来指定依赖注入的目标类型。这样,我们可以减少重复的配置代码,并提高代码的可维护性和灵活性。 另一个好处是增加了类型安全性。使用泛型类型来指定依赖注入的目标类型可以在编译时检查类型是否匹配,避免在运行出现类型转换错误或异常。 下面是一个示例代码,演示如何在Spring 4中使用泛型依赖注入: ```java public interface GenericDao<T> { // ... } @Component public class UserDao implements GenericDao<User> { // ... } @Service public class UserService { @Autowired private GenericDao<User> userDao; // ... } ``` 在上面的示例中,我们定义了一个泛型接口`GenericDao`,并在具体的实现类`UserDao`中使用了具体的类型`User`来指定泛型类型。然后,我们在`UserService`中使用泛型类型`User`来注入`UserDao`。 通过使用泛型依赖注入,我们可以更方便地管理依赖关系,并且减少了重复的配置代码。这是Spring 4版本引入的一个有用的特性,可以在开发中提高效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值