> For the complete documentation index, see [llms.txt](https://programmingfundamental.gitbook.io/programmingwithjava/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://programmingfundamental.gitbook.io/programmingwithjava/obektno-orientirano-programirane-1-chast/laboratorno-uprazhnenie-1/osnovi-na-programiraneto-s-java-za-nachinaeshi/vvedenie-v-java.md).

# Oбщи термини в Java

Преди да се пристъпи към изучаването на Java, е необходимо да бъдат изяснени понятието Java bytecode и разликите между JVM, JRE и JDK.

**Java bytecode**

Java bytecode е набор от инструкции за виртуалната машина на Java. Може да се дефинира като междинен код, генериран от компилатора след компилирането на изходния код (JAVA програма). При изпълнение на JAVA програма:

1. компилаторът преобразува изходния Java код в bytecode (машинен код под формата на .class файл) и
2. интерпретаторът изпълнява bytecode в системата. Интерпретаторът може също да се нарече JVM (Java Virtual Machine).

Bytecode е общата част между компилатора (който го създава) и интерпретатора (който го изпълнява). С негова помощ постигаме платформена независимост в Java, тъй като bytecode може да се изпълнява във всяка платформа, в която има инсталация на Java.

**Java Virtual Machine (JVM)**

JVM е абстрактна машина. Нарича се виртуална машина, защото не съществува физически. Това е спецификация, която предоставя среда за изпълнение, в която може да се изпълнява Java байткод. Всеки път, когато пишете Java команда в командния ред, за да стартирате Java клас, се създава инстанция на JVM.

JVM изпълнява следните основни задачи:

* Зарежда кода
* Потвърждава кода
* Изпълнява кода
* Осигурява среда за изпълнение

За всяка операционна система са предвидени различни JVM, но изходът, който произвеждат след изпълнение на bytecode, е еднакъв за всяка една от тях. Ето защо Java e платформено независим език.

**Java Runtime Environment (JRE)**

JRE е набор от софтуерни инструменти, които се използват за разработване на Java приложения. Използва се за осигуряване на среда за изпълнение, като имплементира JVM. Физически съществува. Той съдържа набор от библиотеки + други файлове, които JVM използва по време на изпълнение.

<figure><img src="https://static.javatpoint.com/images/jre2.png" alt=""><figcaption></figcaption></figure>

JRE е част от JDK, но може да съществува и самостоятелно. Когато имате JRE инсталиран на вашата система, можете да стартирате Java програма, обаче няма да компилирате такава. Когато е необходимо единствено да стартирате Java програма на компютъра си, JRE е напълно достатъчна.

**Java Development Kit (JDK)**

Както подсказва името, JDK е пълен комплект за разработка на Java програми, който включва JRE (Java Runtime Environment), компилатори (javac) и различни инструменти като JavaDoc, Java дебъгер и т.н. Създаването, компилирането и стартирането на Java програми изисква инсталиран JDK.

<figure><img src="https://static.javatpoint.com/images/jdk2.png" alt=""><figcaption></figcaption></figure>

Javac е основният компилатор за Java, включен в Java Development Kit. Той приема Java програма като вход и генерира Java bytecode като изход.<br>
