Thinking in java-20 Java 初始化

来源:互联网 发布:19s管理淘宝 编辑:程序博客网 时间:2024/05/29 15:27

Java 语言不厌其烦地试图保证变量在使用之前被合适地进行过初始化。

  • 对于类中的变量,未被显式初始化的变量会被初始化为其默认值;
  • 而对于方法中的变量,如果没有主动初始化,则编译器会以报错的方式保证变量初始化。

1.顺序初始化

在类内部,变量初始化的顺序是由其在类中的位置定义的。变量定义可能分散在类中各处,但是变量总是在任何方法被调用之前被初始化–甚至是构造函数。

package thinking.initialization;import static fqy.iss.utils.Print.print;public class OrderOfInitialization{    public static void main(String[] args)    {        House h = new House();        h.f();    }}class Window{    Window(int marker)    {        print("Window(" + marker + ")");    }}class House{    Window w1 = new Window(1);    House()    {        print("House()");        w3 = new Window(33);    }    Window w2 = new Window(2);    void f()    {        print("f()");    }    Window w3 = new Window(3);}//resultWindow(1)Window(2)Window(3)House()Window(33)f()

2.有静态数据情形

package fqy.iss.thinking.initialization;import static fqy.iss.utils.Print.print;class Bowl{    Bowl(int marker)    {        print("Bowl(" + marker + ")");    }    void f1(int marker)    {        print("f1(" + marker + ")");    }}class Table{    static Bowl bowl1 = new Bowl(1);    Table()    {        print("Table()");        bowl2.f1(1);    }    void f2(int marker)    {        print("f2(" + marker + ")");    }    static Bowl bowl2 = new Bowl(2);}class Cupboard{    Bowl bowl3 = new Bowl(3);    static Bowl bowl4 = new Bowl(4);    Cupboard()    {        print("Cupboard()");        bowl4.f1(2);    }    void f3(int marker)    {        print("f3(" + marker + ")");    }    static Bowl bowl5 = new Bowl(5);}public class StaticInitialization{    public static void main(String[] args)    {        print("Creating new Cupboard() in main");        new Cupboard();        print("Creating new Cupboard() in main");        new Cupboard();        table.f2(1);        cupboard.f3(1);    }    static Table table = new Table();    static Cupboard cupboard = new Cupboard(); }//resultBowl(1)Bowl(2)Table()f1(1)Bowl(4)Bowl(5)Bowl(3)Cupboard()f1(2)Creating new Cupboard() in mainBowl(3)Cupboard()f1(2)Creating new Cupboard() in mainBowl(3)Cupboard()f1(2)f2(1)f3(1)
  1. 静态数据仅仅被加载一次,只有一处副本存在;
  2. 类中数据初始化顺序是:静态数据按顺序初始化,然后是非静态数据顺序初始化,然后才执行构造函数。

2. 静态数据块初始化

package fqy.iss.thinking.initialization;import static fqy.iss.utils.Print.print;class Cup{    Cup(int marker)    {        print("Cup(" + marker + ")");    }    void f(int marker)    {        print("f(" + marker + ")");    }}class Cups{    static Cup cup1;    static Cup cup2;    static    {        cup1 = new Cup(1);        cup2 = new Cup(2);    }    Cups()    {        print("Cups()");    }}public class ExplicitStatic{    public static void main(String[] args)    {        print("Inside main()");        Cups.cup1.f(99); // (1)    }    // static Cups cups1 = new Cups(); // (2)    // static Cups cups2 = new Cups(); // (2)}//resultInside main()Cup(1)Cup(2)f(99)
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三星j3系统坏了怎么办 金立手机黑屏了怎么办 金立手机死机了怎么办 促卵泡生成素偏高怎么办 促卵泡成熟素偏高怎么办 促卵泡生成素100怎么办 路虎冷却液过低怎么办 强制险过期4个月怎么办 摩托车5年没年检怎么办 大事故定损不够怎么办 125摩托钥匙丢了怎么办 刺猬上的蜱虫怎么办 被宠物貂咬了怎么办 狗狗细小后咳嗽怎么办 十字绣丝线太滑怎么办 地垫与地面打滑怎么办 强电和水管交叉怎么办 小丫一个黄大怎么办 用友加密狗丢了怎么办 吸费软件扣费怎么办 我接了95515电话怎么办 硬盘没有4k对齐怎么办 梦幻西游鬼区了怎么办 移动4g信号不好怎么办 手机4g信号不好怎么办 家里4g信号不好怎么办 小孩流鼻涕怎么办最简单方法 猫鼻子摔出血了怎么办 让野猫挠出血了怎么办 家养猫咬出血了怎么办 被小猫抓出血了怎么办 猫咪指甲剪多了怎么办 猫咪指甲剪很了怎么办 家里的公猫老叫怎么办 猫生小猫没有奶怎么办 小孩凉了胃呕吐怎么办 母猫配种不配合怎么办 狗狗肚子有硬块怎么办 狗狗身上有硬块怎么办 小猫和大猫打架怎么办 大猫对小猫哈气怎么办