【发布时间】:2019-01-19 19:45:31
【问题描述】:
我使用的是 JDK 1.7, 我正在检查所有输入条件的代码。 如果用户没有在字符串中输入任何值,那么它会抛出 NullPointerException。 即使用户没有输入任何值,有没有办法防止导致 NullPointerException?
我尝试了 try catch 块来捕捉异常
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class TestClass {
public static void main(String args[]) throws Exception {
Scanner s = new Scanner(System.in);
int i=s.nextInt();
System.out.println(i);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
try{
int length=str.length(); //NullPointerException here
if(length>=1 && length<=15)
{
System.out.println(str);
}
}
catch(NullPointerException e)
{
System.out.println("Must enter a string");
}
}
}
样本输入- 5 空
预期输出- 5 (空字符串值->“”但没有异常抛出消息)
【问题讨论】:
-
NPE 是未经检查的异常,因此捕获它是不好的做法。相反,只需做一个简单的
null检查 -
另外,为什么要同时读取
Scanner和BufferedReader从System.in读取?为什么不删除BufferedReader而只保留String str = s.nextLine()? (关于您未来可能提出的问题,请阅读this) -
我认为这是一个环境问题。当我在 JDK 1.7 中编译和运行它时,我没有得到
NullPointerException。请确保您正在运行正确的课程。 -
如果str为null,调用任何方法如.length()都会引发NullPointerException
标签: java