相关疑难解决方法(0)

为什么我可以在Java中抛出null?

运行时:

public class WhatTheShoot {

    public static void main(String args[]){
        try {
            throw null;
        } catch (Exception e){
            System.out.println(e instanceof NullPointerException);
            System.out.println(e instanceof FileNotFoundException);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

回应是:

true  
false
Run Code Online (Sandbox Code Playgroud)

这对我来说相当惊人.我原本以为这会造成编译时错误.

为什么我可以在Java中抛出null,为什么要将它转换为NullPointerException呢?

(实际上,我不知道它是否是"向上",因为我扔的是null)

除了一个非常愚蠢的面试问题(请不要在面试中问这个)我看不出任何理由throw null.也许你想被解雇,但那是......我的意思是,为什么还有人throw null呢?

有趣的事实 IntelliJ IDEA 12告诉我,我的行e instanceof NullPointerException总是假的.这根本不是真的.

java exception-handling nullpointerexception

308
推荐指数
5
解决办法
3万
查看次数

为什么"throw null"没有在Java中创建编译错误?

class ThrowNull {
    public static void main(String[] args) {
        throw null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们知道throw的规则是throw ThrowableInstance;,ThrowableInstance必须是Throwable类型的对象或Throwable的子类.

简单类型(如int或char)以及非Throwable类(如String和Object)不能用作异常.null是一个特殊的Java文字,表示一个空值.

那么为什么要throw null;编译这段代码呢?

java null exception-handling

32
推荐指数
2
解决办法
5724
查看次数

catched异常如何为null(不是NullReferenceException)?

我遇到了一个相当奇怪的小问题.

在下面的代码中我无法理解怎么e可能null;

try
{
    //Some Code here
}
catch (Exception e)
{
    //Here e is null
}
Run Code Online (Sandbox Code Playgroud)

据我所知,throw null将转换为throw new NullReferenceException().

问题似乎与多线程有关,因为删除另一个线程似乎也解决了它.或者至少我在上面的代码在新线程中运行时才看到这个.整个程序使用很多线程,有点复杂.

无论如何我的问题是,怎么可能e是null? - 希望答案可以帮助找到这个问题的根源.

编辑 我发现它,因为它在catch语句中引起了NullReferenceException,并且使用调试器我看到同样的事情.

编辑2 第二天打开VisualStudio再次尝试,没有代码更改,现在相同的口号被"调用",但这次e不是null.看起来这是一个VS故障.

.net c# multithreading exception-handling exception

5
推荐指数
1
解决办法
1935
查看次数