黑马程序员技术交流社区

标题: 关于对象地址值被赋予null的问题 [打印本页]

作者: Johnliao190123    时间: 2016-9-5 00:03
标题: 关于对象地址值被赋予null的问题
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("车辆运行");
        }
}

作者: Johnliao190123    时间: 2016-9-5 12:22
没人回复啊???很难吗???
作者: yuanxianzhi    时间: 2016-9-5 13:53
run方法是对象的功能,对象都没了 还怎么调用
作者: LShu    时间: 2016-9-5 14:17
举个例子吧,比如说你家里面有一台洗衣机,而这个洗衣机的功能就是洗衣服(即你说的run()方法),当你把这台洗衣机卖掉的时候(就相当于c = null),即你家里就没有了这个洗衣机了,那么当你再想使用这个洗衣机洗衣服的功能时.那么呢,你就会想到家里面已经没有洗衣机了.同样的道理,java虚拟机也会报出空指针异常啦.
作者: lipengwei    时间: 2016-9-5 14:54
问题出在,调用方法,要用到对象。
方法调用本身就是对象.方法进行调用,当然静态方法除外,可以类名调用。
当null指向空指针了,什么都没有,也就谈不上run方法了。
比如你写的代码,c本来指向一个对象,对象调用方法当然可以了。对象在堆内存中建立,之后把地址值赋给c,进行调用。当方法是静态的时候,那就是在方法在内存中方法区中,可以进行类名.方法调用。
当赋值为null时,是找不到run方法的,都找不到run方法,那不管run方法里面是什么,你都执行不了的
作者: Johnliao190123    时间: 2016-9-7 12:32
相当感谢,原来是理解上的不到位!
作者: crossover    时间: 2016-9-7 12:49
指针的底层就是返回null时异常,而你就直接给null,它直接判断是否==null,然后返回null就异常了




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