Для компиляции исходного файла компилятору часто требуется информация о типе, но определение типа отсутствует в исходных файлах, указанных в командной строке. Компилятору нужна информация о типе для каждого класса или интерфейса, используемого, расширенного или реализованного в исходном файле. Это включает в себя классы и интерфейсы, явно не упомянутые в исходном файле, но предоставляющие информацию посредством наследования.
Например, когда вы создаете подкласс java.applet.Applet
, вы также используете классы-предки Applet: java.awt.Panel
, java.awt.Container
, java.awt.Component
и java.lang.Object
.
Когда компилятору требуется информация о типе, он ищет файл source или class file , который определяет тип. Компилятор ищет файлы class сначала в в классах начальной загрузки и расширения, а затем в пути к пользовательскому классу (который по умолчанию является текущим каталогом). Путь к классу пользователя определяется путем установки переменной среды CLASSPATH
или использования опции -classpath
.
Если вы установите опцию -sourcepath
, то компилятор будет искать по указанному пути исходные файлы. В противном случае компилятор ищет путь к классу пользователя как для файлов class , так и для source файлов.
Вы можете указать различные классы начальной загрузки или расширения с помощью опций -bootclasspath
и -extdirs
. См. Параметры кросс-компиляции .
При успешном поиске по типу может быть создан файл класса, исходный файл или оба. Если оба найдены, вы можете использовать опцию -Xprefer
, чтобы указать компилятору, что использовать. Если указано newer
, то компилятор использует более новые файлы. Если указано source
, компилятор использует исходный файл. По умолчанию newer
.
Если поиск по типу находит source file для требуемого типа, либо сам по себе, либо в результате установки параметра -Xprefer
, то компилятор читает исходный файл для получения необходимой информации. По умолчанию компилятор также компилирует исходный файл. Вы можете использовать опцию -implicit
, чтобы указать поведение. Если указано none
, то для исходного файла не создаются файлы классов. Если указано class
, то файлы классов создаются для исходного файла.
Компилятор может не обнаружить необходимость в какой-либо информации о типе до завершения обработки аннотации. Когда информация о типе находится в исходном файле и не указана опция -implicit
, компилятор выдает предупреждение о том, что файл компилируется без обработки аннотаций. Чтобы отключить предупреждение, либо укажите файл в командной строке (чтобы он подвергался обработке аннотаций), либо используйте параметр -implicit
, чтобы указать, следует ли создавать файлы классов для таких исходных файлов.