zoukankan      html  css  js  c++  java
  • 未将对象引用到实例

    对象为null时调用给对象的属性或方法

    “未将对象引用到实例”是很多像我一样的初学者经常遇到的一个问题,常常令人烦恼不已,那么这个问题是怎么发生的呢?先给大家看一张图,我们从这张图入手来分析这个错误造成的原因。

    Cache_-11696fb49a65ca67.

    可能很多人看到这样的代码会觉得可笑:”能写出这样的代码,看来此人的智商已“超越”人类的范畴了!“

    但是就是有某些内裤外穿的超人叔叔经常不间歇性的写出这样的代码、遇到这样的问题。

    从这张图上我们很容易看出Too.f1.array[i]是为null的,这时我们调用它的属性或方法是肯定会报错的!那为什么当对象为null时调用它的属性或方法会报错呢?

    我们都知道数组是引用类型,引用类型的数据值会存放在堆内存中在栈中存储的只是一串内存地址如图所示:

    image

    通过这张图我们可以看到它的属性是存放在堆内存中的,而对象为null就是指该对象没有在堆内存中开辟空间,也就没办法通过栈内存访问到存放在堆内存中的属性,所以系统运行时就会提示错误。

    引用类型数据赋给另一个同类型引用类型数据所带来的问题

    我们再来看一张图:

    image

    初看这多代码好像并没有什么“不妥”,语法上也没报错!但是运行时却出现了未将对象引用到实例的问题附图一张:

    image

    这又是怎么回事呢?我们前面说过栈内存中存储的是一串堆内存的内存地址。而sb=txt只是将数组txt在堆内存中的内存地址赋给了数组sb也就是说数组txt和数组sb在栈内存中存储的堆内存的内存地址是一样的,而txt[0]=null也就是将txt【0】对应的在堆内存中的空间给删除,而数组txt和数组sb是共用一样的堆内存中的内存地址所以数组sb【0】也没有对应的堆内存的内存空间所以会在运行时报错,原理请参照对象为null时调用给对象的属性或方法

  • 相关阅读:
    Android 自定义seekbar中,thumb被覆盖掉一部分问题
    Android SeekBar实现音量调节
    Android 设置thumb图片大小
    Android 图片处理方法
    Android 三档自定义滑动开关,禁止点击功能的实现,用默认的seekbar组件实现
    Android SeekBar自定义使用图片和颜色显示
    Android 使控件各占屏幕的一半
    Android ExpandableListView使用+获取SIM卡状态信息
    Android的5样的调试信息
    Js创建对象的做法
  • 原文地址:https://www.cnblogs.com/ldyblogs/p/null.html
Copyright © 2011-2022 走看看