为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不通过实例调用静态方法是Java编译器的错误?

为什么不通过实例调用静态方法是Java编译器的错误?

回首忆惘然 2019-07-01 10:25:14
为什么不通过实例调用静态方法是Java编译器的错误?我相信你们都知道我的意思-代码,比如:Thread thread = new Thread();int activeCount = thread.activeCount();引发编译器警告。为什么这不是一个错误?编辑:要明确一点:问题与线程无关。我意识到,在讨论这个问题时,经常会给出线程示例,因为它们可能会使事情变得一团糟。但真正的问题是这样的用法是总胡说八道,你不能(胜任)写这样的电话,而且是认真的。这类方法调用的任何示例都是barmy。这里还有一个:String hello = "hello";String number123AsString = hello.valueOf(123);这使得每个字符串实例似乎都带有一个“Stringvalue(Inti)”方法。
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

为什么要犯错误呢?实例可以访问所有静态方法。静态方法无法更改实例的状态(试图编译错误)。

您给出的著名示例的问题非常具体螺纹,而不是静态方法调用。看上去你好像activeCount()所引用的线程thread,但您确实得到了调用线程的计数。这是一个合乎逻辑的错误,你作为一个程序员正在犯。在这种情况下,发出警告是编译器应该做的事情。这取决于您是否注意到警告并修复您的代码。

编辑:我意识到语言的语法是允许您可以编写具有误导性的代码,但请记住,编译器及其警告也是语言的一部分。该语言允许您做一些编译器认为可疑的事情,但它给出了警告,以确保您意识到它可能会导致问题。


查看完整回答
反对 回复 2019-07-01
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

他们不能再犯错误了,因为所有的代码都已经存在了。

我同意你的意见,这应该是个错误。也许编译器应该有一个选项/概要文件来升级一些错误警告。

最新情况:当他们引进断言关键字在1.4中,与旧代码具有类似的潜在兼容性问题,他们制作了它只有在将源模式显式设置为“1.4”时才可用..我想,在新的源模式“java 7”中,可能会出现错误。但我怀疑他们会这么做,因为这一切都会引起麻烦。正如其他人所指出的,严格来说,没有必要阻止您编写令人困惑的代码。对Java语言的更改应该限制在此时严格必要的范围内。


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 521 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号