听完饿汉式课程后的问题
1、创建SingletonOne私有静态实例,
private static SingletonOne instance=new SingletonOne();
我理解给对象加private修饰符,限定声明对象并实例化只能在本类实现,出了本类在其他类无法对象实例化。但是为什么加static。加了static后就不是普通的该类对象了,老师能把instance叫做静态对象、类对象吗?
2、既然只能实例化唯一对象,final含有终极的意思,使用final修饰:final static SingletonOne instance=new SingletonOne();可以吗?
3、实例化对象,就是具体化一个实在的、being、存在的、不是模板的实体,老师我的理解对吗?
5、既然实例化对象,却又不传值,private static SingletonOne instance=new SingletonOne();。老师,在我的理解里,此时的对象跟空的没有区别,就像从Animal类里实例一只动物,没有名字年龄,算哪门子的实例?
6、创建公有静态方法返回静态实例对象这里,public static SingletonOne getInstance(),我理解得把对象返回到其他类里,不然对象只能在本类使用。但是为什么要给此方法添加static,使此方法成为静态方法?
7、都说单例模式只能有一个对象,那么在测试类里出现了两个SingletonOne的对象:
SingletonOne one =SingletonOne.getInstance();
SingletonOne two=SingletonOne.getInstance();
通过类名.方法名的形式:SingletonOne.getInstance();返回对象,再赋值给one和two,此时就有了两个对象了,还说单例模式有且只有一个对象,这是怎么回事?
正在回答
1、关于同学的第一个问题:为什么要加static,在类加载时,只创建一个对象是什么意思。
用static修饰的属性,会在加载这个SingletonOne类时,就执行这个
private static SingletonOne instance=new SingletonOne(); 这个句话,并且只执行一次,
换句话说,给你个场景想象一下:假如这个对象是一张图片
比如当你想引用一张图片时候,人家已经画好这个图片了(private static SingletonOne instance=new SingletonOne();),但是,这个是人家自己的版权(private),但是允许你使用
你可以直接通过 public static SingletonOne getInstance()这个方法拿到这个图片去用。
并且,你要想用图片,借来借去还是最初做好的这个图片,你再借多少遍,还是这张图片。
而static 修饰,就体现了,你在去借之前,人家已经做好了这个图片。人家构思这张图片的时候就做出来了。
2、关于同学说的第二个问题。
是的,创建实例是在 一开始就创建了的。同学可以理解为,你要在其他类中引用这个类的实例。
而java中有这样一个规定,同学这里可以先记住。使用static修饰的公有方法或公有属性,可以通过类名之间调用。退一步说,假如我们不给它用static修饰,它就得创建对象,用对象去调用方法,这就不符合我们的初衷了啊,我们的初衷就是不能让它可以随便就创建新的对象啊。所以,我们需要用static给它修饰一下,让它通过类名就可以调用,而不用创建对象。这里同学暂时记住就可以,可以通过类名直接调用static修饰的公有方法或static修饰的公有属性。
3、关于同学说的第三个问题是对的。
就好像,张三引用那张图片,李四也可以引用那张图片,但是无论多少个人引用这个图片,其实大家用的都是同一张图片。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
你好!分别回答你的问题:
1、使用static修饰在类加载时加载,并且只创建一个对象。
2、使用当前的修饰符已经可以限制对象唯一了,不需要再加final了
3、你的理解是对的
5、和空是有区别的,空是没有在内存创建对象,而你说的动物没有名字年龄,只是没有为属性设置值,但是实例是存在的。
6、是的,getInstance()方法会在其他类中调用,用于创建实例。因为我们要用类名去调用getInstance()方法,所以需要是静态方法
7、虽然创建了两个对象,但他们的内存地址一样,所以不论调用多少次getInstance()方法,得到的都是一个对象。
祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星