2013-03-26 4 views
79

私はちょうどJavaを学び始めました。このJavaコードでアンダースコアは実際に何をしていますか?

私の勉強を手伝ってくれている私の友人は、私にこれを送って、「これを理解してください」と言った。

残念ながら、私はこれを読むことができません。 Perlのように見えます。

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

この意味は?

+17

この質問は[メタ上で](http://meta.stackexchange.com/questions/173714/can-we-nuke-this-too-localized-question)で議論されています。ここでそれを閉じる/削除するための議論をしましょう。 –

+63

@anotherordinaryもしあなたがこの言語を学ぶのに良い方法だと思ったら、プログラミングの先生としてあなたの友人を捨てるべきでしょう。不自由なトリビアを思い出すことはまったく役に立たない。あなたが言語を学び始めているときはずっと少なくなります。 –

+2

@EnnoShioji素晴らしい点。 "無関係"。ごめんなさい。 –

答えて

151

_はクラス名です。それは非常に混乱するものですが、それは動作します!

名前を変更したクラスで

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

そしてクリーンアップ:

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

そして、あなたはこの奇妙が:)実際に

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

を命名して夢中になることができ、ユニコードでもありますこれは有効です:

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

私は個人的に@アルヴィンの編集を愛しています:) –

+3

あなたの 'クレイジー'の例では間違いがほとんどありません。 (1) '____ = __'(2回)の後にセミコロンを追加するのを忘れた場合、(2) '_'メソッドをオーバーロードしようとしている場合は、型を渡す必要があるので' _(___) (_ ___) 'となります。ここで 'class _ {_ __; _ ____; _(){__ = this; ____ = __;} _(_ ___){__ = ___;}}'をどのように見えるかを示します。ちょっと待って。私はアンダースコアをデバッグしましたか?それはブレーキの時間です。 – Pshemo

+0

@Pshemo Lol、私は本当にそのコードについて深刻な意味はありませんでした:P fixed – Doorknob

69

_、クラス名アンダースコアであるあなたはそれをdeobfuscateするようにコードをインデントする必要があり、有効なJavaの変数名です。

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

同様:

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

を編集: @Daniel Fischerのおかげです。

タイプ名と変数na mesには異なる名前空間があります。例えばコードclass FOO { FOO FOO; }はJavaで有効です。

概要

  • _class _{
  • _でクラス名例えば、クラスメンバ名_ _;で例えば及び_=this
  • _コンストラクタ名は、例えば、あるです_()

で覚えておいてください:Javaはsix different namespaces:

  • パッケージ名、
  • タイプ名、
  • フィールド(変数)名、
  • メソッド名、
  • ローカル変数を使用しています名前(パラメータを含む)、
  • ラベル。

さらに、宣言された各列挙型には独自の名前空間があります。異なるタイプの同じ名前は競合しません。例えば、というメソッドは、ローカル変数と同じ名前を付けられます。

+3

間違いなしです。私が入力したとおり、それはちゃんとコンパイルされます。私は今までそれを理解していませんでした。 –

+2

@GrijeshChauhanタイプの名前と変数名は、異なる名前空間を持っています。 'クラスFOO {FOO FOO; } 'が動作します。 –

+0

@DanielFischerありがとうございました。これはJavaのみです**?** ...他の言語はこれを行いますか? –

10

これは良い例です。 U +(ここではクラス名のC 'はⲥ'(U + 2CA5コプト語SMALL LETTER SIMA)と

オブジェクト名の 'ѕ' です

class ⲥlass { 
ⲥlass claѕѕ; 
} 

:Javaはあなたのような何かを書くことができるようにユニコードを識別することができます0455 CYRILLIC SMALL LETTER DZE)。

+0

'class'という名前の変数を持つことはできません。これはキーワードです。 – nickb

+12

@nickb:Javaのキーワード '' class''ではありません。オブジェクト名 ''claѕs ''に ''非ASCII文字である '' ss ''があることを述べました。実際にオブジェクトの名前は 'claѕs'は' cla \ u0455 \ u0455''です。これは誤解を解消すると思います。 :) – ashgkwd

関連する問題