在这个Java代码中,下划线实际上做了什么?

时间:2013-03-26 22:07:48

标签: java syntax

我刚开始学习Java。

我帮助我学习的朋友刚刚给我发了这个并说'搞清楚'。

不幸的是我无法读到这个。对我来说它看起来像Perl。

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

这是什么意思?

3 个答案:

答案 0 :(得分:153)

_是类名。这是一个非常令人困惑的,但它的确有效!

重命名该课程:

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

并清理干净:

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

你可以对这个奇怪的命名:)

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

事实上,甚至支持Unicode,所以这是有效的:

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

答案 1 :(得分:70)

_是类名,下划线是一个有效的Java变量名,你只需缩进代码就可以对其进行反混淆:

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

喜欢:

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

编辑:感谢@Daniel Fischer

  

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

<强>摘要

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

请记住:Java使用six different namespaces:

  
      
  • 包名称,
  •   
  • 类型名称,
  •   
  • 字段(变量)名称,
  •   
  • 方法名称,
  •   
  • 本地变量名称(包括参数)和
  •   
  • 标签。
  •   
     

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

答案 2 :(得分:11)

好吧,这是一个很好的例子。 Java允许unicode成为标识符,因此您可以编写如下内容:

class ⲥlass {
ⲥlass claѕѕ;
}

这里的班级名称c是'ⲥ'(U + 2CA5 COPTIC SMALL LETTER SIMA)和

对象名称'''(U + 0455 CYRILLIC SMALL LETTER DZE)。