一道关于static,this的java面试题

wingardium 2010-04-21 05:24:27

public class Cygnus{
static int value = 9; //注意value是静态的成员变量
public static void main(String[] args) throws Exception{
new Cygnus().printValue();
}

private void printValue(){
int value = 69;
System.out.println(this.value);
}
}

这个程序会有下面哪种结果?
A. 编译错误
B. 打印9
C. 打印69
D. 运行时抛出异常
...全文
515 29 点赞 打赏 收藏 举报
写回复
29 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
notlogin 2010-04-22
[Quote=引用 10 楼 quxiaoyong 的回复:]

引用 9 楼 kg071 的回复:
我测试了 结果是9 但不知道为何 希望高手能解释


结果是9是对的。。static变量是在这个class第一次加载的时候就初始化,且在一个虚拟机中只初始化这一次。。。。在java语言中,不建议使用this.value这种方式来引用,但也不是绝对禁止的。。所以是9
[/Quote]
不建议用this?为什么?下面的算什么?

public class User {
private String user;
private String password;

public String getUser() {
return user;
}

public void setUser(String user) {
this.user = user;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

  • 打赏
  • 举报
回复
licip 2010-04-22
结果是9,因为this是指实例化的一个对象。虽然加static是类的变属性,但也是实例的。所以,是9
  • 打赏
  • 举报
回复
qjtttt 2010-04-22
就好比你有一本书,你放图书馆让大家看,突然有个人说这书是共享的,不是你的,你怎么想?
  • 打赏
  • 举报
回复
cx1014 2010-04-22
学习下
  • 打赏
  • 举报
回复
qjtttt 2010-04-22
只能说static我们可以不通过实例化类来调用,并不是说它本身就不是类里面的属性和方法了
  • 打赏
  • 举报
回复
qjtttt 2010-04-22
[Quote=引用 8 楼 wingardium 的回复:]
引用 6 楼 javaee_ssh 的回复:
this.value 指当前对像的value属性,,而int value = 69; 只是一个方法的变量
所以打印this.vlaue 会是9,

this.value不是指当前对象的属性,value是static的
[/Quote]

晕 static的就不是对象的属性了?什么逻辑啊,要你这么理解的话是不是Arrays的几个静态方法都不是Arrays类的方法了?
  • 打赏
  • 举报
回复
lyz0622_1022 2010-04-22
呵呵 是9
  • 打赏
  • 举报
回复
longq121 2010-04-22
结果是9 ,如4楼所说
  • 打赏
  • 举报
回复
czmchen 2010-04-22
[Quote=引用 17 楼 keeya0416 的回复:]

this.value指的是当前对象的属性,而在本题中所有的实例都公用一个类变量value
static在本题中没什么意思的
就算是去掉static 一样是打印9;
[/Quote]

up..
  • 打赏
  • 举报
回复
sunyhaha 2010-04-22
打印9
  • 打赏
  • 举报
回复
xiaomaha520 2010-04-22
B`````````应为用了this
  • 打赏
  • 举报
回复
dlnu05610 2010-04-22
[Quote=引用 9 楼 kg071 的回复:]

我测试了 结果是9 但不知道为何 希望高手能解释
[/Quote]
this代表的是本实例,但是不代表这个类。举个例子吧
new 类();这个时候这个this才会起到作用。
  • 打赏
  • 举报
回复
keeya0416 2010-04-22
this.value指的是当前对象的属性,而在本题中所有的实例都公用一个类变量value
static在本题中没什么意思的
就算是去掉static 一样是打印9;
  • 打赏
  • 举报
回复
fsn011362 2010-04-22
学习学习,基础很重要!
  • 打赏
  • 举报
回复
yangliyewoaini 2010-04-22
[Quote=引用 11 楼 notlogin 的回复:]
引用 10 楼 quxiaoyong 的回复:

引用 9 楼 kg071 的回复:
我测试了 结果是9 但不知道为何 希望高手能解释


结果是9是对的。。static变量是在这个class第一次加载的时候就初始化,且在一个虚拟机中只初始化这一次。。。。在java语言中,不建议使用this.value这种方式来引用,但也不是绝对禁止的。。所以是9

不建议用this?为什么?下面……
[/Quote]
你可以好好看下书了。
基础很重要。
加油
  • 打赏
  • 举报
回复
java_zhengjd 2010-04-22
楼上说的正确,我测试了一下,static确实起到了迷惑的作用,System.out.println(this.value);
打印的是当前对象的属性,不用多说,当前对象引用的时候,已经初始化为9.所以打印出9了
另外,大家可以测试一下,去掉static结果是一样的,这也就说明了楼上的正确、
  • 打赏
  • 举报
回复
princess_rosie 2010-04-22
[Quote=引用 12 楼 i_am_studying 的回复:]
结果是9,此题考察的是this的用法,static在这里只是起到了疑惑的作用……我是新手,请大家多多指教
[/Quote]
观点正确
  • 打赏
  • 举报
回复
I_am_studying 2010-04-22
结果是9,此题考察的是this的用法,static在这里只是起到了疑惑的作用……我是新手,请大家多多指教
  • 打赏
  • 举报
回复
空~自由 2010-04-22
this 是持有自身的引用 static 方法在类加载时被调用 所以结果为9
  • 打赏
  • 举报
回复
欢乐极客 2010-04-21
[Quote=引用 9 楼 kg071 的回复:]
我测试了 结果是9 但不知道为何 希望高手能解释
[/Quote]

结果是9是对的。。static变量是在这个class第一次加载的时候就初始化,且在一个虚拟机中只初始化这一次。。。。在java语言中,不建议使用this.value这种方式来引用,但也不是绝对禁止的。。所以是9
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2010-04-21 05:24
社区公告
暂无公告