Какое значение подчеркивается в этом Java-коде?

Я только начал изучать Java.

Мой друг, который помогает мне учиться, просто прислал мне это и сказал: "Подумай об этом".

К сожалению, я не могу это прочитать. Мне кажется Perl.

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

Что это значит?

Ответ 1

_ - это имя класса. Это очень запутанный, но он работает!

С классом, переименованным:

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

И очистить:

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

И вы можете сходить с ума от этого нечетного наименования :)

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

Фактически, Unicode поддерживается даже, поэтому это действительно:

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

Ответ 2

_ - это имя класса, underscore - это допустимое имя переменной Java, вам просто нужно отступывать свой код, чтобы деобфусить его:

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

Вроде:

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

Изменить: благодаря @Daniel Fischer

Имена типов и имена переменных имеют разные пространства имен. и, например, код class FOO { FOO FOO; } действителен в Java.

Резюме

  • _ - это имя класса, например, class _{
  • _ - это имя члена класса, например, _ _; и _=this
  • _ - имя конструктора, например. при _()

Помните: Java использует шесть разных пространств имен:

  • Имена пакетов,
  • имена типов,
  • имена полей (переменных),
  • имена методов,
  • имена локальных переменных (включая параметры) и
  • этикетки.

Кроме того, каждый объявленный enum имеет собственное пространство имен. Идентичные имена разных типов не конфликтуют; например, метод может называться так же, как локальная переменная.

Ответ 3

хорошо это хороший пример. Java позволяет unicode быть идентификаторами, поэтому вы можете написать что-то вроде:

class ⲥlass {
ⲥlass claѕѕ;
}

здесь имя класса c is 'ⲥ' (U + 2CA5 COPTIC SMALL LETTER SIMA) и

имя объекта 'ѕ' (U + 0455 CYRILLIC SMALL LETTER DZE).