小组Java
  • 小白自学java,请教一个问题,关于用类名声明变量的问题

    2016/08/28 南波万 17 评论

例如我创建了一个类

这个变量 k 是什么意思?在内存中如何分配?

多谢解答!

1 收藏


直接登录
最新评论
  • 南波万 Android 2016/08/28

    总觉得之前看到过这个知识点,可是回过头翻看视频却怎么也找不到,百度也搜不到。或者说搜到了但我看不懂?

    以后得及时整理笔记。免得再有类似的事情发生

  • micro 软件攻城狮 2016/08/28

    k是一个地址引用,存放在JVM运行数据环境的栈区,指向堆内存上的对象。

    • micro 软件攻城狮 2016/08/28

      当然,你这里没new对象,指向null,基本类型有默认值,不过基本类型包装类也是null

      • 南波万 Android 2016/08/28

        那么当实例化以后是指向自身吗?

      • 南波万 Android 2016/08/28

        当在另一个类中将 Kid 实例化,并且赋给 k 一个Kid类型的值,那么 k 是指向已经 new 的这个对象?还是指向一个新 new 出来的对象呢?

         

        感觉自己有点表达不清,有点混

      • 南波万 Android 2016/08/28

        感谢 ,突然开窍了。Kid 类型的变量只能被赋值一个 Kid 对象的引用,所以赋值给他什么引用他就指向哪个对象。不知对不对

        • micro 软件攻城狮 2016/08/29

          Java没有指针而是用引用代替了,Java传递的都是引用,很多时候表现为值调用是因为修改对象的函数获得了对象的句柄(引用),堆栈的内存分布,存放结构属于Java高级特性,GC也是很重要的一块,推荐《深入理解Java虚拟机》。

  • 天地一沙鸥 软件工程师 2016/08/28

    k是类Kid的一个对象,JVM在栈中为这个对象分配内存空间,未做实例化的时候,它指向null。

    • 南波万 Android 2016/08/28

      那么当实例化以后是指向自身吗?

      • 天地一沙鸥 软件工程师 2016/08/28

        实例化的时候,是通过new关键字实例化,在堆区开辟内存空间(此时会有一个堆区内存空间地址),栈中的对象引用变量就会在实例化后指向这个堆地址。(纠正之前的说法,k确切地应该叫做对象引用变量,没做实例化的时候,该变量指向null;通过new关键字实例化之后,该变量则指向一个堆内存空间)

    • 南波万 Android 2016/08/28

      感谢 ,突然开窍了。Kid 类型的变量只能被赋值一个 Kid 对象的引用,所以赋值给他什么引用他就指向哪个对象。不知对不对

      • Michael   2016/08/28

        准确的说,Kid 类型的变量只能被赋值一个 Kid 类型对象的引用,因为也可以被赋值一个Kid的子类型对象的引用,而子类对象可以当做父类使用

  • 龙雀 野生程序员 2016/08/28

    k是Kid实例的引用。并不是嵌套叠在一起的。

  • Forrest 游戏 2016/09/07

    k是存放在栈中的一个引用,当前是null, 当赋值后k的值为Kid的某个实例在堆中的地址