请教java语言基础

singlehuang 2004-07-16 09:00:11
没见过这样的写法,不知道什么意思!
static {
String Buffer buf1 = new StringBuffer(100);
for (int i = 0; i < 3; i++) {
buf1.append(i);
}
...
}
请问static块内定义的部分有什么作用??这个静态块是不是只会被执行一次??
...全文
277 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jane000 2004-07-17
  • 打赏
  • 举报
回复
是的.
ntzls 2004-07-17
  • 打赏
  • 举报
回复
我理解错了,惭愧!
maowu 2004-07-17
  • 打赏
  • 举报
回复
静态是什么?静态部分的东西就是在虚拟机Load这个类的时候执行的东西。静态的对象也是这个时候初始化。
朋友别哭 2004-07-17
  • 打赏
  • 举报
回复
up
shadowDLL 2004-07-17
  • 打赏
  • 举报
回复
学习帮你UP,比较同意楼上的和8楼的!
ntzls 2004-07-17
  • 打赏
  • 举报
回复
在某些情况下使用此方法可提高效率,如用new方法生成如下一个对象
class MyObject{
int a;
int b=4;
AnotherObject ao1;
AnotherObject ao2;
static{
ao1 = new AnotherObject();
ao2 = new AnotherObject();
//a = 5;没必要
}
MyObject(){
a = 5;
}
}
时首先初始化成员(object对象放在static块中)a=0,b=4,再执行构造方法a=5,后生成了一个MyObjet对象。然而此对象可能由于某些随机因素并不会在每次程序执行过程中使用,且AnotherObject是一个比较“大”的对象,那就使用此法来做吧。

我是这样理解的。
BluntBlade 2004-07-17
  • 打赏
  • 举报
回复
编译器应该偷偷地做出一个布尔变量,初始化为false,用于标注这个static区块是否已经执行过。
当第一次执行到该static区块的时候,判断为false,然后就执行之,然后再把这个布尔变量取反,下一次流程进行到该static区块的时候就不会再执行了。
yishengheqiu 2004-07-17
  • 打赏
  • 举报
回复
jacky513(笑看红尘)
初始化结束后,

如果要修改的话,该怎么做啊?
petertangh 2004-07-17
  • 打赏
  • 举报
回复
类静态加载时执行,并且执行一次
jacky513 2004-07-17
  • 打赏
  • 举报
回复
对该类进行初始化,当类被加载时只执行一次,该类的对象均可加以引用,而不能对其修改。
闷头挣钱 2004-07-17
  • 打赏
  • 举报
回复
实际使用中的例子,挺方便的哦


/**
* Checks if java version is >= 1.4, sets application title and icon, as
* well as logo icon.
*/
static
{
try
{
String vers = System.getProperty("java.version");
if (vers.compareTo("1.4") < 0)
{
System.out.println("!!!WARNING: JaWE must be run with a " +
"1.4 or higher version VM!!!");
System.exit(1);
}
}
catch (Throwable t)
{
System.err.println("uncaught exception: " + t);
t.printStackTrace();
}
}
820830 2004-07-17
  • 打赏
  • 举报
回复
静态块
StringBuffer中间没有空格
nwpulipeng 2004-07-17
  • 打赏
  • 举报
回复
没看过这东西,不过帮你顶吧
border88 2004-07-16
  • 打赏
  • 举报
回复
static {
StringBuffer buf1 = new StringBuffer(100);
for (int i = 0; i < 3; i++) {
buf1.append(i);
}
...
}
这是一个静态块,在类中只有成员和方法,你除了在方法中使用FOR之类的语句,在方法外是不行的!!!而用STATIC就可以不用方法,起到申明变量的好处!!以前上课是这样听的,太久了,忘记了!!!呵呵
飞行的兔子 2004-07-16
  • 打赏
  • 举报
回复
静态初始化块,你可以近似把大括号里的东西认为是一个变量,其实没什么!
shuneng 2004-07-16
  • 打赏
  • 举报
回复
一般无必要这样用吧
你用一个静态变量就可以了
rainworm 2004-07-16
  • 打赏
  • 举报
回复
静态模块
clnara921 2004-07-16
  • 打赏
  • 举报
回复
学习~~~~
Javatomchen 2004-07-16
  • 打赏
  • 举报
回复
静态快,只初始化一次
singlehuang 2004-07-16
  • 打赏
  • 举报
回复
打错了,再发
static {
StringBuffer buf1 = new StringBuffer(100);
for (int i = 0; i < 3; i++) {
buf1.append(i);
}
...
}
加载更多回复(1)

62,614

社区成员

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

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