Компьютер может распознать только машинный код 0101... язык программирования -> машинный код, который может быть выполнен, должен пройти через预处理->编译->汇编->链接->机器码
процесс. Схематическая диаграмма системы обработки языка выглядит следующим образом:
переводчикбудетРазовый перевод программ на исходный языкв эквивалентную программу, написанную на целевом языке. Существует еще один общеязыковой процессор,устный переводчик:этоПошаговое выполнение программ на исходном языке. Программа на целевом языке, созданная компилятором, обычно быстрее, чем интерпретатор, но интерпретатор обычно лучше диагностирует ошибки.
Процессор языка Java сочетает в себе процессы компиляции и интерпретации. Один.Java
Исходная программа сначала компилируется как.class
Файл байт-кода загружается в виртуальную машину, которая затем переводит байт-код в машинный код.
Преимущества виртуальных машинВот в чем дело: как только программа преобразуется в байт-код Java, она может работать в реализациях виртуальных машин на разных платформах. выполнитьНапиши один раз, беги куда угодно. Дополнительным преимуществом является то, что он приноситсреда размещения. Эта управляемая среда заботится о некоторых утомительных и подверженных ошибкам частях нашего кода, таких как автоматическое управление памятью и сборка мусора, от нашего имени.
В горячей точке,байт-код перевода виртуальной машиныЕсть два способа:
1. Объясните и выполнитеТо есть байт-код один за другим транслируется в машинный код и выполняется.
2. Своевременная компиляцияТо есть все байт-коды, содержащиеся в методе, компилируются в машинный код и затем выполняются.
Преимущество первого состоит в том, что не нужно ждать компиляции, а преимущество второго состоит в том, что он работает быстрее. HotSpot по умолчанию использует гибридный режим, который сочетает в себе преимущества интерпретируемого выполнения и своевременной компиляции. Сначала он интерпретирует и выполняет байт-код, а затем на лету компилирует код горячей точки, многократно выполняемый в модуле метода.
Компиляция Just-in-time основана на предположении, что программа соответствует закону 28, то есть 20% кода занимают 80% вычислительных ресурсов.
Ну вот и закончилась установка Х.
Компиляция знаний, которые знает моя тетя, все на нем. . (っ╥╯﹏╰╥с)
Как следует из названия, давайте посмотрим, что мы можем сделать, чтобы запустить проект Java.
То, что мы можем сделать, очень просто, конечно, не писать виртуальную машину. Нам просто нужно:
1. Выполнитьcommand javac
, который превращает файл .Java в файл .class.
2. Выполнитьcommand java
, пусть файл .class запускается.
То есть выполнить команду :)
Как работают Java-программы
Программы Java могут использовать команду javaЗапустите файл .classилиЗапустите исполняемый JAR-файл. Давайте рассмотрим первый способ: начнем с Hello World.
Запустите файл .class
Step1:编写Java文件
Step2:执行 command javac
Превратите файлы .java в файлы .class
Советы: Полный путь к файлу класса — это имя каталога пакета + имя файла класса.
Step3:执行 command java
Запустите файл .class
Удивительно, у нас нет IDE для запуска Java-программы :)
Маленькие друзья, не распыляйтесь сначала на старую тетку, зачем такой простой Java-проект. . Очевидно, мы используем файлы Jar в нашей работе...
Как запустить файл JAR! !
Запустите исполняемый JAR-файл
JAR-файлЭто формат файла, основанный на формате файла ZIP, который объединяет большое количество файлов классов Java, связанных файлов метаданных и ресурсов (текст, изображения и т. д.) в файл Jar, а также содержит необязательныйПапка META-INF. Файлы или папки в этой папке в основном используются для упаковки и расширения информации о конфигурации, включая безопасность, версию, расширения и службы. подобноMANIFEST.MFФайл определяет соответствующую информацию данных для расширения и упаковки. Файл Jar обычно используется в проекте как сторонняя библиотека классов, а также является частью сборки проекта.
Создание Jar-файла можно условно разделить на два этапа:
1. Скомпилируйте исходный файл в файл .class
2. Пройтиcommand jar
Команда вводит файлы .class, файлы ресурсов и т. д. в файл Jar в формате файла.
Давайте возьмем проект SbDemo в качестве примера, чтобы увидеть упаковку и запуск файлов Jar. Структура каталогов проекта выглядит следующим образом:
Метод Test1.java вызывается в Test2.java,
нам нужно сначалаСкомпилируйте и введите Test1.java в файл Test1.jar, а затем скомпилируйте и введите Test2.java в исполняемый файл Test2.jar через Test1.jar..
Разница между исполняемым и неисполняемым файлом Jar заключается в том, указана ли запись основного метода в файле Jar, мы рассмотрим это позже.
Step1:Test1.java的编译
Step2:将编译后的classes/com/Test1.class文件打成一个Test1.jar包
Команды, связанные с пакетами jar в Java,jar命令
, чтобы сгенерировать пакет jar, нам нужно определитьИнформационный файл (файл манифеста), который может определять путь поиска класса classpath сгенерированного пакета jar, класс входа пакета jar и так далее. можно понимать какИнформация о конфигурации метаданных, относящаяся к пакету Jar.Step2.1 书写信息文件
Здесь мы используемресурсы/manifest-test1.text файлкак информационный файлДа, Test1.java слишком прост, это jar-пакет, на который могут ссылаться другие, и информационный файл не важен.
Step2.2 执行打包命令
Step3. 编译Test2.java文件
Поскольку на класс com.Test1 ссылается Test2.java, нам нужно указать путь к классу во время компиляции.Classpath: Как следует из названия, это относится к пути к классу, от которого зависит компилируемый класс. Мы можем указать это через параметр javac -cp.
Приоритет значения пути к классам во время компиляции следующий:
- Если параметр пути к классам не передан, будет использоваться значение переменной среды CLASSPATH. (Вы не знаете, как просматривать и устанавливать переменные окружения? Перейдите к предыдущей статье тетушки :)
- Если переменная среды CLASSPATH не найдена, будет использована текущая папка (.), в которой выполняется команда.
- Если командная строка javac проходит
-classpath or -cp
Если параметр указывает значение пути к классам, он имеет наивысший приоритет.
Здесь мы используем -cp, чтобы указать расположение Test1.jar.Вы можете видеть, что файл com2/Test2.class был сгенерирован в каталоге классов.
Step4. 将编译后的Test2.class和它依赖的Test1.jar一起打成一个可执行的Jar包
Step4.1 书写信息文件
В настоящее время мы используем информационный файл resources/manifest-test2.text, чтобы указать эту информацию.
Step4.2 执行Jar包生成命令
Вы можете видеть, что Test2.jar создается в каталоге lib
Step5.运行我们的可执行Jar
Готово, наш проект SbDemo запущен и работает...
Конечно, настоящий проект нельзя скомпилировать и упаковать из человеческой плоти. Нам нужно использовать инструменты сборки, такие как Maven/Gradle, чтобы помочь нам управлять зависимостями пакетов Jar между кодами, сборкой, развертыванием... Мы можем размещать команды сборки и развертывания Maven, щелкая IDE большую часть времени.
Взяв Maven в качестве примера, Maven сначала определяет набор структур проекта, мы пишем код в соответствии с его структурой и вводим зависимости пакета Jar, необходимые для каждого модуля. Затем Maven может управлять этапами очистки, сборки, упаковки и развертывания проекта в течение своего собственного жизненного цикла. У каждого этапа есть соответствующий плагин Maven для выполнения соответствующей цели. IDE снова интегрирует Maven, так что мы можем завершить работу над проектом, нажав кнопку.
Однако, если проект построен не в соответствии со стандартной структурой инструмента сборки или проект не может успешно запуститься и сообщается об ошибке, понимание фактического процесса компиляции и выполнения Java поможет понять и решить такие проблемы.
Что ж, из-за нехватки места тетушка не будет рассказывать о ямах, которые за эти годы проложил Мейвен, хочешь посмотреть?关注,在看,转发
Три последовательных ответа >-
Использованная литература: [1] Предисловие к «Принципам составления» (゚´ω`゚)゚ [2].time.geekgang.org/column/areti…