好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
空指针异常是什么?如何处理? 关闭 返回上一级  

空指针异常是什么?如何处理?
+ 查看更多

发布日期:2018-02-23 17:30
分类:JAVA
浏览次数:226
如下:
空指针异常是什么(java.lang.NullPointerException),是什么造成了空指针异常?
有什么方法可以找出原因在哪里并且最终停止这个异常?
 
回答:
当你声明一个引用变量(i,e等对象),你就创造了一个指向对象的指针。当你声明一个基本类型的变量,看一下下面的代码:
int x;
x = 10;
第一行声明了一个名字为”name”的变量,但是它没有一个初始的值。而是拥有一个指针(
因为它的类型是Integer型,这是一个引用类型)。因为你没说它指向什么,意味着”什么都没有指向”。
在第二行,”new”关键字将实例化一个Integer类型的对象,并且指针变量”num”将会指向这个对象。你可以通过”.”操作符引用这个对象。
当你声明一个变量但是并没有创建一个对象初始化它的时候你询问的这个Exception就产生了。如果你想在创建对象之前引用”num”就会得到一个空指针异常。在大多数情况下编译期将会捕捉这个问题并且让你知道”可能是num没有被初始化”,但是有时候写代码时并不会直接创建一个对象。
举个例子,可能像下面这样:
public void doSomething(SomeObject obj){
   //do something to obj}
在这种情况下没有创建对象”obj”,而是假设在doSomething()被调用钱它已将被创建了。但是可能会象下面这样调用方法:
doSomething(null);
“obj”是空值。如果这个方法尝试做与这个被传入的变量相关的事情,将会引起空指针异常,因为这是一个用户错误而且用户需要调试这些信息。
另外,除了操作被传入的对象之外有其他的原因造成这个异常,因此一个空的参数是可以接受的。在这种情况下,你需要检查参数是否为空,然后做不同的操作。在文档里你也要做相关的解释。
下面,doSomething()方法可以像下面这样写:
/**@param obj An optional foo for ____. May be null, in which case 
*  the result will be ____. */public void doSomething(SomeObject obj){
    if(obj != null){
       //do something
    } else {
       //do something else
}}
最后,请参考How to pinpoint the exception location & cause using Stack Trace
上一篇Java中如何初始化一个数组?
在Java如何中创建目录?下一篇
下一篇在Java如何中创建目录?

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号