一道关于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. 运行时抛出异常
...全文
981 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
加载更多回复(9)

62,612

社区成员

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

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