捕获Java中的nullpointerexception
我尝试使用try-catch块来捕获捕获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
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");
}
}