开发者社区> 问答> 正文

Java异常是如何实现的 报错

"

Java里面的异常分为运行时异常(RuntimeException)和检查异常(checked exception
对于很多异常,在程序中throw new Exception()这样的语句就申明了一个异常
如果是运行时异常,可以在程序中处理,也可以不处理,对于检查异常,必须要处理它
有一个问题,就是那些没有申明的异常时怎么把它抛出来的呢,就比如

obj.method();

obj==null 的时候,一定会抛出NPE,但是在method()里面并没有这样的语句

method(){
    if(this==null)
     throw new NullPointException();
}

那类似这样的 Exception 是怎么实现的呢

是在JVM做的?
那如果是在JVM中做的,那JVM对哪些检查异常做了这样的事呢,JVM又是怎么做的呢?

@剑心无痕说得对,我这里面问题确实很明显,obj是空,跟本没有办法找到method这个方法。
不过我还想要了解“null.method()”的时候,这个NullPointException是怎么给抛出来的,Java代码也没有看到哪里抛出了NullPointException?

" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/59e8571e786d4767a9d0e3f807f30ff9.png)

展开
收起
因为相信,所以看见。 2020-05-26 13:56:50 628 0
1 条回答
写回答
取消 提交回答
  • 阿里,我所有的向往

    "

    obj.method()是怎么调用?是不是得先找到obj的内存地址,获取obj的类型(或者是其他什么能识别的东西),然后找到method的偏移地址,调用method。而当obj是null的时候,连method都找不到,怎么会去在method里抛出异常。
    多参考参考别人的博客吧 <a href=""https://blog.csdn.net/qq_31615049/article/details/80952216"" rel=""nofollow noreferrer"">https://blog.csdn.net/qq_3161...

    PS:如果用兴趣了解底层,可以尝试把java转成汇编,看看具体是如何实现的

    ######

    你好,简单的说JVM是不处理异常的,一般是直接挂掉,所以有了异常处理机制,将异常分为Error和Exception,细分的话还有非检查异常与检查异常、运行时异常与非运行时异常,我们白话的讲解下,异常跑出是对应的线程与类型还有说明,Java应用程序异常处理机制:抛出异常、捕捉异常。
    有一个点:一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。(具体还有很多学问)
    参考:
    java中的异常和处理机制
    浅谈java异常
    菜鸟-java异常分析

    " ![image.png](https://ucc.alicdn.com/pic/developer-ecology/03d710a589614628882aea5d59cca6cf.png)
    2020-05-27 10:07:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载