A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜天伟 中级黑马   /  2012-12-15 22:54  /  1645 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜天伟 于 2012-12-16 13:28 编辑

关于单例设计模式  
这是代码
class Single
{
        private Single(){}
        private static Single s = new Single();
        public static Single getInstance()
        {
                return s;
        }
}
class SingleDemo
{
        public static void main(String[] args)
        {
                Single ss =Single.getInstance();
        }
}
我疑惑的是,private static Single s = new Single(); 这个是静态函数还是静态变量呢?
还有 这个是随着类的加载(读到Single)就运行建立对象呢,还是在读到.getInstance();时候才建立对象呢?


第二个问题 (跟这个就没关系了),非静态方法是存放在方法区的,它是什么时候存放的呢,是类一加载就跟静态方法一块存到方法区呢还是对象建立的时候存放进去的

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

4 个回复

倒序浏览
private static Single s = new Single(); 是本类对象,应该算是静态成员变量,你贴的这个代码的本类对象是随着类的加载就运行建立对象的。
若是在懒汉式的单利假设模式中,对象就是在方法被调用时才对对象进行加载,所以叫做延迟加载。
非静态方法是在对象建立的时候才存放进入方法区的。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
焦健 发表于 2012-12-15 23:45
private static Single s = new Single(); 是本类对象,应该算是静态成员变量,你贴的这个代码的本类对象是 ...

哦了:victory:
回复 使用道具 举报
本帖最后由 白良锦 于 2012-12-16 09:46 编辑

就楼主的第二个问题,说说:

静态代码块、构造代码块和构造函数的区别
静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
构造函数:  给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。
创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
在本类中创建私有静态的变量s (引用类型创建创建对象)
因为是类变量所以运行时加载
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马