本文正在参与「Java主题月 – Java Debug笔记活动」,概况检查<活动链接>
提问:在Java中防止NullPointerException?
我常常运用
Object != null
的办法来防止空指针异常,有没有什么替代办法能够相同结束以下代码的功用
if (someobject != null) {
someobject.doCalc();
}
最抢手的答复:
在我看来,这似乎是一个适当普遍的问题,初命令行快捷键级和中级开发人员往往会在某个时分遇到这些问题:java面试题他们要么不知道,要么不信任他们所参与的项目的文档,并且防护性地检查了null。另外,在编写自己的命令行进入指定目录代码时,他们倾向于依靠回来空值来标明某些内容,因而要求调用者检查空值。
换句话说,在两种情况下会呈现空检查:
- 假定为null,则标明合同中的有用回复
- 假定为null,则不是有用的回应。
第二种能够经过运用断语或抛出jvm内存结构空指针异常来处理。
断语是1.4中新增的一个未被广泛运用的Java功用。语法为:
assert
或许
assert <condition> : <object&g笔记本t;
其间<condition>是命令行检查ip地址一个布尔表达式jvm废物收回算法,<object>是一个目标,他们的toString(笔记本电脑开不了机)办法的输出将包括在差错信息中。
一个assert句子抛出一个Error。默许情况java难学吗下,Java会疏忽断语。您能够经过将选项传递-ea给JVM来启用断语。您能够启用和禁用单jvm内存模型个类和程命令行检查ip地址序包的断语。这意味着您能够在开发和检验时运笔记本电脑连不上无线网怎样回事用断语来验证代码,并在出产环境中禁用它们,虽然我的检验几乎没有闪现断语对功用的影响。
在这种情况下,不运用断语是能够的,因为代码只会失利,这便是运用断语时会Java发生的情况。唯一的差异是,有了断语,它可jvm是什么意思能会更早地发生,以更有意义的办法呈现,并可能带有额定的信息,这能够帮助您弄清楚为什么它出人数组排序意料。
第一种情况有点难,假定null为有用照应,则必须对其进行检查。防止运用null作为照应。运用回来集合的办法很简略:经过一向回来空集合(或数组)而不是null来防止这个问题。
在不运用空集合的情况下,例如:
public interface Action {
void doSomething();
}
public interface Parser {
Action findAction(Strin笔记本电脑开不了机g userInput)jvm内存结构;
}
在这里,Parser会承受原始用户输入并找到要实行的操作,也许是在结束某项功用的命令行界面时。现在数组初始化,假定没有恰当的操作,您能够使函数回来null。这将导致您正在议论的空检查。
另一种处理方案是永久不回来njava初学ull,而运用Null Object方式:
public class MyPajava言语rser implements Parser {
private static Action DO_jvm内存结构NOTHINGjava面试题 = new Action() {
pu命令行如何切换到d盘blic void doSomething() { /* do nothing */ }
};
public Action findAction(String userInput) {
// ...
if ( /* we can't find any actions */ ) {
return DO_NOTHING;
}
}
}
如此编写代码,会愈加简练
关于findAction()办法来说java模拟器,抛出带有有意义的差错音讯的Exceptionjvm原理及性能调优异常是完全恰当的-特别是在这种情况下,您依赖于用户输入。关于findAction办法抛出一个异常,比对一个没有说明的简略NullPo数组和链表的差异interException进行抛出的调用jvm调优办法要好得多Java。
try {
ParserFactory.getParser().find命令行检查ip地址Action(someInput).doSomething();
} catch(ActionNotFoundExc笔记eption anfe) {
usejvm原理rConsole.err(anfe.getMessage());
}
或许,运用运用其笔记他操作替代try-catcjava难学吗h
public Action findAction(final Strin数组去重g usjvm是什么意思erJVMInput) {
/* Code to笔记本电脑怎样连wifi return requested Action if found */
return new Action() {
public void doSomething() {
userConsole.err("Action not found: " + userInput);
}
}
}