静态数据的初始化(Chapter5.7.2)
先初始化主类中的静态数据,如果要用其他类来定义对象,则初始化对应的其他类。
实例化对象时,先初始化定义为static的数据,接着调用父类的构造函数(如果有父类),再初始化定义为非static的数据,最后调用该类的构造函数。见http://www.cnblogs.com/HITSZ/p/6385271.html
通过一个小程序,了解静态数据是如何初始化的:
//: initialization/StaticInitialization.java
// Specifying initial values in a class definition.
import static net.mindview.util.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();
} /*
* Output:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
*/// :~
初始化顺序:要执行main,必须先加载StaticInitialization类,然后其静态域table和cupboard被初始化,这将导致它俩对应的类(Table,Cupboard)也被加载;
Table类和Cupboard类含有Bowl类的静态对象,这会导致Bowl类被加载;
这样,在这个特殊的程序中,所有类在main()开始之前就都被加载了。但实际情况通常并非如此,因为在典型的程序中,不会像在本例中所做的那样,将所有的事物都通过static联系起来。
构造函数没有使用static关键字,是隐式声明为static的。
静态数据的初始化(Chapter5.7.2)的更多相关文章
- Java中静态数据的初始化顺序
Java的类中的数据成员中包含有静态成员(static)时,静态数据成员的初始化顺序是怎样的呢? [程序实例1] import java.util.*; import java.lang.*; imp ...
- Java静态数据的初始化
Java中无论创建多少对象,静态数据都只占一份存储区域. 下面程序示例静态存储区域的初始化: //: initialization/StaticInitialization.java // Speci ...
- JAVA静态数据的初始化;
①:Java首次会自动对变量进行初始化,其顺序优于构造器: ②:如果一个域是静态的的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初值,如果它是一个对象引用,那么他的默认初始化值为n ...
- static静态数据的初始化
package com.demo.book; public class StaticInitialization { static Table table = new Table(); static ...
- 静态数据成员(面向对象的static关键字)
静态数据成员: 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.先举一个静态数据成员的例子. #include<iostream> using namesp ...
- C++静态数据成员与静态成员函数
一般情况下,如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有,这样可以实现数据共享. 可以使用全 ...
- 转:C语言中的static变量和C++静态数据成员(static member)
转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量 a.静态局部变量在函数内定义,生存期为整个程序 ...
- C++中静态数据成员
类的静态成员不能由类的构造函数来初始化.因为即使不存在类的任何对象时,类的静态成员依然存在并且可以被使用.类的静态成员也不能访问任何类的非静态成员. 类名和类对象都可以直接调用静态数据成员.因为静态数 ...
- C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)
知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...
随机推荐
- Ajax原理、优缺点及应用场景
前言 Ajax的全称为Asynchronous JavaScript And Xml,是一种web客户端与服务器端异步通信的技术,如今,可以说是web开发人员必须掌握的的一项技能了.本文讲述了Ajax ...
- 定义 : angular view 和controller 之前的 ng-init 由谁来负责
在设计view时,会需要default的值,这是会去下ng-init,但是如果发现ng-init没有,这时controller就会有. 概念是当ctrl要用时,就由ctrl负责.
- 第22篇 js中的this指针的用法
前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() { thi ...
- php和js中,utf-8编码转成base64编码
1.php下转化base64编码 php中,文本文件的编码决定了程序变量的编码,比如以下代码在不同编码的php文件中,展示的效果也是不一样的 <?php $word = '严'; echo ba ...
- 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...
- debian/ubuntu部署java应用小结
近期改的Java应用即将部署,为了强强联合,需要把Java应用部署到linux,我们选择了debian系列.小结一下部署的大致过程,如下: Ubuntu已经默认安装了OpenJDK,但还是比较倾向官方 ...
- html to pdf
C++ Library to Convert HTML to PDF html2pdf PrinceXML 收费 CutePDF Ghostscript PDFDoc VisPDF PDFDoc Sc ...
- Leetcode_001_TwoSum_求和为固定数的两个数的索引
题目描述 给定一个整型数组,在数组中找出两个数使这两个数的和为给定数,从小到大输出这两个数在数组中的位置(我们可以假定输出结果只有一个).例如,输入:N={1,4,8,20}, target=1 ...
- mac上的kindle打开mobi文件的方式
刚刚在macpro上下载了一个kindle文件,但是双击我某个目录下的.mobi文件,提示: “Kindle”打不开格式为“Kindle Document”的文件,可是明明手机和pad上是可以打开的. ...
- android国际化
语言的国际化 为了提供不同语言的版本,只需要在res中新建几个values文件夹就行 不过文件夹有自己的命名规则 values-语言代码-r国家或者地区的代码 然后我们只需要将不同语言的string. ...