java惰性初始化的小例子

1、为什么要有使用惰性初始化:
   因为类中为基本类型时,能够自动被初始化为0,但是对象引用会被初始化为null。编译器不是简单的为每一个引用创建对象创建默认对象,这一点是很有用的,因为真要那样的话,会在很多情况下增加很多开销。那么如果想初始化这些引用,就可以在代码中的很多位置进行,其中“惰性初始化”是其中的一种方式。
2、代码如下:[看的别人的代码,自己又敲了一遍,深入理解了一下]
/**
 * Created by cxh on 16/11/8.
 */
class Simple{
    String s;
    public Simple(String si){s=si;}//构造函数,内部为构造变量赋值
    public String toString(){return s;}//复写
    public void setString(String sstr){s=sstr;}//普通函数
}

class Second{
    Simple simple;
    String s;
    public Second (String si){s=si;}//构造函数,内部为变量赋值

    public void check()//单纯检测simple是否已经创建.
    {
        if(simple==null)
            System.out.println("simple is not initlized");
        else
            System.out.println("simple is initlized");
    }
    private Simple lazy()//检测simple是否已经创建,如果没有创建就创建一个
    {
        if(simple==null){
            System.out.println("simple is creating");
            simple=new Simple(s);
        }
        return simple;
    }
    public Simple getSimple() //获取simple的值
    {
        return lazy();
    }
    public void setSimple(String sNew) //设定simple的值
    {
        lazy().setString(sNew);
    }
    public  String toString()   //复写tosring()方法,输出
    {
        return lazy().toString();
    }
}

public class testLazy {
    public static void main(String[] args)
    {
        Second second=new Second("intit String");
        second.check();
        //输出:simple is not initlized
        //同时为second类中的变量s赋值为:s="intit String"
        System.out.println(second.getSimple());
        //创建simple,为simple赋值:simple="intit String"
        //输出:simple is creating
        //    intit String
        second.check();
        //输出:simple is initlized
        second.setSimple("New String");
        //输出:intit String
        System.out.println(second);
        //输出:New String
    }
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值