2014-02-11 4 views
0

У меня есть аргумент с моим профессором, который, как мне кажется, не находит ответ в google ... Мой вопрос: когда я использую метод, который находится в другом классе, JVM будет пытаться и найти файл класса .class? и аргумент таков: если файл .class не будет найден, будет поиск исходного файла, и если он будет найден, он будет перекомпилирован или выкинет исключение? Спасибо!Процесс динамической загрузки класса Java

ОБНОВЛЕНИЕ: Я перефразировал вопрос, я буду очень признателен за вашу помощь!

+1

JVM не несет ответственности за компиляции исходного кода. –

+0

JVM не компилирует исходный код, поэтому он будет через исключение напрямую –

+0

Тогда кто бы ни отвечал за это, потому что я знаю, что этот процесс происходит при компиляции вашего проекта – user2466613

ответ

2

Это совсем не стандартное поведение, и не будет работать в нормальной среде.

Однако, я слышал о некоторых коммерческих дистрибутивов сервер приложений, которые были в состоянии сделать это ... кто-то рассказал мне о старых версиях WebLogic, настроенными в режиме разработки, но, возможно, просто городская легенда: P

I предположим, что вы можете написать настроенный загрузчик классов, который искал файлы .java в пути к классам и, учитывая, что он работает на JDK с java-компилятором, делайте то, что вы говорите.

+0

Да, такой загрузчик классов даже не был бы слишком сложным. Единственный вопрос: кто читает сообщения об ошибках. :) – Ingo

1

Стандартная JRE даже не включает компилятор для исходного кода Java. Для компиляции исходного кода Java вам нужен JDK или IDE, который включает в себя собственный Java-компилятор. Если вы скомпилируете исходный код с помощью javac или встроенного компилятора IDE, эти компиляторы будут искать исходные файлы ссылочных классов и компилировать их, если файл .class не найден или исходный файл не является более новым, чем файл класса. Но если вы, например. после этого удалите файл класса ссылочного класса и запустите свою программу, JVM не будет искать исходный файл. Он выкинет NoClassDefFoundError.

0

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

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Employee cannot be resolved to a type 
    Employee cannot be resolved to a type 
    at com.test.TestIt.main(TestIt.java:7) 

Сотрудник класса, чей метод мы хотим вызвать (.class файл не создан для Employee)

Смежные вопросы