美文网首页
Java错误和异常

Java错误和异常

作者: Joe_blake | 来源:发表于2018-06-09 17:04 被阅读11次

一、顶级异常类-----Throwable

Throwable继承自Object类,实现了Serializable接口,可以进行序列化。常用的子类有Exception和Error

1.序列化的作用

在Throwable类中使用输出流来进行输出,并把其对象作为输出流对象,这就需要必须实现序列化接口,使得其可以进行序列化,才能作为输出流中的对象进行输出。

2.Exception和Error
  • Exception指Java程序设计中,可以预料到在运行时可能发生并且应该被捕获的错误,需要相应的处理;
  • Error主要是用于表示Java和虚拟机内部的异常信息,其不便于捕获,也难以处理;

一、Throwable的两大子类------Exception和Error

1. Exception和Error的设计与分类

image
Exception类分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception)。
  • RE能通过编译,但会在运行时抛出,如果未进行处理会导致程序崩溃。RE是完全可以在编程中避免的,因而是不受编译器检查的(unchecked,也包括Error),例如:NullPointerException、ArrayIndexOutOfBoundsException等;
  • CE是指不能通过编译器检测的异常情况,这总异常通常难以避免,必须try...catch...进行处理,例如:FileNotFoundException。
question:ClassNotFoundException和 NoClassDefFoundError的区别?
  • NoClassDefFoundError 是程序在编译时候可以找到其依赖的类,但是在运行时找不到或者可以找到多个相同的依赖类,此时抛出NoClassDefFoundError
  • ClassNotFoundException通常是在类路径错误,或者类名称发生更改时抛出,编译器无法通过路径加载该类,即无法通过编译。

2. 如何处理好Exception

  • 不要捕获Exception这样的通用异常,而应捕获特定的异常,并对其作出相应的处理。

例示:

//no
    try {
    .....
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
//yes
    try {
    .....
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        Log.(TAG,"线程中断/阻塞,需要清理");
    }
  • 尽早的抛出异常,以便分析堆栈日志,或者详细地输出到Log中,以便分析。
    private void read(String filename) {
        Objects.requireNonNull(filename);
        try {
            InputStream in = new FileInputStream(filename);
        } catch (FileNotFoundException e) {
            Log.(TAG,"文件路径错误");
        }
    }

3. 如何自定义异常

  • 所有异常都必须是 Throwable 的子类。
  • 自定义检查性异常类,继承 Exception 类。
  • 自定义运行时异常类,继承 RuntimeException 类。

4. 注意事项

  1. try-catch会产生额外的性能开销,影响JVM对代码进行优化。所以只需try住必要的代码段,而不是整个一大段代码。
  2. 不要用try-catch的形式控制代码流程(逻辑),远比switch-case、if-else要低效。
  3. Java在实例化Exception时,都会对当时的栈进行快照,当频繁进行该操作时,会影响到性能。
  4. 尽可能的就地处理异常,而不是向上抛出/只捕获不处理。
  5. 不要在finally中处理返回值,会覆盖掉try代码块里面的return。
  • 当try和catch中有return时,finally仍然会执行;

  • finally中包含return,不会对try块中要返回的值进行保护

    public static int test() {
        int i=0;
        try {
            i = 1;
            return i;
        } finally {
            i = 2;
            return i;
        }
    }
    
    //返回 2 

相关文章

  • Java中异常和错误的区别及处理方式

    异常和错误的区别和联系 在Java中,异常和错误同属于一个类:Throwable。异常和错误都是Java异常处理重...

  • 异常try,catch,finally,throw,throws

    java异常概念 java异常分类 异常的捕获和处理 运行期出现的错误是最难解决的. 观察错误名字和行号最重要! ...

  • Java-面向对象-异常

    异常和错误 Java运行时期发生的问题就是异常。 Java中运行时发生的除了异常Exception还有错误Erro...

  • Java自学-异常处理 异常分类

    Java 中异常的分类 异常分类: 可查异常,运行时异常和错误3种其中,运行时异常和错误又叫非可查异常 步骤 1 ...

  • Java错误和异常

    一、顶级异常类-----Throwable Throwable继承自Object类,实现了Serializable...

  • Java异常和错误

    一、异常的分类 被查的异常编译器告诉我们要做相应处理,比如surounded by try catch,为被查的异...

  • Java异常和错误

    未经检查的异常说明ArithmeticException算术错误,如被0除ArrayIndexOutOfBound...

  • Java异常和错误

    一、概述 Java中, 所以的异常都继承自java.lang.Throwable。 Throwable: Thro...

  • Java异常处理

    最近在学Java异常处理,码一下备忘。 异常和错误的区别和处理方式 首先,错误和异常都是程序运行中出现了问题,错误...

  • 异常

    异常的概念 Throwable是异常的超类,Exception(异常)和 Error(错误)都是 Java 异常处...

网友评论

      本文标题:Java错误和异常

      本文链接:https://www.haomeiwen.com/subject/mqateftx.html