A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Moonboy2014 中级黑马   /  2014-6-29 22:33  /  902 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

interface Person
{
        abstract void show();
}

class Student implements Person
{
        public void show()
        {
                System.out.println("student run");
        }
}

class ProxyStudent implements Person
{
        private Student s;
        public void show()
        {
                before();
                if(s == null)//这个比较是什么意思,为什么不直接new一个Student对象呢?
                {
                        s = new Student();
                }
                s.show();
                after();
        }
        public void before()
        {
                System.out.println("do something before show");
        }
        public void after()
        {
                System.out.println("do something after show");
        }
}
public class ProxyDemo {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                        ProxyStudent ps = new ProxyStudent();
                        ps.show();
        }

}
请教各位高手,s==null是说明意思,为什么要进行这个比较,为什么改成s!=null 就提示空指针异常了,知道的详细解答一下,不胜感激




评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

6 个回复

倒序浏览
创建了一个Student类型的变量s,但是它的对象的引用是空的
既然它指向的是空的对象,就不能去操作它,调用它的方法,所以这里判断一下这个对象的引用如果为空,那么就创建一个新的对象;
把判断条件改成s!=null,当你对象的引用是空的时候就不会创建新的对象了,也就会报空指针异常了
回复 使用道具 举报
  private Student s; 定义了一个实例变量,当你new proxystudent时会自动初始化为null。你把s==null改成s!=null,那么s=null时就不会new一个student对象,你执行s.show()的依然是那个被初始化为null的student对象,当然会报空指针异常了

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 on-on 于 2014-6-30 09:31 编辑

如果s==null,则创建对象如果改成s!=null,则创建对象,那么当s==null的时候,不创建对象,后面调用s的时候,s的引用还是空,它当然是会报空指针异常了喽。
回复 使用道具 举报
fantacyleo 发表于 2014-6-30 01:41
private Student s; 定义了一个实例变量,当你new proxystudent时会自动初始化为null。你把s==null改成s! ...

恩,回答的很透彻,感谢:loveliness:
回复 使用道具 举报
ソi苆僞lè袮 发表于 2014-6-30 00:44
创建了一个Student类型的变量s,但是它的对象的引用是空的
既然它指向的是空的对象,就不能去操作它,调用 ...

:handshake
回复 使用道具 举报
on-on 发表于 2014-6-30 09:29
如果s==null,则创建对象如果改成s!=null,则创建对象,那么当s==null的时候,不创建对象,后面调用s的时 ...

:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马