gpt4 book ai didi

java - 处理空指针异常

转载 作者:行者123 更新时间:2023-12-01 07:59:34 25 4
gpt4 key购买 nike

因此,通过一些基于 Java 的 Web 应用程序的工作,我意识到几乎大多数 Web 应用程序中都有一个共同点。它们中的大多数往往运行良好,直到您面对面遇到 Null Pointer Exception.以下是返回错误的方法之一:

public Map getWebSiteObjects(String path, LightWeightNode root, Integer versionId, Site site) {


Map webSiteObjects = new HashMap();

// refresh site
site = (Site)getObject(Site.class, site.getId());

webSiteObjects.put("site", site); ...... /* Dont worry about the rest */

场景:此方法在我的应用程序上生成一棵树,但是,它在运行时给出空指针异常:

2014-10-09 12:00:18,674 ERROR org.springframework.web.servlet.DispatcherServlet - Could not complete request
java.lang.NullPointerException at com.bsdeurope.xmlcms.service.impl.TreeManagerImpl.getWebSiteObjects(TreeManagerImpl.java:159)

现在我对一些 Java 原理(基础知识)还很陌生,我解决这个问题的想法是初始化方法中传递的 4 个变量,因此:

path = null;
root =null;
versionId = null;
site = null;

getWebSiteObjects内的任何指令之前方法。现在我知道这可能不是唯一的解决方案,但我的问题是:

1) 在预防 Java 方面有什么好的做法 Null Pointer Exceptions
2) 如果有一个程序,你会如何去做?

通常,当使用大量类时,尤其是代码编写很糟糕的应用程序时,当您在左侧、右侧和中心出现大量空指针异常时,您最终会头撞墙。

最佳答案

对此有两种观点。

一所学校表示测试 null并做一些“行善”的事情。例如,将其替换为其他内容、忽略它、写入日志消息等等。

另一所学校是一个意想不到的null是一个 BUG,正确的做法是允许 NullPointerException被扔掉。然后,您允许 NPE 向上传播并(理想情况下)导致程序崩溃……或者更好的是,在将 NPE 堆栈跟踪记录到应用程序的日志文件中后正常失败。

然后由程序员使用堆栈跟踪中的信息(以及引用一位著名的虚构比利时侦探的“那些小灰色单元格”)来找出意外的 null 的位置。来,并解决问题的根本原因。 通常这需要查找 get 的字段或数组元素或任何未正确初始化的内容。返回 null 的调用指示(软)故障,或其他什么。此修复可能涉及测试 null ,或者可能涉及初始化某些内容,或传递某些内容,或纠正某些逻辑,或添加 null在程序的早期进行测试。

IMO,为null添加防御测试的做法到处都是一个坏主意。它倾向于用另一种通常更难追踪的错误(NPE)来替换一种错误。

<小时/>

所以我的答案是:

1) What is good practice in terms of preventing Java Null Pointer Exceptions?

好的做法是不要避免 NPE。相反,让它们发生,并找到/修复引入虚假内容的原因 null值。

2) If there is a procedure how would you go about doing it?

不,没有。当然没有>>I<<会使用的过程。

我唯一要做的就是尝试让我的代码更早抛出 NPE,以便 null并没有从它的原始来源传递很远。 (这往往会更容易找到并解决问题的根本原因。)

关于java - 处理空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26277165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com