Java错误和异常

2018-06-09  本文已影响11人  Joe_blake

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

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

1.序列化的作用

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

2.Exception和Error

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

1. Exception和Error的设计与分类

image
Exception类分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception)。
question:ClassNotFoundException和 NoClassDefFoundError的区别?

2. 如何处理好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,"线程中断/阻塞,需要清理");
    }
    private void read(String filename) {
        Objects.requireNonNull(filename);
        try {
            InputStream in = new FileInputStream(filename);
        } catch (FileNotFoundException e) {
            Log.(TAG,"文件路径错误");
        }
    }

3. 如何自定义异常

4. 注意事项

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

猜你喜欢

热点阅读