黑马程序员技术交流社区

标题: ==类类型变量不实例化时他调用什么?== [打印本页]

作者: 万琪    时间: 2013-6-26 16:30
标题: ==类类型变量不实例化时他调用什么?==
本帖最后由 孙百鑫 于 2013-6-27 13:56 编辑

刚刚翻老毕的cods,,发现的,,请看

  1. class Res {
  2.         String name;
  3.         String sex;
  4.         boolean flag = false;
  5. }

  6. class In implements Runnable {
  7. <font color="#ff00ff">        Res r;</font>
  8.         @Override
  9.         public void run() {
  10.                 // TODO Auto-generated method stub
  11.                 {
  12.                         int x = 0;
  13.                         while(true)
  14.                         {
  15.                                 synchronized(r)
  16.                                 {

  17.                                         if(<font color="#ff00ff">r.flag</font>)<font color="#ff00ff">  //不用实例化?那r是不是就是
  18. boolean flag = false; 呢???//不现实,,往下看</font>
  19.                                                 try{r.wait();}catch(Exception e){}
  20.                                         if(x==0)
  21.                                         {
  22.                                                 r.name="mike";
  23.                                                 r.sex="man";
  24.                                         }
  25.                                         else
  26.                                         {
  27.                                                 r.name="丽丽";
  28.                                                 r.sex = "女女女女女";
  29.                                         }
  30.                                         x = (x+1)%2;
  31.                                         r.flag = true;
  32.                                         r.notify();
  33.                                 }
  34.                         }
  35.                 }
  36.         }

  37. }
复制代码

作者: 万琪    时间: 2013-6-26 16:31
。。。怎么消失了???
作者: 万琪    时间: 2013-6-26 16:35
重写吧。。。

来个反例:
Res r ;
r.flag = true ; //提示未初始化


Res r;
if(r.flag)//提示未初始化
{}



那么未初始化的变量r到底指向哪里呢???


为什么,,

作者: 薛淑凯    时间: 2013-6-26 17:14
这个程序一运行就出空指针异常了,其实跟你下边写的反例一样的,没有初始化的变量r里应该什么都没有,还没有给他分配对象地址,所以调用就出错。这个程序eclipse竟然没有提示未初始化
作者: 万琪    时间: 2013-6-26 18:13
好吧。。老毕这个碉堡了,,

他定义在main里了,,一般人找不到啊
  1. public class Ts {
  2.         public static void main(String[] args) {
  3.                 Res r = new Res();

  4.                 Input in = new Input(r);
  5.                 Output out = new Output(r);
复制代码

作者: 王靖远    时间: 2013-6-26 18:33
flag初始化是false啊 成员变量啊
作者: 万琪    时间: 2013-6-26 18:40
王靖远 发表于 2013-6-26 18:33
flag初始化是false啊 成员变量啊

嗯~~ 不是这个问题
作者: 280270738    时间: 2013-6-26 21:08
必须有实例对象啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2