• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Java基础异常处理

java 搞代码 4年前 (2022-01-27) 39次浏览 已收录 0个评论
文章目录[隐藏]

Java-根底-异样解决

reference:

  1. https://github.com/dunwu/java…

1. Throwable 类

Throwable 有两大子类:Exception和Error;对应个别异样和运行谬误(个别不捕捉运行谬误)。在 Java 中只有 Throwable 类型的实例才能够被抛出(throw)或者捕捉(catch),它是异样解决机制的根本组成类型。

1.1 Throwable

Throwable 蕴含了其线程创立时线程执行堆栈的快照,它提供了 printStackTrace() 等接口用于获取堆栈跟踪数据等信息。

次要办法:

  • fillInStackTrace – 用以后的调用栈档次填充 Throwable 对象栈档次,增加到栈档次任何先前信息中。
  • getMessage – 返回对于产生的异样的详细信息。这个音讯在 Throwable 类的构造函数中初始化了。
  • getCause – 返回一个 Throwable 对象代表异样起因。
  • getStackTrace – 返回一个蕴含堆栈档次的数组。下标为 0 的元素代表栈顶,最初一个元素代表办法调用堆栈的栈底。
  • printStackTrace – 打印 toString() 后果和栈档次到 System.err,即谬误输入流。
  • toString – 应用 getMessage 的后果返回代表 Throwable 对象的字符串。

1.2 Exception

1.3 Error

1.4 RuntimeException

RuntimeException 继承于 Exception ,与 Exception 不一样的是,编译器不会查看是否捕捉了 RuntimeException 及其子类。

2 抛出&异样捕捉

  • 抛出异样

    throw new Exception("抛出一个异样");
  • 异样捕捉

    try{
    do something
    }catch (Exception1 e){
    do something
    }catch (Exception2 e)
    {
    do something
    }finally{
    do something
    }

代码样例

class BasicException extends Exception {

    public BasicException() {
        super("BasicException throw");
    }

    public BasicException(String msg) {
        super(msg);
    }

}

class ChildException extends BasicException {


    @Override
    public String getMessage() {
        /**
         *  除非要笼罩、改写父类信息才须要重写 getMessage 办法;
         */
        System.out.println(super.getMessage());
        return "ChildException throw";
    }
}

public class ArrayTest {


    public static void main(Stri<i style="color:transparent">来源gaodai$ma#com搞$$代**码网</i>ng[] args) throws Exception {
//        throw new BasicException();
//        Exception in thread "main" BasicException: BasicException throw
//                at ArrayTest.main(ArrayTest.java:29)


//        throw new BasicException("basic");
//        Exception in thread "main" BasicException: basic
//        at ArrayTest.main(ArrayTest.java:33)

        // 父子类异样同时呈现在异样中,优先依照程序捕捉子类
        try {
            throw new ChildException();
        } catch (ChildException e2) {
            // 留神必须是父类在后,不然编译报错
            System.out.println("ChildException catch");
        } catch (BasicException e) {
            System.out.println("BasicException catch");
        }
        //ChildException catch
    }
}

  • 反射对异样捕捉的影响

反射中的异样继承 ReflectiveOperationException 类

反射中的异样,因为反射包裹了一层堆栈,因而要获取精确的异样信息应该利用getTargetException获取实在的异样信息。

  • 多线程与异样

如果子线程不捕捉异样,会导致该线程退出。

3 异样链(深层异样抛出,反射包裹)

4. 小倡议

  • 对可复原的状况应用查看性异样(Exception),对编程谬误应用运行时异样(RuntimeException)。
  • 优先应用 Java 规范的异样。
  • 抛出与形象绝对应的异样。
  • 在细节音讯中蕴含能捕捉失败的信息。
  • 尽可能减少 try 代码块的大小。
  • 尽量放大异样范畴。例如,如果明知尝试捕捉的是一个 ArithmeticException,就应该 catch ArithmeticException,而不是 catch 范畴较大的 RuntimeException,甚至是 Exception
  • 尽量不要在 finally 块抛出异样或者返回值。
  • 不要疏忽异样,一旦捕捉异样,就应该解决,而非抛弃。
  • 异样解决效率很低,所以不要用异样进行业务逻辑解决。
  • 各类异样必须要有独自的日志记录,将异样分级,分类管理,因为有的时候仅仅想给第三方运维看到逻辑异样,而不是更细节的信息。
  • 如何对异样进行分类:

    • 逻辑异样,这类异样用于形容业务无奈依照预期的状况解决上来,属于用户制作的意外。
    • 代码谬误,这类异样用于形容开发的代码谬误,例如 NPE,ILLARG,都属于程序员制作的 BUG。
    • 专有异样,多用于特定业务场景,用于形容指定作业出现意外状况无奈事后解决。

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Java基础异常处理

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址