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时调用给对象的属性或方法

    谨以此文献给超越人类的乐乐同志!

  • 相关阅读:
    跳出语句 break continue
    循环语句 for循环、while循环、do while循环
    选择语句
    判断语句
    方法入门
    ++运算与--运算
    js面向对象的几种方式----工厂模式、构造函数模式、原型模式
    JavaScript This 的六道坎
    前端必备,十大热门的 JavaScript 框架和库
    localStorage、sessionStorage详解,以及storage事件使用
  • 原文地址:https://www.cnblogs.com/wangzheand/p/5193852.html
Copyright © 2011-2022 走看看