Java的Nullpointerexception是什么原因导致的?用什么方法才能确定原因,以防止异常导致程序过早终止?
只要你有一个对象指向了null,都会出这个错误。
比如
class A
{
public void foo() { };
public static A getA() { return null; }
}
main()
{
A.getA().foo(); //这就出错了。
}
如果你仅仅“防止异常导致程序过早终止”,可以用try...catch忽略
main() thorws NullPointerException
{
try
{
A.getA().foo(); //这就出错了。
}
catch (NullPointerException ex) {}
... //后续代码,继续执行
}
当您赋予一个引用变量(例如一个对象)时,您实际上是在创建一个指向对象的指针。 比如下面的代码,其中确定基本类型为 int 的变量:
int x;
x = 10;
在本例中,变量 x 是一个 int,Java 把它初始化为0。 当你在第二行赋值10时,10将被写入 x 引用的内存位置。
但是,当您确定引用类型时,情况会有所不同。 以下面的代码为例:
Integer num;
num = new Integer(10);
第一行声明了一个名为 num 的变量,但是它实际上还不包含一个原语值。 相反,它包含一个指针(因为类型是 Integer,这是一个引用类型)。 由于您还没有说要指向什么,Java 将其设置为 null,这意味着“什么也没指向”。
在第二行中,new 关键字用于实例化(或创建) Integer 类型的对象,并将指针变量 num 分配给该 Integer 对象。
当确定一个变量但没有创建对象时,会发生 NullPointerException。 所以你指的东西实际上并不存在。
如果在创建对象之前尝试取消引用 num,则会得到 NullPointerException。 在最普通的情况下,编译器会捕捉到问题并告诉您“ num 可能没有被初始化” ,但有时您可能编写不直接创建对象的代码。
例如,用下面的方法:
public void doSomething(SomeObject obj) {
//do something to obj}
在这种情况下,您不是在创建对象 obj,而是假设它是在调用 doSomething ()方法之前创建的。 注意,可以这样调用方法:
doSomething(null);
在这种情况下,obj 为 null。 如果方法的目的是对传入的对象执行某些操作,那么反馈为 NullPointerException 也很正常,因为这是一个程序员错误。
或者有时候,这样做目的不仅仅是对传入的对象进行操作,因此可以接受空参数。 在这种情况下,需要检查空参数并随机应变。 您还应该在文档中解释这一点。 例如,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
}}
空指针异常,修复:找到报异常的代码,找“.”前面的对象。然后排查这个对象在哪空了 解决!!!
这个问题有点牛b啊兄弟,你有个空对象访问方法时会出现,在报错的(空指针异常)地方直接try catch包裹就行了