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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Demo4_Car {
        public static void main(String[] args) {
                Car c = new Car();
                c.color = "red";
                c.num = 8;
                System.out.println(c.color + "....." + c.num);
                c = null;
                c.run();
                结果会是空指针异常,run方法既然里面的东西只是一个字符串而已,没有去调用对象的属性,为什么当对象地址值被赋予空的时候就会空指针异常呢?
               也就是说如果run方法是System.out.println(num + "......" + color),那么当c被赋值为null的时候,因为地址值被赋值空了,所以没法调用对象里的属性,所以才会出现空指针异常,但是run方法里只是一个与对象不相关的字符串的时候,把对象地址值赋值为空以后,输出结果还是空指针异常呢?
        }
}
class Car {
        String color;
        int num;
        public void run() {
                System.out.println("车辆运行");
        }
}

6 个回复

倒序浏览
Johnliao190123 来自手机 初级黑马 2016-9-5 12:22:16
沙发
没人回复啊???很难吗???
回复 使用道具 举报
run方法是对象的功能,对象都没了 还怎么调用
回复 使用道具 举报
举个例子吧,比如说你家里面有一台洗衣机,而这个洗衣机的功能就是洗衣服(即你说的run()方法),当你把这台洗衣机卖掉的时候(就相当于c = null),即你家里就没有了这个洗衣机了,那么当你再想使用这个洗衣机洗衣服的功能时.那么呢,你就会想到家里面已经没有洗衣机了.同样的道理,java虚拟机也会报出空指针异常啦.
回复 使用道具 举报
问题出在,调用方法,要用到对象。
方法调用本身就是对象.方法进行调用,当然静态方法除外,可以类名调用。
当null指向空指针了,什么都没有,也就谈不上run方法了。
比如你写的代码,c本来指向一个对象,对象调用方法当然可以了。对象在堆内存中建立,之后把地址值赋给c,进行调用。当方法是静态的时候,那就是在方法在内存中方法区中,可以进行类名.方法调用。
当赋值为null时,是找不到run方法的,都找不到run方法,那不管run方法里面是什么,你都执行不了的
回复 使用道具 举报 1 0
相当感谢,原来是理解上的不到位!
回复 使用道具 举报
指针的底层就是返回null时异常,而你就直接给null,它直接判断是否==null,然后返回null就异常了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马