请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术发帖,必有回复! 做最受欢迎的Java论坛

疯狂Java联盟

 找回密码
 加入联盟
查看: 97|回复: 12

疯狂Java书上6.3.2章节,关于单例的疑问

[复制链接]
发表于 2017-11-28 04:31:45 | 显示全部楼层 |阅读模式
public class Singleton{
     private static Singleton singleton;
     private Singleton(){
    }
     public Singleton getInstance(){
             if(Singleton==null){
                 singleton=new Singleton();
               }      
            return singleton;
      }
}

我的问的是  static修饰的实例,在内存里面,这个实例到底是在栈里面,还是在堆里面 还是在方法区里面??
因为是成员变量,所以不可能是栈
但是如果在堆里面的话,加了static修饰,不是应该放到方法区,延长生命周期吗??
如果是放方法区里面,除了一些概念性的讲解外,能有什么工具能够看到内存里面存储的东西吗??
还望各位老师指导
发表于 2017-11-28 11:49:23 | 显示全部楼层
加了static依然在堆啊,怎么会跑到栈里面去呢?
只要是你new出来的对象,它们都在堆里面。

static修饰的成员变量,它是属于类本身的,因此只要这个类还存在,那么这个static成员变量总是存在的
——在G1垃圾回收器依然,static修饰的类变量,会直接进入堆内存的永生代,这意味着static修饰的成员永远不会被回收。所以以前的垃圾回收器可能导致POM异常,后来G1垃圾回收器才对此进行了改进。
 楼主| 发表于 2017-11-28 13:33:01 | 显示全部楼层
kongyeeku 发表于 2017-11-28 11:49
加了static依然在堆啊,怎么会跑到栈里面去呢?
只要是你new出来的对象,它们都在堆里面。

普通的(对象 实例=new对象), 对象在堆,实例在栈
这种单利,实例作为成员变量,然而成员变量是在堆里面,又加了static,我记得static修饰的成员变量是在方法区,所以我就搞混了....
发表于 2017-11-28 15:21:31 | 显示全部楼层
再你的理解还是错误的。
Java中, 实例就是对象,对象就是实例。它们都在堆里。
 楼主| 发表于 2017-11-29 11:00:55 | 显示全部楼层
kongyeeku 发表于 2017-11-28 15:21
再你的理解还是错误的。
Java中, 实例就是对象,对象就是实例。它们都在堆里。 ...

老哥....刚哥貌似不是这么说的...
发表于 2017-11-29 12:20:21 | 显示全部楼层
啊?我就是刚哥啊。我能怎么说?
Java中,对象就是实例,实例就是对象。它们都是new出来的,它们都在堆里面。
 楼主| 发表于 2017-11-29 17:18:20 | 显示全部楼层
kongyeeku 发表于 2017-11-29 12:20
啊?我就是刚哥啊。我能怎么说?
Java中,对象就是实例,实例就是对象。它们都是new出来的,它们都在堆里面 ...

A a =new A();
我之前一直以为  A指是对象  a指的是实例
因为一直都听到他们说,new 对象 new对象...
原来A只是个类,a代表的对象,对象就是实例.
我的天...羞死个人
 楼主| 发表于 2017-11-29 17:46:00 | 显示全部楼层
igding 发表于 2017-11-29 17:18
A a =new A();
我之前一直以为  A指是对象  a指的是实例
因为一直都听到他们说,new 对象 new对象...

好像还是错的  A代表对象,同时也是实例,a代表的是对象的引用,或者说是实例的引用
 楼主| 发表于 2017-11-29 17:56:04 | 显示全部楼层
igding 发表于 2017-11-29 17:46
好像还是错的  A代表对象,同时也是实例,a代表的是对象的引用,或者说是实例的引用 ...

感觉还是不对
类 对象的引用= new 类();
"new 类()" 这一整套才代表对象
唉,白读几年书了,中国文化真的是博大精深
发表于 2017-11-29 18:41:29 | 显示全部楼层
igding 发表于 2017-11-29 17:46
好像还是错的  A代表对象,同时也是实例,a代表的是对象的引用,或者说是实例的引用 ...

A是类,new A()才会返回对象。
A a = new A()中a才是引用变量。
另外,少看“他们”说的,认真看《疯狂Java讲义》,可以避免少走很多弯路。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

视频、代码、电子书下载
请关注"疯狂图书"公众号
QQ交流1群: 545923995  未满

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11063141号 )

GMT+8, 2017-12-18 20:41 , Processed in 0.310983 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表