Java тілінің тривиальды емес мүмкіндіктері

Java — қарапайым тіл. Бір жыл белсенді пайдаланудан кейін сіз үшін ешқандай құпия қалмайды. Кездейсоқ, мен адамдар stackoverfow бағдарламасында жасырын мүмкіндіктерді (Java-ның жасырын мүмкіндіктері) бөлісуді шешкенін білдім. Бұл өте қызықты болды, бұл тривиальды емес мүмкіндіктердің рейтингінің бір түрі болды, мен оны әрі қарай орыс тіліне тегін аудармада жазамын.

қос жақша

Кең маржа бойынша «қос жақша» алдыңғы орында, бұрын мақалада талқыланған «қос жақша» әсері нөлге тең. Әдістің толық сипаттамасы −
http://www.c2.com/cgi/wiki?DoubleBraceInitialization
сөзсіз, бұл тізімдегі ең қызықты және айқын емес. Дегенмен, жоғарыда айтылғандай, әдістің осы әдістің әрбір қолданылуы үшін анонимді класс түріндегі кемшіліктері бар. Сондай-ақ мұндай объектілер үшін equals () әдісін пайдалану мүмкін еместігі.

ThreadLocal

ThreadLocal — http://java.sun.com/javase/6/docs/api/java/lang/ThreadLocal.html
1.2 нұсқасынан бері бар ұмытылған сынып. Және генериктермен достасу арқылы одан да тартымды болды. Класс бір айнымалыға ағындардың әрқайсысы үшін басқа мәнге ие болуға мүмкіндік береді.

Дана инициализаторлары

Егер бұл мүмкіндік сіздің көзқарасыңыздан шығып кетсе, онда төмендегі мысал оны мінсіз және әрі қарай созбай көрсетеді. JLS сілтемесі

қоғамдық сынып Foo {
public Foo() {
System.out.println («конструктор шақырылған»);
}

статикалық {
System.out.println(«статикалық инициализатор деп аталады»);
}

{
System.out.println(«дананы инициализатор шақырылды»);
}
}

* Бұл бастапқы код Source Code Highlighter көмегімен бөлектелді.

жасайық:
new Foo();
new Foo();

Шығу кезінде біз мынаны аламыз:
статикалық инициализатор деп аталады
даналық инициализатор шақырылды
конструктор шақырылды
даналық инициализатор шақырылды
конструктор шақырылды

Жалпы тип ретіндегі класс жиындарының қиылысуы

Baz {} жалпы класы — JLS сілтемесі

Атаулы блоктар мен белгілер

Аз пайдаланылған, бірақ әлі де құрастырылған нәрсе:
екі цикл:
{
ал (шын) {
ал (шын) {
екі циклді үзу;
}
}

}

* Бұл бастапқы код Source Code Highlighter көмегімен бөлектелді.

Айтпақшы, const және goto сақталған сөздері туралы күлкілі факт еске түседі. Бұл кілт, бірақ сіз оларды пайдалана алмайсыз. Тегтер де күлкілі әсер береді. Төмендегі код өте жақсы құрастырылған (жақсы айтылды, компилятор мұны күңкілдемей жібермейді)
сынып мысалы {
public static void main(String[] args) {
System.out.println («Сәлем әлем!»);
http://Phi.Lho.free.fr

System.exit(0);
}
}

* Бұл бастапқы код Source Code Highlighter көмегімен бөлектелді.

Enum — бұл сынып

Онда конструкторды, статикалық және өте емес әдістерді анықтауға болады. JLS-те толығырақ. Сондай-ақ, кез келген нөмірде барлық мәндерді қайтаратын әдістер бар, сонымен қатар элементтің жол атауы бойынша нысанды қайтарады:

қоғамдық статикалық Е[] құндылықтар();
public static E valueOf(Жол атауы);

ақыры мен ораламын

соңында кез келген ерекшелікті «жеуге» болады — jamesjava.blogspot.com/2006/03/dont-return-in-finally-clause.html
public static int f() {
тырысу {
жаңа RuntimeException();
} ақырында {
қайтару 0;
}
}

* Бұл бастапқы код Source Code Highlighter көмегімен бөлектелді.

Тек System.exit(..) ақырында жеңе алады

Жинақтар

java.util.Arrays ішіндегі asList әдісі 1.5 нұсқасынан бастап айтарлықтай өзгерді. Төмендегі өрнек айнымалы ұзындықтағы аргумент тізімі, автобокс және генериксіз мүмкін емес.
List ints = Arrays.asList(1,2,3);

Параметрленген әдістердің түрлерін келесі жолмен көрсетуге болады:
Collections.emptyMap()

статикалық импорт, олардың барлық түсініксіздігіне қарамастан, таңғажайып қысқа әсерді жасауға көмектеседі.
List ls = List(«a», «b», «c»);
ListString, String>> деректер = Тізім(Карта( ​​o(«аты», «майкл»), o(«жыныс», «еркек»))));

Толығырақ gleichmann.wordpress.com/2008/01/13/building-your-own-literals-in-java-lists-and-arrays/ және code.google.com/p/google-collections/ оқыңыз.
JQuery жанкүйерлері үшін — $ белгісін пайдалану: garbagecollected.org/2008/04/06/dollarmaps/

Соңында тағы бір ішкі элемент — List.subList(int fromIndex, int toIndex) бастапқы нысанның көрінісін қайтарады.
Құжатталған, бірақ кеңінен қолданылмайды. Ішкі тізіммен жұмыс істеуге мүмкіндік береді, ал ішкі тізімге енгізілген өзгерістер негізгі нысанда көрсетіледі.