关于静态变量的问题

uestctsg 2009-07-20 09:48:14
下面这段代码是java编程思想中的一段。
package c04;

//: c04:StaticInitialization.java
// Specifying initial values in a class definition.
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
import com.bruceeckel.simpletest.*;

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 {
static Test monitor = new Test();
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new Cupboard();//(1)
System.out.println("Creating new Cupboard() in main");
new Cupboard();//(2)

t2.f2(1);
t3.f3(1);
monitor.expect(new String[] {
"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)"
});
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
} ///:~
上面(1)、(2)两处new Cupboard()的时候为什么没有new Bowl呢?
因为static Bowl可以重复赋值,所以我想new多个Cupboard()的时候是不是每次都要给bowl赋值一次呢?那样的话就应该有相关的输出才对呀。有点不解
...全文
160 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
linhui9010 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 izard999 的回复:]
静态成员是属于类的,实例成员是属于对象的.  静态成员只在类加载的时候初始化一次,与创建多少次对象没有关系,所有的对象都共用一个静态的成员,但是实例成员每个对象都有自己的实例成员.!
[/Quote]
嗯!
静态成员是属于类的,实例成员是属于对象的,所有类的实例共享的啊。
plmxsyuts6 2009-07-26
  • 打赏
  • 举报
回复
所有实例共享一个
可以看看这里
http://blog.sina.com.cn/s/blog_4ab057eb0100eary.html
izard999 2009-07-26
  • 打赏
  • 举报
回复
静态成员是属于类的,实例成员是属于对象的. 静态成员只在类加载的时候初始化一次,与创建多少次对象没有关系,所有的对象都共用一个静态的成员,但是实例成员每个对象都有自己的实例成员.!
iefus 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 virus7581 的回复:]
static成员只在类被第一次加载的时候初始化,而且只初始化一次,与对象实例化与否无关;
[/Quote]
是这样
  • 打赏
  • 举报
回复
学习中~~
chenql175 2009-07-26
  • 打赏
  • 举报
回复
学习学习
xucan2087 2009-07-24
  • 打赏
  • 举报
回复
virus7581 2009-07-24
  • 打赏
  • 举报
回复
static成员只在类被第一次加载的时候初始化,而且只初始化一次,与对象实例化与否无关;
xlxyeyu 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hahapigzhu 的回复:]
static成员是只能初始化一次的,第一次初始化后,以后不会再初始化
[/Quote]

static类型的是类的属性,而其他的则是对象的属性!
hahapigzhu 2009-07-24
  • 打赏
  • 举报
回复
static成员是只能初始化一次的,第一次初始化后,以后不会再初始化
clihean 2009-07-24
  • 打赏
  • 举报
回复
static Bowl是类属性,所有的类实例共享,每次new Cupboard()不需要给bowl赋值。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧