这个Java 1.8.0_102程序:
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
File tempFile = null;
try {
tempFile = File.createTempFile(null, null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
引发此异常:
Exception in thread "main" java.lang.NullPointerException
at java.io.File.createTempFile(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at Main.main(Main.java:10)
根据Javadocs,两个参数可能都是null。知道为什么会抛出这个特殊的异常吗?
答案 0 :(得分:3)
根据JavaDoc
,前缀不能为空参数:
prefix - 用于生成文件名称的前缀字符串;必须至少三个字符
后缀 - 用于生成文件名称的后缀字符串;可以为null,在这种情况下后缀为" .tmp"将被使用
答案 1 :(得分:1)
java doc说“前缀用于生成文件名的前缀字符串;必须至少有三个字符长”。正是为什么它抛出空指针异常。这是链接File java doc
答案 2 :(得分:0)
根据错误输出,异常是NullPointerException。但是,根据File.createTempFile的Javadocs,这不是抛出的异常。这意味着您的代码会发生意外情况。我们可以看到source code以确切了解正在发生的事情(请记住第三个参数directory
为null,因为您使用了重载版本)。
它首先做的是检查prefix
的长度,并确保它不小于3(在2000行)。但是,由于prefix
的值为null
,因此检查length()
将始终返回NullPointerException,因为您无法调用null对象上的任何方法。事实上,它甚至没有抛出InvalidArgumentException,这进一步证明它在if-check中死亡。我们也可以在Javadoc和源代码中看到它需要prefix
成为一个包含3个字符的String。有趣的是,在Java 6中,如果prefix
为null,则此方法 显式抛出NullPointerException。