Є багато різних відповідей, тому я вважав, що було б корисно зібрати їх усі (і додати деякі):
Заняття
- Класи AutoBoxing - компілятор дозволяє лише певні класи
- Клас - має власні літерали (наприклад, int.class). Я також додав би його загальне введення, не створюючи нових екземплярів.
- Рядок - з його перевантаженим + -оператором та підтримкою літералів
- Enum - єдиний клас, який можна використовувати в операторі switch (незабаром привілей також буде наданий String). Він робить і інші речі (автоматичне створення статичного методу, обробка серіалізації тощо), але теоретично це можна зробити за допомогою коду - це просто багато зразків, і деякі обмеження не можуть бути застосовані в підкласах (наприклад, спеціальні правила підкласування), але те, чого ви ніколи не змогли б досягти без привілейованого статусу переліку, - це включити його до оператора switch.
- Об'єкт - корінь усіх об'єктів (і я хотів би додати його клонування та методи завершення - це не те, що ви могли б реалізувати)
- Список літератури : WeakReference, SoftReference, PhantomReference
- Потік - мова не дає вам конкретних вказівок для запуску потоку, а чарівніше застосовує його до методу start ().
- Throwable - корінь усіх класів, які можуть працювати з методами throw, throws і catch, а також розуміння компілятором винятків проти RuntimeException та Error.
- NullPointerException та інші винятки, такі як ArrayIndexOutOfBounds, які можуть бути викинуті іншими інструкціями байтового коду, ніж athrow.
Інтерфейси
- Iterable - єдиний інтерфейс, який можна використовувати в розширеному циклі for
Почесні згадки дістаються:
- java.lang.reflect. Масив - створення нового масиву, визначеного об’єктом Класу, було б неможливим.
- Анотації Вони є особливою мовною функцією, яка поводиться як інтерфейс під час виконання. Ви, звичайно, не змогли визначити інший інтерфейс анотації, як і ви не можете визначити заміну для об’єкта. Однак ви можете реалізувати всю їх функціональність і просто мати інший спосіб отримати їх (і цілу купу зразкових даних), а не відображення. Насправді, до впровадження анотацій було багато реалізацій на основі XML та тегів Java.
- ClassLoader - він, безумовно, має привілейовані відносини з JVM, оскільки не існує жодного мовного способу завантаження класу, хоча існує спосіб байт-коду, тому він таким чином схожий на Array. Він також має особливий привілей передзвонити JVM, хоча це є деталлю реалізації.
- Серіалізується - ви можете реалізувати функціонал за допомогою роздумів, але у нього є власне привілейоване ключове слово, і ви витрачаєте багато часу на знайомство з SecurityManager в деяких сценаріях.
Примітка: Я залишив поза списком речі, які надають JNI (наприклад, IO), тому що ви завжди можете реалізувати власний виклик JNI, якщо ви були настільки схильні. Однак власні дзвінки, які взаємодіють із JVM привілейованими способами, різні.
Масиви дискусійні - вони успадковують Object, мають зрозумілу ієрархію (Object [] є надтипом String []), але вони є мовною ознакою, а не визначеним класом самі по собі.