[Think in Java 笔记] 静态数据(Static data)的初始化
2005-03-09 22:39
597 查看
<Think in Java>中的一个例子:
--------------------------------------------------------------
//From 'Thinking in Java, 2nd ed.' by Bruce Eckel
//www.BruceEckel.com. See copyright notice in CopyRight.txt.
//Specifying initial values in a
//class definition.
class Bowl {
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
class Table {
static Bowl b1 = new Bowl(1);
Table() {
System.out.println("Table()");
b2.f(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
static Bowl b2 = new Bowl(2);
}
class Cupboard {
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl b5 = 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();
t2.f2(1);
t3.f3(1);
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
}
运行结果:
--------------------------------------------------------------
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)
由此可知:
1.如果Static 对象没初始化,则先初始Static对象,然后才是Non-Static 对象;
2.Static对象只会在首次被装载时会被初始化,以后不会再初始;
--------------------------------------------------------------
//From 'Thinking in Java, 2nd ed.' by Bruce Eckel
//www.BruceEckel.com. See copyright notice in CopyRight.txt.
//Specifying initial values in a
//class definition.
class Bowl {
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
class Table {
static Bowl b1 = new Bowl(1);
Table() {
System.out.println("Table()");
b2.f(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
static Bowl b2 = new Bowl(2);
}
class Cupboard {
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl b5 = 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();
t2.f2(1);
t3.f3(1);
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
}
运行结果:
--------------------------------------------------------------
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)
由此可知:
1.如果Static 对象没初始化,则先初始Static对象,然后才是Non-Static 对象;
2.Static对象只会在首次被装载时会被初始化,以后不会再初始;
相关文章推荐
- 静态数据的初始化(Think in java P95页代码解析)
- [Think in java]静态数据的初始化
- [Think in java]静态数据的初始化
- Think in java学习笔记-第4章 初始化和清除
- Thinking in java 之:静态数据的初始化及初始化顺序
- Think in Java第5章 初始化与清理 (笔记)
- 【think in java 笔记1】java变量初始化顺序
- java in think 4 13.6 正则表达式笔记1
- Java基础知识—— 静态数据的初始化(含初始化顺序)
- 读"Think in Java"后笔记(1)
- Think in Java(二):初始化与清理
- think_in_java--笔记
- Think in Java 笔记_Chapter12_1_Exception基础_异常处理3_自定义异常以及抛出多个异常的处理
- Java中静态数据的初始化顺序
- day4 part1:《Thinking in Java》笔记第五章---初始化与清理
- think in java笔记:java.util.concurrent.Semaphore
- [Think in java]初始化及类的加载——继承与初始化
- Think in Java笔记(一)
- think in java 笔记
- 【笔记】Think in Java 对象导论