私有变量自己变为null

jiazhengjing 2011-07-01 01:57:08
一个类有一个私有变量,整个类里没有一句把它设程null的,
整个实现了静态单例,今天发现该变量变为null。
什么情况会导致这种情况发生?
...全文
134 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenchenyangll 2011-07-01
  • 打赏
  • 举报
回复
你这个null的bug能够重现吗?
jiazhengjing 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 complexgg 的回复:]
引用 13 楼 jiazhengjing 的回复:
我的代码只是打比方,我的工程是web工程,有大量其他线程在跑。

while(true)这个是一直在循环估计内存不足,然后JVM回收了内存中了test对象,所以就变NULL了
[/Quote]

一般都是直接报outofmemery吧
jiazhengjing 2011-07-01
  • 打赏
  • 举报
回复
所以很奇怪,我也觉得是抛异常。
日志有发现容器,强制gc,不知道有没有影响
数字巫师 2011-07-01
  • 打赏
  • 举报
回复
主要是方法要同步 synchronized
complexgg 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jiazhengjing 的回复:]
我的代码只是打比方,我的工程是web工程,有大量其他线程在跑。
[/Quote]
while(true)这个是一直在循环估计内存不足,然后JVM回收了内存中了test对象,所以就变NULL了
数字巫师 2011-07-01
  • 打赏
  • 举报
回复
public class Test {
private static Object object;
private static Test test = null;
private Test(){
object = new Object();
}
public synchronized static Test getInstantce() {
if (test == null) {
test = new Test();
}
return test;
}
public static void main(String[] args){
Test.getInstantce();
while(true){
Test.getInstantce().object.toString();

}
}
}
飞跃颠峰 2011-07-01
  • 打赏
  • 举报
回复
内存不足也是抛出异常啊,不是让你的私有变量变成null
jiazhengjing 2011-07-01
  • 打赏
  • 举报
回复
我的代码只是打比方,我的工程是web工程,有大量其他线程在跑。
jiazhengjing 2011-07-01
  • 打赏
  • 举报
回复
所以你要考虑其他情况,比如说内存不足什么的。
飞跃颠峰 2011-07-01
  • 打赏
  • 举报
回复
这段代码没问题啊,我也没跑出nullpoint来
jiazhengjing 2011-07-01
  • 打赏
  • 举报
回复
类似这样
public class Test {
private Object object;
private static Test test = null;
private Test(){
object = new Object();
}
public static Test getInstantce() {
if (test == null) {
test = new Test();
}
return test;
}
public static void main(String[] args){
Test.getInstantce();
while(true){
Test.getInstantce().object.toString();
//跑着跑着会报nullpoint?
}
}
}
chenchenyangll 2011-07-01
  • 打赏
  • 举报
回复
贴代码吧 不然真看不出
飞跃颠峰 2011-07-01
  • 打赏
  • 举报
回复
能不能说更详细点,你的私有变量是个什么样的对象
complexgg 2011-07-01
  • 打赏
  • 举报
回复
贴代码
降龙 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 alexandertech 的回复:]

说错了,你定义后不给它赋值,它就是null
[/Quote]
嗯,是这样的。。。。
jiazhengjing 2011-07-01
  • 打赏
  • 举报
回复
我当然有初始化它。请排除这些显然的错误。。。。
coolhty 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 jiazhengjing 的回复:]
一个类有一个私有变量,整个类里没有一句把它设程null的,
整个实现了静态单例,今天发现该变量变为null。
什么情况会导致这种情况发生?
[/Quote]

什么时候的事情?今天才发现啊?

如果你能保证没有一句把它设置成null的话.那只有一个原因,就是初始化
飞跃颠峰 2011-07-01
  • 打赏
  • 举报
回复
说错了,你定义后不给它赋值,它就是null
飞跃颠峰 2011-07-01
  • 打赏
  • 举报
回复
你不定义它,它就是null
数字巫师 2011-07-01
  • 打赏
  • 举报
回复
1、私有变量默认就是null
2、静态单例可能获取对象时没正确获取到

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧