下划线在此Java代码中实际上是做什么的?[关闭]


81

我刚刚开始学习Java。

我正在帮助我学习的朋友刚给我发了这个邮件,并说“想出来”。

不幸的是我无法阅读。在我看来,它就像Perl。

class _{_ _;_(){_=this;}}

这是什么意思?


17
这个问题正在meta上讨论。让我们来考虑是否支持在此关闭/删除它。
亚当李尔

63
@anotherordinary如果您的朋友认为告诉您找出答案是学习这种语言的好方法,那么您可能应该抛弃您的朋友作为编程老师。记住无关紧要的琐事根本没有用。开始学习语言的时间要少得多。
Enno Shioji

2
@EnnoShioji大点。“诱人的”。抱歉。
Asad Saeeduddin

1
是否有人试图创建“ IOJCC”?(google“ IOCCC”)
Olivier Dulac

1
@EnnoShioji需要记住的这个“无关琐事”如何?任何自称Java程序员的人都应该能够轻松理解这一点。
phant0m 2013年

Answers:


154

_是班级名称。这是一个非常令人困惑的方法,但是它可以工作!

将类重命名为:

class Something {Something something;Something(){something=this;}}

并清理:

class Something {
    Something something;
    Something() {
        something=this;
    }
}

您可能会因为这种奇怪的命名而发疯 :)

class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__=___;}}

实际上,甚至支持Unicode,因此这是有效的:

class 合法類別名稱{合法類別名稱(){}}

29
我个人喜欢
@Alvin

4
您的get crazy示例中几乎没有错误。(1)____=__(两次)您忘记添加分号,(2)如果您尝试重载_方法,则还需要传递类型,因此_(___)应该是_(_ ___)。这是它的外观class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}。等一下。我刚刚调试下划线了吗?现在该刹车了。
Pshemo

@Pshemo大声笑,我从来没有真正打算认真对待过该代码:P已修复
tckmn

得到+1,以评论我的答案。想不出另一种奖励您的方法。
Ed Heal

71

_ 是类名,下划线是有效的Java变量名,您只需缩进代码即可对其进行模糊处理:

class _{
    _ _;
    _(){
     _=this;
   }
}

喜欢:

class A{
    A A;
    A(){
     A=this;
   }
}

编辑:感谢@Daniel Fischer

类型名称和变量名称具有不同的名称空间。例如,代码class FOO { FOO FOO; }在Java中有效。

概要

  • _ 是一个类名,例如 class _{
  • _是班级成员的名称,例如在_ _;_=this
  • _ 是一个构造函数名称,例如 _()

请记住:Java使用六个不同的名称空间:

  • 套件名称
  • 类型名称
  • 字段(变量)名称,
  • 方法名称,
  • 局部变量名称(包括参数),以及
  • 标签。

此外,每个声明的枚举都有其自己的名称空间。不同类型的相同名称不会冲突;例如,一个方法可以命名为与局部变量相同


3
没有错 正如我键入的那样,它可以正常编译。直到现在我还是不明白。
另一个普通的

2
@GrijeshChauhan类型名称和变量名称具有不同的命名空间。class FOO { FOO FOO; }作品。
丹尼尔·菲舍尔

1
例如,在Haskell中,类型和值也具有不同的名称空间。区别在于大小写是有意义的,类型名必须以大写字母开头,因此您不能像类型一样命名任何旧值,而只能使用构造函数,但是data Foo = Foo | Bar Int可以使用。当然,它只能在您可以从中识别出标识符类别的语言中工作。
丹尼尔·菲舍尔2013年

2
@anotherordinary阅读了我的最新答案,我还添加了一个链接
Grijesh Chauhan 2013年

2
@GrijeshChauhan我看到了。谢谢:)
另一个普通的

12

很好的例子。Java允许将unicode用作标识符,因此您可以编写如下代码:

classlass {
ⲥlass claѕѕ;
}

这里的类名c是'is'(U + 2CA5 COPTIC SMALL LETTER SIMA)和

对象名称的“ s”(U + 0455西里尔小写字母DZE)。


您不能有一个名为的变量class,它是一个关键字。
尼克

14
@nickb:它不是Java关键字'class'。正如我提到的,对象名称'claѕѕ'具有'ss'非ASCII字符。所以实际上对象的名字claѕѕcla\u0455\u0455'我认为这将清除误解。:)
ashgkwd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.