一道java题,为什么答案这样诡异

一只独孤的程序猿 2011-10-05 07:24:00

(7)关于以下application的说明,正确的是( )
1. class StaticStuff
2. {
3.                  static int x=10;
4.                  static { x+=5;}
5.                  public static void main(String args[ ])
6.                  {
7.                  System.out.println(“x=” + x);
8.                  }
9.                  static { x/=3;}
10.   }
A、4行与9行不能通过编译,因为缺少方法名和返回类型
B、9行不能通过编译,因为只能有一个静态初始化器
C、编译通过,执行结果为:x=5
D、编译通过,执行结果为:x=3

这是那个题
答案是B
我把下面的代码拷贝出来,运行结果是C,求解

class StaticStuff
{
static int x=10;
static { x+=5;}
public static void main(String args[])
{
System.out.println("x=" + x);
}
static { x/=3;}
}

...全文
182 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITkey 2011-10-07
  • 打赏
  • 举报
回复
答案骗人,可以有多个static块,不过只会在类加载的时候运行一次(什么时候类加载我也不清楚)。而具体的运行顺序视static块在类中的位置而定
dxqrr 2011-10-06
  • 打赏
  • 举报
回复
见3L
sharme 2011-10-06
  • 打赏
  • 举报
回复
我也来聊聊static静态关键字
static{ //这是静态块 }//静态块只有在类第一次被加载的时候进行初始化,不会进行第二次加载

//注意下面写法
public static void main(String[] args){
static{ int i=0; }//这种写法是会编译出错的
}
//注意静态关键字的含义,static所修饰的成员只属于类,在方法中是没有static的引用的
static修饰的成员在堆中开辟了唯一的空间,不会进行第二次开辟
kiven_young 2011-10-06
  • 打赏
  • 举报
回复
答案B是对的,不懂的去翻书看static块
  • 打赏
  • 举报
回复
不要迷信答案。。。
niuniu20008 2011-10-06
  • 打赏
  • 举报
回复
答案错误,一个类中可以有多个static块和member块,但static只在类被加载时执行一次
alvin198761 2011-10-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kuaini 的回复:]
结果不是A吗?
[/Quote]
见过大牛,没见过傻女
LucEaspe 2011-10-06
  • 打赏
  • 举报
回复
可以按顺序载入 static 不矛盾
可力 2011-10-05
  • 打赏
  • 举报
回复
结果不是A吗?
孤单旅行 2011-10-05
  • 打赏
  • 举报
回复
只要一加载类就会依次加载静态属性和静态代码块,所以x的值最终是5
一蚊惊人小号 2011-10-05
  • 打赏
  • 举报
回复
答案错误,鉴定完毕,原因见2楼
致知Fighting 2011-10-05
  • 打赏
  • 举报
回复
类初始化顺序:初始化父类-初始化子类的静态变量或方法(顺序执行)

你类里面的静态部分都被执行了,所以x是5,最后再进入main方法里被输出的
licip 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huntor 的回复:]

class StaticStuff { static int x=10;
static { x+=5;} // 15
public static void main(String args[]) {
System.out.println("x=" + x); }
static { x/=3;} // 5
}
按顺序载入static块。
[/Quote]+1是这样的。
zljjava 2011-10-05
  • 打赏
  • 举报
回复
类加载的时候,先加载静态初始化块 再加载静态方法
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhuyucheng123 的回复:]

运行一下这段代码
Java code

class StaticStuff {
static int x = 10;
static {
x += 5;
System.out.println("static x += 5, x = " + x);
}

public static void main(String args[]) ……
[/Quote]
结果是这样的?
能说明什么呢?
后街男孩 2011-10-05
  • 打赏
  • 举报
回复
运行一下这段代码

class StaticStuff {
static int x = 10;
static {
x += 5;
System.out.println("static x += 5, x = " + x);
}

public static void main(String args[]) {
System.out.println("in main");
System.out.println("x=" + x);
}

static {
x /= 3;
System.out.println("static x /= 3, x = " + x);
}
}
huntor 2011-10-05
  • 打赏
  • 举报
回复
class StaticStuff { static int x=10;
static { x+=5;} // 15
public static void main(String args[]) {
System.out.println("x=" + x); }
static { x/=3;} // 5
}
按顺序载入static块。
wuhuipengwhp 2011-10-05
  • 打赏
  • 举报
回复
结果等于5是正确的

62,614

社区成员

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

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