Я только начал изучать Java.
Мой друг, который помогает мне учиться, просто прислал мне это и сказал: «Разберись с этим».
К сожалению, я не могу это прочитать. Мне это кажется Perl.
class _{_ _;_(){_=this;}}
Что это означает?
Я только начал изучать Java.
Мой друг, который помогает мне учиться, просто прислал мне это и сказал: «Разберись с этим».
К сожалению, я не могу это прочитать. Мне это кажется Perl.
class _{_ _;_(){_=this;}}
Что это означает?
Ответы:
_
это имя класса. Это очень сбивает с толку, но работает!
С переименованием класса:
class Something {Something something;Something(){something=this;}}
И почистил:
class Something {
Something something;
Something() {
something=this;
}
}
И вы можете сойти с ума от этого странного наименования :)
class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__=___;}}
Фактически, Unicode даже поддерживается, так что это действительно так:
class 合法類別名稱{合法類別名稱(){}}
get crazy
примере есть несколько ошибок . (1) вы забыли добавить точку с запятой после ____=__
(два раза), (2) если вы пытаетесь перегрузить _
метод, вам также необходимо передать тип, что и _(___)
должно быть _(_ ___)
. Вот как это может выглядеть class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}
. Подожди минуту. Я только что отлаживал символы подчеркивания? Пришло время для тормоза.
_
- это имя класса, подчеркивание - это допустимое имя переменной Java, вам просто нужно сделать отступ в коде, чтобы деобфускировать его:
class _{
_ _;
_(){
_=this;
}
}
Подобно:
class A{
A A;
A(){
A=this;
}
}
Изменить: благодаря @Daniel Fischer
Имена типов и имена переменных имеют разные пространства имен. и, например, код
class FOO { FOO FOO; }
действителен на Java.
Резюме
_
это имя класса, например, в class _{
_
имя члена класса, например at _ _;
и_=this
_
это имя конструктора, например, в _()
Помните: Java использует шесть разных пространств имен:
- Имена пакетов,
- имена типов,
- имена полей (переменных),
- имена методов,
- имена локальных переменных (включая параметры) и
- этикетки.
Кроме того, каждое объявленное перечисление имеет собственное пространство имен. Идентичные имена разных типов не конфликтуют; например, метод может называться так же, как локальная переменная .
class FOO { FOO FOO; }
работает.
data Foo = Foo | Bar Int
работает. Конечно, он может работать только на языках, где вы можете определить категорию идентификатора, по которой он появляется.
ну это хороший пример. Java позволяет Unicode быть идентификаторами, поэтому вы можете написать что-то вроде:
class ⲥlass {
ⲥlass claѕѕ;
}
здесь имя класса c - '' (U + 2CA5 КОПТИЧЕСКАЯ СТРОЧНАЯ БУКВА SIMA) и
'ѕ' в имени объекта (U + 0455 КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА DZE).
class
, это ключевое слово.
'class'
. как я уже упоминал, это имя объекта 'claѕѕ'
имеет 'ss'
символы, отличные от ascii. так что на самом деле имя объекта - claѕѕ
это, cla\u0455\u0455'
я думаю, это устраняет недоразумение. :)