Qu’est-ce que le soulignement fait dans ce code Java?

Je viens de commencer à apprendre Java.

Mon ami qui m’aide à étudier vient de m’envoyer ceci et m’a dit: «Comprends ça».

Malheureusement, je suis incapable de lire ceci. Cela ressemble à Perl pour moi.

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

Qu’est-ce que ça veut dire?

_ est le nom de la classe. C’est très confus, mais ça marche!

Avec la classe renommée:

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

Et nettoyé:

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

Et vous pouvez devenir fou avec cette dénomination étrange :)

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

En fait, Unicode est même pris en charge, donc c’est valide:

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

_ est le nom de la classe, le soulignement est un nom de variable Java valide, il vous suffit de mettre votre code en retrait pour le désamorcer:

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

Comme:

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

Edit: merci à @Daniel Fischer

Les noms de types et les noms de variables ont des espaces de noms différents. et par exemple la class FOO { FOO FOO; } code class FOO { FOO FOO; } class FOO { FOO FOO; } est valide en Java.

Résumé

  • _ est un nom de classe, par exemple en class _{
  • _ est un nom de membre de la classe, par exemple à _ _; et _=this
  • _ est un nom de constructeur, par exemple à _()

Rappelez-vous: Java utilise six espaces de noms différents:

  • Noms de paquets,
  • taper les noms,
  • noms de champs (variables),
  • noms de méthode,
  • les noms de variables locales (y compris les parameters), et
  • Étiquettes.

De plus, chaque enum déclaré a son propre espace de noms. Les noms identiques de différents types ne sont pas en conflit; Par exemple, une méthode peut être appelée comme une variable locale .

bon c’est un bon exemple. Java permet à Unicode d’être des identifiants pour que vous puissiez écrire quelque chose comme:

 class ⲥlass { ⲥlass claѕѕ; } 

ici le nom de classe c est ‘ⲥ’ (U + 2CA5 COPTIC SMALL LETTER SIMA) et

nom d’object ‘ѕ’ (U + 0455 LETTRE MINUSCULE CYRILLIQUE DZE).