3-4懒汉式

3-4懒汉式

public class Emperor {
     //定义私有构造方法
    private Emperor(){
        
    }
	 //定义私有静态类对象
    private static Emperor king==null;
    
	 //定义公有静态方法返回类内的私有静态对象
	public static Emperor getKing(){
	    if(king==null)
	    king = new Emperor();
	    return king;
	}	
}
public class Test {

    public static void main(String[] args) {
		System.out.println("创建1号皇帝对象");
		Emperor one=Emperor.getKing();
		
		System.out.println("创建2号皇帝对象");
                Emperor two=Emperor.getKing();
        
		System.out.println("创建3号皇帝对象");
		Emperor three=Emperor.getKing();
		
		System.out.println("三个皇帝对象依次是:");
		System.out.println(one);
		System.out.println(two);
		System.out.println(three);
    }
}

老师你好 懒汉式的方法我怎么没看懂呢?

  1. 代码需要优化吗

  2. 懒汉式就比饿汉式多了一个判断条件 是实例化的位置不同吗 懒汉是在获取的时候获得?

  3. 这两种方法仅仅是为了看是否共用一块地址吗?我不太理解这个练习的点在哪 是为了帮助熟悉这种模式的书写吗? 

  4. 我咋混了 这个方法主要做什么的 ?这是不是只要单纯记忆这种创建模式就行 具体在哪应用呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好!下面分别回答你的四个问题:

1、首先说一下代码中的编译错误,如下所示,==应改为=,=是赋值符号,表示将null赋值给king。其他代码没有问题,符合作业要求,不需要优化。

http://img1.sycdn.imooc.com//climg/5da5a51609080d4103620226.jpg

2、是实例化的时间不同,饿汉式是类加载的时候实例化,而懒汉式是使用的时候实例化。其实不止多了个判断条件,如下选中的代码,实例化对象的书写位置是不同的。

http://img1.sycdn.imooc.com//climg/5da5a5dd097231ee08500236.jpg

3、对于单例模式来说,都是只能获取一个对象。这两个练习题是为了让大家熟悉懒汉式和饿汉式写法的不同,在了解写法的同时,也要理解他们实例化对象的时间是不同的。

4、同学说的"这个方法"指的是什么?除了记忆懒汉式和饿汉式创建的代码,还要知道这么做的含义,以及什么时候加载。关于应用,主要用在只需要一个对象,并且该对象是唯一的这样的场景下。比如老师在2-1中介绍的打印机程序,还有我们练习中的国王。在当前阶段,同学可以先记住这些内容,在以后的框架学习中,还会看到单例模式的使用。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 慕后端4084011 提问者 #1
    我说的“这个方法”应该是指场景 听了最后两小节课有讲到 也谢谢老师的解释 明白了!
    2019-10-15 19:19:58
  • 好帮手慕柯南 回复 提问者 慕后端4084011 #2
    好的同学,明白就好~加油,祝学习愉快~
    2019-10-16 09:38:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师