大家猜一下这段程序的运行结果哦。然后给些解释吧!

老紫竹 2008-01-02 05:02:46
public class TestBean {
public String test = {
System.out.println("ttt");
ww = "hhh";
test = "iii";
};

static String ww = {
System.out.println("www");
ww = "hhh";
};
public static void main(String[] args) {
TestBean o =new TestBean();
System.out.println(o.test);
System.out.println(TestBean.ww);
}
}
...全文
530 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
AutumnHealth 2008-03-21
  • 打赏
  • 举报
回复
难道是因为Eclipse自带的JDK编译器(不是Sun的JDK,而是JDT)对Java语言规范检查不严格,或者说Eclipse编译器与JavaSE6.0不完全兼容?
guoxiaofei_bluesky 2008-01-04
  • 打赏
  • 举报
回复
public class Text {

static String ww ;{
System.out.println("www");
ww = "hhh";
};

public String test ; {
System.out.println("ttt");
ww = "test";
test = "iii";
}

public static void main(String[] args) {
Text o =new Text();
System.out.println(o.test);
System.out.println(Text.ww);
}

}
我的运行结果是:
www
ttt
iii
test
AutumnHealth 2008-01-03
  • 打赏
  • 举报
回复
得出一个结论,Java里根本没有楼主那样的语法,那样写纯粹是eclipse自作主张(先转成标准的语法然后编译),这样容易给人造成误解,不可取
dawnming 2008-01-03
  • 打赏
  • 举报
回复
1.6 1.4下,我都没有编译通过 .用的工具是idea
andy_tj 2008-01-03
  • 打赏
  • 举报
回复
楼上说的有道理
我刚才又想了一下得出以下结论:
public class TestBean {
public String test = {
System.out.println("ttt");
ww = "hhh";
test = "iii";
};

static String ww = {
System.out.println("www");
ww = "hhh";
};
public static void main(String[] args) {
TestBean o =new TestBean();
System.out.println(o.test);
System.out.println(TestBean.ww);
}
}
在对象创建之前,静态变量ww被初始化为null,程序并没有执行{
System.out.println("www");
ww = "hhh";
};
中的内容,然后对象创建后,程序执行
{
System.out.println("ttt");
ww = "hhh";
test = "iii";
};
此时打印出ttt并且test被赋值为iii。程序继续执行
{
System.out.println("www");
ww = "hhh";
};
此时打印出www并且ww被赋值为hhh
当执行System.out.println(o.test);时屏幕上打印出iii
当执行System.out.println(TestBean.ww);时屏幕打印出hhh
最后结果就是我们看到的
ttt
www
iii
hhh
sh_royan 2008-01-03
  • 打赏
  • 举报
回复
21楼有点道理~~~~~~~~~~
liang8305 2008-01-03
  • 打赏
  • 举报
回复
代码是:
static String ww ;{
System.out.println("www");
ww = "hhh";
};
这样的话
{};这个和static String ww ;根本没有关系

{
System.out.println("www");
ww = "hhh";
};
是变成了静态块

代码是:
public String test = {
System.out.println("ttt");
ww = "hhh";
test = "iii";
};
这样的话,意思就是:
初始化test变量的时候运行{}里的代码。
andy_tj 2008-01-03
  • 打赏
  • 举报
回复
public class TestBean {
public String test = {
System.out.println("ttt");
ww = "hhh";
test = "iii";
};

static String ww = {
System.out.println("www");
ww = "hhh";
};
public static void main(String[] args) {
TestBean o =new TestBean();
System.out.println(o.test);
System.out.println(TestBean.ww);
}
}
楼主的程序在jdk1.6下myeclipse中运行通过结果为:
ttt
www
iii
hhh
在对象建立之前静态变量已经初始化不然的话在public String test = { ...ww = "hhh";);中的ww将会报错
我不明白为什么不是先打印www而是先打印ttt呢?
cchaha 2008-01-03
  • 打赏
  • 举报
回复

public class Test {

static String ww ;{
System.out.println("www");
ww = "hhh";
};

public String test ; {
System.out.println("ttt");
ww = "test";
test = "iii";
}

public static void main(String[] args) {
Test o =new Test();
System.out.println(o.test);
System.out.println(Test.ww);
}

}

执行结果:
D:\>javac Test.java

D:\>java Test
www
ttt
iii
test


//反编译Test.class结果
import java.io.PrintStream;

public class Test
{

static String ww;
public String test;

public Test()
{
System.out.println("www");
ww = "hhh";
System.out.println("ttt");
ww = "test";
test = "iii";
}

public static void main(String args[])
{
Test test1 = new Test();
System.out.println(test1.test);
System.out.println(ww);
}
}


这样就很明白初始化及代码执行顺序
lihaifeng0412 2008-01-03
  • 打赏
  • 举报
回复
就是
GhostAdai 2008-01-03
  • 打赏
  • 举报
回复
LS的不识数吧!
mcluvin 2008-01-03
  • 打赏
  • 举报
回复
一个字,变态!
YeLang2007 2008-01-03
  • 打赏
  • 举报
回复

我用的是idea6.02,jdk1.5编译不了...

healer_kx 2008-01-03
  • 打赏
  • 举报
回复
有些语法不研究也罢...
abner1314 2008-01-03
  • 打赏
  • 举报
回复
不管是jdk的哪个版本在dos下运行的话都会出错的。在eclipse下运行的话可以。结果是
ttt
www
iii
hhh
创建string的test对象的时候先去执行string的println方法打印ttt,同理static的ww也会打出www。
主函数调用o.test。test是被赋值为iii的。自然打印出iii。接着调用静态变量ww。ww是被赋值为hhh的,所以最后打印hhh。
这个函数不符合java的标准写法,看着有点乱。
不知道楼主满不满意这个解释?
xxmice 2008-01-03
  • 打赏
  • 举报
回复
编译不过,所以改写了一下,结果顺序不一样了。看来静态变量的初始化,和静态块的顺序不一样。
public class TestBean {
public String test;

{
System.out.println("ttt");
ww = "hhh";
test = "iii";
}

static String ww;

static {
System.out.println("www");
ww = "hhh";
}

public static void main(String[] args) {
TestBean o =new TestBean();
System.out.println(o.test);
System.out.println(TestBean.ww);
}
}
hahanimuzi 2008-01-03
  • 打赏
  • 举报
回复
我用eclipse,JDK1.4编译通过,并能运行出结束,如下
ttt
www
iii
hhh
joejoe1991 2008-01-03
  • 打赏
  • 举报
回复
用javac编译不通过.
eclipse通过了.
AutumnHealth 2008-01-02
  • 打赏
  • 举报
回复
E:\temp>d:\java\jdk1.5.0\bin\javac TestBean.java
TestBean.java:3: 需要 '}'
System.out.println("ttt");
^
TestBean.java:4: 需要 <标识符>
ww = "hhh";
^
TestBean.java:5: 需要 <标识符>
test = "iii";
^
TestBean.java:8: 需要 "class" 或 "interface"
static String ww = {
^
TestBean.java:13: 需要 "class" 或 "interface
public static void main(String[] agrs) {
^
TestBean.java:18: 需要 "class" 或 "interface
}
^
TestBean.java:19: 需要 "class" 或 "interface
^
7 错误




E:\temp>d:\java\jdk1.6.0\bin\javac TestBean.java
TestBean.java:3: 需要 '}'
System.out.println("ttt");
^
TestBean.java:4: 需要 <标识符>
ww = "hhh";
^
TestBean.java:5: 需要 <标识符>
test = "iii";
^
TestBean.java:8: 需要为 class、interface 或 enum
static String ww = {
^
TestBean.java:10: 需要为 class、interface 或 enum
ww = "hhh";
^
TestBean.java:11: 需要为 class、interface 或 enum
};
^
TestBean.java:13: 需要为 class、interface 或 enum
public static void main(String[] agrs) {
^
TestBean.java:15: 需要为 class、interface 或 enum
^
TestBean.java:16: 需要为 class、interface 或 enum
System.out.println(TestBean.ww);
^
TestBean.java:17: 需要为 class、interface 或 enum
}
^
10 错误
haoyangguang 2008-01-02
  • 打赏
  • 举报
回复
这样的String构造倒是第一次见到,不知道能否通过呢?
TestBean()这个方法为什么在api文档中没有呢?
加载更多回复(22)

62,614

社区成员

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

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