Можно ли написать и загрузить собственную версию основных классов Java? - PullRequest
1 голос
/ 11 июля 2019

Мне задавали этот вопрос во время интервью - «Возможно ли написать и загрузить собственную версию основных классов Java (например, String, Object и т. Д.)».Я сказал «нет», но интервьюер хотел знать, какие проверки имеет Java для предотвращения этого.Чтобы понять это, я написал следующий фрагмент кода в eclipse

package java.lang;
public final class String {
    public static void main(String[] args) {
        String s = new String();
    }

}

Я ожидал, что компиляция не удастся, потому что у Java уже есть класс String в пакете java.lang.Но компиляция прошла, и я получил следующую ошибку при запуске программы:

Error: Main method not found in class java.lang.String, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

Почему компиляция прошла успешно, поскольку String уже присутствует в java.lang и как Java блокирует загрузку основных классов с помощьюразработчики

1 Ответ

3 голосов
/ 11 июля 2019

javac должен скомпилировать основные классы.

Во время выполнения выполняются проверки, чтобы предотвратить загрузку повторяющихся классов.

  • Вы не можете загрузить любыеклассы, начинающиеся с java..Я полагаю, это было сделано для того, чтобы Microsoft не делала непослушных несовместимых вещей.

  • Нельзя загружать два класса с одинаковым именем с одним и тем же экземпляром загрузчика классов.

  • По умолчанию загрузчик классов проверяет родительский загрузчик перед загрузкой класса.Этот можно переопределить (с соответствующими разрешениями безопасности).

Вы можете запустить JVM с различными базовыми классами, хотя это будет зависеть от конкретной реализации.До JDK 8 вы могли использовать -Xbootclass/p: классы выборочной замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...