静态数据的初始化

package me.ybleeho;
class Bowl{
    Bowl(int marker){
        System.out.println("Bowl"+marker);
    }
    void f1(int marker){
        System.out.println("f1"+marker);
    }
}
class Table{
    static Bowl bowl1=new Bowl(1);
    Table(){
        System.out.println("Table()");
        bowl2.f1(1);
    }
    void f2(int marker){
        System.out.println("f2"+marker);
    }
    static Bowl bowl2=new Bowl(2);
}
class Cupboard{
    Bowl bowl3=new Bowl(3);
    static Bowl bowl4=new Bowl(4);
    Cupboard(){
        System.out.println("Cupboard()");
        bowl4.f1(2);
    }
    void f3(int marker){
        System.out.println("f3"+marker);
    }
    static Bowl bowl5=new Bowl(5);
}
public class StaticInitialization {
    public static void main(String []args){
        System.out.println("Creating new Cupboard in main()");
        new Cupboard();
        System.out.println("Creating new Cupboard in main()");
        new Cupboard();
        table.f2(1);
        cupboard.f3(1);
    }
    static Table table=new Table();
    static Cupboard cupboard=new Cupboard();
}

输出:

Bowl1
Bowl2
Table()
f11
Bowl4
Bowl5
Bowl3
Cupboard()
f12
Creating new Cupboard in main()
Bowl3
Cupboard()
f12
Creating new Cupboard in main()
Bowl3
Cupboard()
f12
f21
f31

静态初始化只有在必要时进行。初始化顺序是静态对象然后非静态对象。

时间: 2024-12-22 00:53:10

静态数据的初始化的相关文章

C++类中常量数据成员和静态数据成员初始化

常量数据成员初始化原则: 在每一个构造函数的初始化列表中初始化 静态数据成员初始化原则: 类内声明,类外初始化(因为它是属于类的,不能每构造一个对象就初始化一次) // test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> #include <vector> using namespace std; class A { public: A(int i):a(0) {} A():

static静态数据的初始化

package com.demo.book; public class StaticInitialization { static Table table = new Table(); static Cupboard cupboard = new Cupboard(); public static void main(String[] args) { new Cupboard(); new Cupboard(); table.f2(3); cupboard.f3(1); } } class Bo

JAVA编程思想(第4版) 静态数据的初始化

无论创建多少个对象,静态数据永远只占用一份存储空间.static关键字不能应用于局部变量,因此它只能作用于域.如果一个域是静态的基本类型域,且没有对它进行初始化,那么它就会获得基本类型的标准初值,而如果它是一个对象的引用,则默认初始值为null.例子如下: package test; class Bowl{ Bowl(int marker){ System.out.println("Bowl("+marker+")"); } void f1(int marker){

类的静态数据成员初始化问题

1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形const或枚举型const,则可以在类声明中初始化. C++ primer plus P426-P427类静态成员的声明和初始化 //strnbad.h class StringBad { private: static int num_strings; … }; //strnbad.cpp int StringBad::num_strings = 0; 不能在类声

关于静态数据的初始化顺序问题

//代码如下,摘自java编程思想: class Bowl { Bowl(int maker) { System.out.println("Bowl(" + maker + ")"); } void f1(int maker) { System.out.println("f1(" + maker + ")"); } } class Table { static Bowl bowl1 = new Bowl(1); Table()

c++:静态数据成员

一 . 静态数据成员 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其它数据成员一样,静态数据成员也遵守public/protected/private访问规则.同时,静态成员还具有以下特点: 1. 静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义不应该被放在头文件中.静态数据成员初始化时不受private和protected访问限制. 注意:不要试图在头文件中定义静态数据成员.在大多数情况下,这样做会引起重复定义这样

静态数据成员和函数

静态数据成员 类是类型而不是具体的数据对象,类的对象都是该类的实例,每个类对象都具有自己的数据成员,而且是相互独立,各占内存空间.然而,程序中往往需要让类的所有对象在类的范围内共享某个数据.声明为static的类成员能够在类的范围中共享,称之为静态成员. 一.全局变量与静态数据成员 希望在同类的多个对象之间实现数据共享,可以用静态的数据成员实现. 使用静态数据成员不会破坏隐藏的原则,即保证了安全性. 二.静态数据成员特点 在每个类中只有一个拷贝,由该类的所有对象共同维护和使用静态数据成员的值对每

C++静态数据成员与静态成员函数

一般情况下,如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有,这样可以实现数据共享. 可以使用全局变量来达到共享数据的目的.例如在一个程序文件中有多个函数,每一个函数都可以改变全局变量的值,全局变量的值为各函数共享.但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶然失误,全局变量的值就被修改,导致程序的失败.因此在实际工作中很少使用全局变量. 如果想在同类的

C++中的静态数据成员的作用与好处

静态成员如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有.这样可以实现数据共享. 在前面介绍过全局变量能够实现数据共享. 如果在一个程序文件中有多个函数,在每一个函数中都可以改变全局变量的值,全局变量的值为各函数共享.但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶一失误,全局变量的值就被修改,导致程序的失败.因此在实际工作中很少使用全局变量. 如果想在同类