加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java惰性初始化的小例子

发布时间:2020-12-14 06:37:20 所属栏目:Java 来源:网络整理
导读:pre style="font-family:Menlo;font-size:9pt;"span style="color:#808080;" 1、为什么要有使用惰性初始化: pre style="font-family:Menlo;font-size:9pt;"span style="color:#808080;" 因为类中为基本类型时,能够自动被初始化为0,但是对象引用会被初始化

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

<span style="color:#000080;">class Second{
Simple <span style="color:#660e7a;">simple;
String <span style="color:#660e7a;">s;
<span style="color:#000080;">public Second (String si){<span style="color:#660e7a;">s=si;}<span style="color:#808080;">//构造函数,内部为变量赋值
<span style="color:#808080;">
<span style="color:#808080;"> <span style="color:#000080;">public void check()<span style="color:#808080;">//单纯检测simple是否已经创建.
<span style="color:#808080;"> {
<span style="color:#000080;">if(<span style="color:#660e7a;">simple==<span style="color:#000080;">null)
System.<span style="color:#660e7a;">out.println(<span style="color:#008000;">"simple is not initlized");
<span style="color:#000080;">else
<span style="color:#000080;"> System.<span style="color:#660e7a;">out.println(<span style="color:#008000;">"simple is initlized");
}
<span style="color:#000080;">private Simple lazy()<span style="color:#808080;">//检测simple是否已经创建,如果没有创建就创建一个
<span style="color:#808080;"> {
<span style="color:#000080;">if(<span style="color:#660e7a;">simple==<span style="color:#000080;">null){
System.<span style="color:#660e7a;">out.println(<span style="color:#008000;">"simple is creating");
<span style="color:#660e7a;">simple=<span style="color:#000080;">new Simple(<span style="color:#660e7a;">s);
}
<span style="color:#000080;">return <span style="color:#660e7a;">simple;
}
<span style="color:#000080;">public Simple getSimple() <span style="color:#808080;">//获取simple的值
<span style="color:#808080;"> {
<span style="color:#000080;">return lazy();
}
<span style="color:#000080;">public void setSimple(String sNew) <span style="color:#808080;">//设定simple的值
<span style="color:#808080;"> {
lazy().setString(sNew);
}
<span style="color:#000080;">public String toString() <span style="color:#808080;">//复写tosring()方法,输出
<span style="color:#808080;"> {
<span style="color:#000080;">return lazy().toString();
}
}

<span style="color:#000080;">public class testLazy {
<span style="color:#000080;">public static void main(String[] args)
{
Second second=<span style="color:#000080;">new Second(<span style="color:#008000;">"intit String");
second.check();
<span style="color:#808080;">//输出:simple is not initlized
<span style="color:#808080;"> //同时为second类中的变量s赋值为:s="intit String"
<span style="color:#808080;"> System.<span style="color:#660e7a;">out.println(second.getSimple());
<span style="color:#808080;">//创建simple,为simple赋值:simple="intit String"
<span style="color:#808080;"> //输出:simple is creating
<span style="color:#808080;"> // intit String
<span style="color:#808080;"> second.check();
<span style="color:#808080;">//输出:simple is initlized
<span style="color:#808080;"> second.setSimple(<span style="color:#008000;">"New String");
<span style="color:#808080;">//输出:intit String
<span style="color:#808080;"> System.<span style="color:#660e7a;">out.println(second);
<span style="color:#808080;">//输出:New String
<span style="color:#808080;"> }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读