2016-06-05 5 views
0

Последовательность поиска и загрузки классов по классу-погрузчик:Класс Загрузка в JAVA

  1. Bootstrap загрузчик классов
  2. Расширение класса Loader
  3. Применение класса Loader

Теперь, если Я создаю пользовательский класс String с конструктором.

class String { 
    public String(){ 
     System.out.println("This is user defined String Class"); 
    } 
} 

, а затем выполняет код ниже:

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

Выход выше код «Это определяется пользователем строка класса»

Это означает, определенные пользователем класс загружается, который загружается Application Class-Loader

Итак, мой вопрос: сначала загружается загрузка, почему я получаю этот вывод? Надеюсь, мой вопрос ясен.

+1

Полностью квалифицированное имя вашего класса не является java.lang.String. Так что это совершенно другой класс. –

+0

Если я добавлю полное имя класса, то проблем не будет. Однако вы никогда не увидите код, который я написал выше. Но просто хочу проверить механизм загрузки классов JVM –

+0

. Я хочу сказать, что ваш класс String не имеет то же имя, что и стандартный класс java.lang.String. Поэтому, когда Java загружает его, он не может найти его в пути класса bootstrap или пути класса расширения. Единственное место, где он присутствует, это путь класса приложения. your.own.String не совпадает с именем класса java.lang.String. Java загружает классы на основе их полностью подтвержденного имени, не основанного на их простом имени. Вот почему они могут быть 5 различными классами Element только в стандартной библиотеке: https://docs.oracle.com/javase/8/docs/api/allclasses-frame.html –

ответ

1

добавить линии

package java.lang

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

Причина этого заключается в том, что имя класса всегда используется только как полное имя, состоящее из имени пакета и имени класса. Так что в вашем случае String отличается от java.lang.String и поэтому не может быть найден в rt.jar

+0

Нет, это не сработает. все тот же вывод –

+0

Вы добавили класс string в этот пакет? Добавление класса проверки в пакет не помогает. –

+0

Как JVM знает, к какому классу я хочу получить доступ ... любая пользовательская строка String или java.lang.String. –