美文网首页Java基础
Java基础之异常体系

Java基础之异常体系

作者: sofarsogoo_932d | 来源:发表于2018-06-23 14:10 被阅读11次

1. Java异常体系

Java异常体系.png

Throwable
Throwable是整个异常体系的顶层父类,它有两个子类,分别是Error和Exception

Error
Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。如java.lang.StackOverFlowError和Java.lang.OutOfMemoryError。对于这类错误,Java编译器不去检查他们。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止

Exception
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常

Exception又分为RuntimeException(运行时异常)和受检查的异常

运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常属于unchecked异常,开发人员可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

除了java.lang.RuntimeException 和 java.lang.Error 类及其子类是 unchecked exception,其余的就是 checked exception 了。受检查的异常的特点就是当你调用了抛出这些异常的方法后,必须要处理这些异常。如果不处理,程序就不能编译通过。如:IOException、SQLException、用户自定义的Exception异常等。

2. 如何处理异常

Java中的异常处理都是围绕着 try-catch-finally, throw, throws 这几个展开的

  • try-catch-finally:捕获异常并处理。
  • throw:遇到错误的时候抛出一个异常。
  • throws:声明一个方法可能抛出的异常(所有可能抛出的异常都需要声明)。

我们来通过一段代码来说明

public class Main {

    public static void main(String[] args) {
        int a = 5 / 0;
        System.out.println("Hello World!");
    }
}

运行结果

Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:5)

Process finished with exit code 1

可以看出抛出了一个异常,并且程序停止了

增加一个try-catch语句

public class Main {

    public static void main(String[] args) {

        try {
            int a = 5 / 0;
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
        System.out.println("Hello World!");
    }
}

执行结果

java.lang.ArithmeticException: / by zero
Hello World!
    at Main.main(Main.java:6)

Process finished with exit code 0

程序正常执行了,输出的异常信息是我们在catch快中输出的

下面我们将这两段代码放在安卓中

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int a = 5 / 0;
}

结果是app直接崩溃


日志1.png

错误是Error级别的,并且是红色的比较明显

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        int a = 5 / 0;
    } catch (ArithmeticException e) {
        e.printStackTrace();
    }
}

结果是app正常运行


日志2.png

在error级别的日志中是看不到的,并且蓝色的,并没有红色那么明显

结论
通过try-catch语句,一定程序上减少了程序的崩溃率,但是这样也会带来一个弊端,就是隐藏了一些问题,因为这个问题,明显是程序逻辑的问题,应该更改程序逻辑,即判断除数不能为空
对于最常见的NPE问题,也是这样,判断对象是否为null,而不是盲目的去try-catch

3. Crash处理文章

美团外卖Android Crash治理之路
https://tech.meituan.com/waimai-android-crash.html

相关文章

  • Java基础之异常体系

    1. Java异常体系 ThrowableThrowable是整个异常体系的顶层父类,它有两个子类,分别是Erro...

  • java 基础之java异常体系

    Java异常类的架构 RuntimeException/UnCheckException 定义: RuntimeE...

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

  • Java基础之异常处理

    Java基础之异常处理 在Java程序中,异常分为编译异常以及运行时异常 编译异常:程序在编译期间就出现的异常,必...

  • Java 异常处理

    1. Java异常体系 Java异常体系设计的目的在于通过使用少量代码,实现大型、健壮、可靠程序。 1.1. 异常...

  • 面试重灾区:Java的异常体系怎么解?

    Java的异常体系结构 Java异常体系的根类是 Throwable, 所以当写在java代码中写throw抛出异...

  • java基础之异常处理

    1. java的异常体系包含在java.lang这个包默认不需要导入。 2. java异常体系 |——Throw...

  • 中级06 - Java的异常体系

    Java的异常体系健壮而安全,比C++高到不知道哪里去了。 什么是异常Java的异常体系throw/throwst...

  • 异常

    Java异常体系 异常的分类 Java的异常分为两大类:Checked异常和Runtime异常(运行时异常)。所有...

  • JavaSE 基础学习之五 —— IO 操作 (java. io

    接上篇《JavaSE 基础学习之四 —— 异常的处理》 五. JavaSE 基础学习 —— IO 操作 (java...

网友评论

    本文标题:Java基础之异常体系

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