Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
捕获Java中的nullpointerexception_Java_Nullpointerexception - Fatal编程技术网

捕获Java中的nullpointerexception

捕获Java中的nullpointerexception,java,nullpointerexception,Java,Nullpointerexception,我尝试使用try-catch块来捕获NullPointerException,但是下面的程序仍然给出了错误。我是否做错了什么,或者是否有其他方法可以在下面的程序中捕获NullPointerException。非常感谢您的帮助 public class Circular_or_not { /** * @param args */ public static void main(String[] args) { // TODO Aut

我尝试使用try-catch块来捕获
NullPointerException
,但是下面的程序仍然给出了错误。我是否做错了什么,或者是否有其他方法可以在下面的程序中捕获
NullPointerException
。非常感谢您的帮助

public class Circular_or_not 
{

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        try
        {
            LinkedListNode[] nodes = new LinkedListNode[10];            
            for (int i = 0; i < 10; i++) 
            {
                nodes[i] = new LinkedListNode(i, null, i > 0 ? nodes[i - 1] : null);
            }

            // Create loop;
            // nodes[9].next = nodes[3];
            Boolean abc= Check_Circular(nodes[0]);
            System.out.print(abc);
        }
        catch(NullPointerException e)
        {
            System.out.print("NullPointerException caught");
        }

    }

    public static boolean Check_Circular(LinkedListNode head) 
    {       
            LinkedListNode n1 = head;
            LinkedListNode n2 = head; 

            // Find meeting point
            while (n2.next != null)
            { 
                n1 = n1.next; 
                n2 = n2.next.next; 
                if (n1 == n2) 
                { 
                    return true;
                }
            }
            return false;
    }

}
公共类循环\u与否
{
/**
*@param args
*/
公共静态void main(字符串[]args)
{
//TODO自动生成的方法存根
尝试
{
LinkedListNode[]节点=新LinkedListNode[10];
对于(int i=0;i<10;i++)
{
节点[i]=新的LinkedListNode(i,null,i>0?节点[i-1]:null);
}
//创建循环;
//节点[9]。下一步=节点[3];
布尔abc=检查_循环(节点[0]);
系统输出打印(abc);
}
捕获(NullPointerException e)
{
系统输出打印(“捕获NullPointerException”);
}
}
公共静态布尔检查\u循环(LinkedListNode头)
{       
LinkedListNode n1=头;
LinkedListNode n2=头;
//寻找汇合点
while(n2.next!=null)
{ 
n1=n1.next;
n2=n2.next.next;
如果(n1==n2)
{ 
返回true;
}
}
返回false;
}
}

NullPointerException
是一种运行时异常,建议不要捕获它,而是避免它:

if(someVariable != null) someVariable.doSomething();
else
{
    // do something else
}

您应该用上面的代码捕获
NullPointerException
,但这并不能改变您的
检查循环是错误的这一事实。如果您修复了
Check\u Circular
,您的代码将不会首先抛出
NullPointerException
,并按预期工作

尝试:


我认为你的问题是在while条件下:


假设您有两个节点,第一个N1和N2指向同一个节点,然后N1指向第二个节点(最后一个),N2指向null(因为它是N2.next.next)。在下一个循环中,您尝试对N2调用“next”方法,但N2为null。你已经知道了,NullPointerException

你的代码的问题在你的Check\u循环中。您正在使用n1一次前进一个节点来遍历列表。通过重新分配n2到n2。下一步。下一步,你一次前进两步

执行此操作时,n2.next.next可能为null,因此赋值后n2将为null。当循环重复并检查n2.next是否为null时,它会抛出NPE,因为它无法到达next,因为n2已经为null


你想做一些类似Alex发布的事情。

正如另一个答案中所述,不建议捕获NullPointerException。但是,您肯定可以捕捉到它,如下面的示例所示

public class Testclass{

    public static void main(String[] args) {
        try {
            doSomething();
        } catch (NullPointerException e) {
            System.out.print("Caught the NullPointerException");
        }
    }

    public static void doSomething() {
        String nullString = null;
        nullString.endsWith("test");
    }
}

虽然NPE可能被捕获,但你绝对不应该这样做,而是要解决最初的问题,即检查循环方法。

特别是因为它没有找到你想要找到的东西,所以即使你捕获到它,它也可能传播到程序的其他部分“正在出错”。。。当然,您可以说得更具体一些吗?不清楚如何使用LinkedListNode类。例如,类似这样的类是org.jivesoftware.util.LinkedListNode。这只是一个编码建议。在命名类和方法时,请尝试遵循约定。请注意,您不应该捕获NPE。
public class Testclass{

    public static void main(String[] args) {
        try {
            doSomething();
        } catch (NullPointerException e) {
            System.out.print("Caught the NullPointerException");
        }
    }

    public static void doSomething() {
        String nullString = null;
        nullString.endsWith("test");
    }
}