java - java方法如何在调用之前抛出异常

标签 java exception runtime

我试图弄清楚提供不可用参数的方法调用是如何在代码的调用行上抛出异常的——在它到达方法行之前。 下面是一个例子

1. static Integer x;
2. public static void main(String args[]){
3. doStuff(x)}  //null pointer exception thrown on this line
//lines 4-49
50. public static void doStuff(int z){}

在这里,我向该方法发送一个 Integer 对象引用,并且由于自动装箱,一个 Integer 对象是要发送的有效引用。 如果调用的方法直到第 50 行才加载到堆栈,为什么 JVM 在第 3 行还没有到达方法签名时抛出空指针异常?

最佳答案

因为 null 不是原始 int 的有效值。

您说得对,由于自动装箱,Integer 对象是接受原始 int 的方法的有效参数。但是,在您在此处描述的情况下,Integer 永远不会被初始化,因此将是 null(Integer 对象的默认未初始化值,与int 的值,即 0)。

这意味着 JVM 尝试通过调用 null.intValue()null 转换为原始 int 以便它适合被调用的方法 - 这就是 NPE 被抛出的地方。

仅供引用,在调用它的行下方声明该方法这一事实没有任何区别,因为 Java 不被解释,它被编译成字节码。

关于java - java方法如何在调用之前抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124739/

相关文章:

java - 在 Java-8 中捕获多个异常

c# - 决定 ExceptionFilterAttribute OnException 方法的实现

java - 未处理的异常 Junit

java - 如何避免 Rome 异常(exception)

visual-studio-code - 为什么不建议以 root 身份运行 Vscode?

java - 使用 Java 打开外部非 Java 文件

java - 网格布局方向代号one

java - GXT 与 GridInlineEditing 的奇怪行为

c++ - 在运行时创建自定义事件

Java HashSet 二维数组重复识别