Java 使用throw命令不会引发异常
我正在编写一个返回FragmentManager实例的方法,如代码belwo所示。 问题是,如果传递给方法的上下文为null,我想抛出一个异常,然后终止应用程序 发生的情况是,当我将null传递给下面提到的方法时,应用程序关闭,但NullPointerException中的消息是:Java 使用throw命令不会引发异常,java,android,exception,exception-handling,nullpointerexception,Java,Android,Exception,Exception Handling,Nullpointerexception,我正在编写一个返回FragmentManager实例的方法,如代码belwo所示。 问题是,如果传递给方法的上下文为null,我想抛出一个异常,然后终止应用程序 发生的情况是,当我将null传递给下面提到的方法时,应用程序关闭,但NullPointerException中的消息是: getFragmentManagerInstance: Context reference is null 不显示 请让我知道如何抛出异常并正确终止应用程序 libs: public static Fragment
getFragmentManagerInstance: Context reference is null
不显示
请让我知道如何抛出异常并正确终止应用程序
libs:
public static FragmentManager getFragmentManagerInstance(Activity activity) throws Exception {
try {
if (activity != null) {
return activity.getFragmentManager();
} else {
throw new NullPointerException("getFragmentManagerInstance: Context reference is null");
}
} catch (NullPointerException e) {
System.exit(1);
return null;
}
}
不显示
当然,这是因为您正在接受异常:
} catch (NullPointerException e) {
System.exit(1);
return null;
}
该消息在e
中携带,您在catch
块中没有使用该消息
请注意,捕获
NullPointerException
几乎从来都不是正确的做法。在这种情况下,您只需打印消息并直接终止应用程序:
if (thing == null) {
System.err.println("It's null!");
System.exit(1);
}
只需使用
e.printStackTrace()
在系统之前退出(1)
它将按您的意愿打印由于您尚未编写任何代码来打印,因此消息未显示。如果要显示消息,请添加
e.printStackTrace()退出之前,请执行代码>。只需删除try块。简单打字
if(活动!=null){
返回活动。getFragmentManager();
}否则{
抛出新的NullPointerException(“getFragmentManagerInstance:上下文引用为null”);
}
将执行您想要的操作,因为NullPointerException
是未经检查的异常。消息“getFragmentManagerInstance:Context reference is null”存储在e中您需要将其打印出来,使其显示在屏幕上。
在catch块中,在System.exit(1)之前添加一条print语句
为了打印一些信息,您需要将它们提供给输出流,例如System.out
或System.err
默认情况下,如果调用ex.printstacktrace()
,它将在in System.err中打印异常
您还可以使用ex.printstacktrace(System.out)
选择信息发送的位置,如文件、控制台或任何输出
此外,您的应用程序将在System.exit之后立即停止,因此您的代码行需要在退出之前 我很惊讶这还没有说明,请将您的捕获块更改为
} catch(NullPointerException e){
System.err.print(e.getMessage());
System.exit(1);
return null;
}
如果您想向用户打印消息,请考虑使用<代码> toAST<代码>,而不是异常消息。
为什么要抛出异常?为什么不直接终止?@AndyTurner我认为在终止应用程序之前显示异常是一个好方法。但是如果我不会抛出一个eception并终止应用程序,那么我怎么能向用户打印日志消息呢?不要捕获它。让它向上传播。@user2121显示异常的最佳方法是newwhateverexceptiontype().printStackTrace()
,或类似方法。您可以创建异常而不抛出它们。@user2121您应该在catch块中记录异常,然后再System.exit()
,异常堆栈跟踪不会被魔术打印出来。如果目标是在值为null时终止应用程序,这不是OP想要的。这种NPE可以在更高层捕获。(我并不同意OP应该这么做)。
} catch(NullPointerException e){
System.err.print(e.getMessage());
System.exit(1);
return null;
}