Biz hər hansı bir IDE-də proqram yazsaq, o, bizim kompüterimizdə qovluq yaradır və IDE-də gördüyümüz işlər eynilə kompüterimizdə yaranan həmin qovluğun içində də təkrarlanır. Bu qovluğu həmin IDE-nin kompüterimizdə yaratdığı qovluqda tapmaq olar (məsələn, Netbeans ilə işləyiriksə, C:\Users\User\Documents\NetBeansProjects....). Yaranan həmin qovluqda src (Source Package), onun da içində proqramımızın adı ilə eyni olan qovluğu açırıq və içində .java fayllarını görürük.
Burada gördüyümüz .java faylı sadəcə mətn yazmaq üçün olan bir fayldır. Bu qovluqda olub IDE-də proqramımızın içində görmədiyimiz bütün fayllar həmin IDE-nin arxa fonunda işləyir, IDE isə bu qovluğu bizə proyekt, proqram olaraq göstərir. IDE bizə bu proqramla rahat şəkildə işləmə imkanı verir.
Kompüterimizdə Java yüklədikdən sonra yaranan qovluqda (C:\Program Files\Java) da 2 fərqli qovluq olduğunu görürük: jdk və jre qovluqları.
Hər ikisində də ayrılıqda “bin” adlı qovluq vardır. Jdk qovluğunda olan Bin qovluğunda digər fayllarla yanaşı, həm java.exe, həm də javac.exe faylları olduğu halda, Jre qovluğunda olan Bin qovluğunda isə bu ikisindən yalnız java.exe faylı var, javac.exe yoxdur. (javac.exe - Java Compiler, java.exe - Java Interpreter)
JavaC – Java Compiler (Java kompayler – Java tərtibçi) deməkdir. Biz IDE-də yazdığımız kodu işə salanda, yəni “run” edəndə, IDE sanki gedib jdk qovluğunun içində olan javac faylını çağırır. Javac isə insanın başa düşəcəyi dildə olan və sonu .java ilə bitən həmin faylı compile (kompayl) edir, tərtib edir və maşının başa düşəcəyi dilə çevirir, hansı ki, o kodu da insan başa düşmür. Yəni insanın başa düşəcəyi dildə yazılan kod .java ilə bitən koddur, onu özümüz yazırıq > Compiler onu compile edərək baytkoda çevirir > sonra da .class faylı yaranır ki, bunu da insan başa düşmür, bu, maşının başa düşəcəyi dildə olur.
Biz IDE-də proyekt yaratdığımız zaman kompüterdə o proyekt üçün Src qovluğu yaranırdı, hansı ki, içində .java faylları olurdu. Biz proyekti işə saldığımız, yəni run etdiyimiz zaman isə proyektin qovluğunda avtomatik olaraq bir də Classes adlı qovluq yaranır ki, yaranmış həmin .class faylları da orada toplanır (C:\Users\User\Documents\NetBeansProjects\NewProject\target\classes). IDE-də hansı siniflər yaratmışıqsa, onların hər birini burada sonu .class olan fayl olaraq görə bilərik. Amma biz kompüterimizdə olan bu .class fayllarını açsaq da kodu anlamayacağıq, çünki bu artıq maşın dilinə çevrilib. Bu koda Java dünyasına “Byte Code” (bayt kod) deyilir.
Daha sonra jdk > lib qovluğunda olan JVM (Java Virtual Machine – Java Virtual Maşın) gəlir, maşın dilində olan həmin bayt kodu oxuyur və Əməliyyat Sisteminə komanda verərək, yazılan koda əsasən, nə etməli, hansı əməliyyatı icra etməli olduğunu deyir. Əməliyyat Sistemi də aldığı bu komandaya uyğun olaraq, həmin işi icra edir.
Yaxud sxem olaraq, daha sadə üsulla belə də izah etmək olar:
Burada Windows, macOS, Linux kimi Əməliyyat Sistemləri olur.
Virtual Maşın o deməkdir ki, o, fiziki olaraq mövcud olmayan bir maşındır, virtualdır, biz ona toxuna bilmirik, o sadəcə kompüterin içində virtual olaraq mövcuddur. Bu, bir proqram olduğuna, işləyib, nələrisə başa düşüb icra etdiyinə görə də buna maşın deyilir. Jdk qovluğunda olan java işə düşür, amma işləyən təkcə o deyil, java sadəcə başlanğıc nöqtəsidir. O işə düşür və oradakı bütün fayllardan istifadə edərək, bir virtual maşın qurur. Bu zaman .class faylını əldə etdikdən sonra .java faylları bizə lazım olmur, çünki işə düşən onsuz da .class fayllarıdır, Java .class fayllarını işə salır. Yuxarıda deyildiyi kimi, bin qovluğunda java və javac faylları olduğu halda, jre qovluğunda java faylı var, amma javac faylı yoxdur. Çünki jre qovluğu proqramı compile etmək üçün yox, işə salmaq üçün mövcuddur. Yəni bizim proqramımızın hansısa kompüterdə işə düşməsi üçün bizə jdk yox, jre lazımdır ki, compile etməsin, sadəcə işə salsın. Bir proqramçı həm kod yazıb onu compile etməli, həm də kodu işə salmalıdır. Ona görə də jdk yükləyəndə bunların hər ikisi onun içində avtomatik yüklənir.
- Jre - Java Runtime Enviroment, yəni iş zamanı olan mühit mənasını verir. Bu isə Javadır, javac deyil.
- Jdk – Java Development Kit, yəni proqramistin kod yazması zamanı ona lazım olan bütün alətlər mənasını verir.
Bunların hər ikisi jdk-nın içində var.