Java编程思想第四版 5.7.2 静态数据初始化

无论创建多少个对象,静态数据只占用一份存储区域,也就是说static关键字不能应用于局部变量,且只初期化一次。

package java_5;

import java.Print;

public class Bowl {
    Print p = new Print();
    Bowl(int i){
        p.printl("Bowl(" + i + ")");
    }
    void f1(int i){
        p.printl("f1(" + i + ")");
    }
}

package java_5;

import java.Print;

public class Table {
    Print p = new Print();
    static Bowl bowl1 = new Bowl(1);
    Table(){
        p.printl("Table()");
        bowl2.f1(1);
    }
    void f2(int i){
        p.printl("f2(" + i + ")");
    }
    static Bowl bowl2 = new Bowl(2);
}

package java_5;

import java.Print;

public class Cupboard {
    Print p = new Print();
    Bowl bowl3= new Bowl(3);
    static  Bowl bowl4 = new Bowl(4);
    Cupboard(){
        p.printl("Cupboard()");
    }
    void f3(int i){
        p.printl("f3(" + i + ")");
    }

    static  Bowl bowl5 = new Bowl(4);
}


package java_5;

import util.Print;

public class StaticInitialization {
    static Print p = new Print();
    public static void  main(String[] args){
        p.printl("Creat new Cupboard() in main");
        new Cupboard();
        p.printl("Creat new Cupboard() in main");
        new Cupboard();
        table.f2(1);
        cupboard.f3(1);
        /**
         * 控制台输出结果
         Bowl(1)
         Bowl(2)
         Table()
         f1(1)
         Bowl(4)
         Bowl(4)
         Bowl(3)
         Cupboard()
         Creat new Cupboard() in main
         Bowl(3)
         Cupboard()
         Creat new Cupboard() in main
         Bowl(3)
         Cupboard()
         f2(1)
         f3(1)
         */
    }
    static  Table table = new Table();
    static Cupboard cupboard = new Cupboard();
}

静态变量只初期化一次所以bowl(3)会一直被初始化,而bowl1,2,4,5不会.
初始化的顺序:静态对象,非静态对象。
创建对象过程:
假设有Dog的类。
1.及时没有显示的使用static关键字,高早起实际上也是静态方法。首次创建dog对象,或者Dog类的静态方法/静态域首次被访问时,java解释器必须查找类路径,一定为dog.class文件。
2.然后载入Dog.class,有关静态初始化所有动作都会执行。因此静态初始化只在class对象首次加载的时候进行一次。
3.new Dog()创建对象的时候,首先将在堆上分配足够的存储空间。
4.这块儿存储空间会被清零,这就是自动将Dog对象中所有基本类型数据都设置成了默认值,而引用则被设置成null。
5.之行所有出现雨字段定义处的初始化动作。
6.执行构造器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值