在Java中捕获nullpointerexception

jag*_*ags 18 java nullpointerexception

我尝试使用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;
    }

}
Run Code Online (Sandbox Code Playgroud)

Eng*_*uad 37

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

if(someVariable != null) someVariable.doSomething();
else
{
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

  • 特别是因为重点是它没有找到你想要找到的东西,所以即使你抓住它,它也可能传播到程序的其他部分 (5认同)

elT*_*oro 17

如前所述,在另一个答案中,建议捕获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");
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然可以捕获NPE,但你绝对不应该这样做,而是修复最初的问题,即Check_Circular方法.