Rabu, Maret 06, 2019

Java Class File

File atau data dari Java class mengandung Java bytecode dan .class extension yang bisa dijalankan oleh JVM. Sebuah file Java diciptakan oleh Java Compiler dari .java files sebagai hasil dari proses kompilasi. Sebuah bahasa pemrograman Java source file (.java file) mengandung satu atau lebih class Java. Jadi jika  file .java mengandung lebih dari satu buah class maka setiap class akan dikompilasi menjadi class file yang berbeda.

Contoh: Lakukan save code Java dibawah ini dengan nama file Test.java pada sistem komputer.


Setelah dilakukan proses kompilasi oleh compiler maka akan dihasilkan tiga class file.

Tampilan dari struktur class file

ClassFile
{
     magic_number;
     minor_version;
     major_version;
     constant_pool_count;
     constant_pool[];
     access_flags;
     this_class;
     super_class;
     interfaces_count;
     interfaces[];
     fields_count;
     fields[];
     methods_count;
     methods[];
     attributes_count;
     attributes[];
}

Berikut penjelasan dari beberapa elemen class file:
satu, magic_number: empat bytes pertama dari class file disebut dengan magic_number. magic_number adalah nilai predefinisi dimana JVM menggunakannya untuk mengidentifikasi apakah .class file sudah di-generated oleh compiler dengan benar atau tidak. Nilai dari magic_number akan dinyatakan dalam hexadesimal seperti berikut;

0xCAFEBABE

Sekarang lihat apa yang terjadi ketika JVM tidak menemukan magic_number. Misalkan kita memiliki .java file dengan nama Sample.java, setelah itu ikuti perintah step by step berikut ini pada sistem komputer.


step 1: Lakukan compile atau kompilasi menggunakan perintah javac Sample.java
step 2: Buka file Sample.class, dan akan terlihat seperti gambar 1.

hasil kompilasi file java dengan nama file Sample.java menggunakan jvm
Gambar 1 hasil kompilasi Sample.java
sumber : geekforgeek.org

step 3: Hapus salah satu simbol dari file Sample.class dan simpan kembali file tersebut.
step 4: Jalankan program menggunakan java Sample command dan selanjutnya magic_number akan menampilkan run time exception seperti terlihat pada gambar 2.

tampilan run time exception file java dari command prompt windows
Gambar 2 runtime exception Sample.java
sumber : geekforgeek.org

Catatan: hasil ini akan bervariasi tergantung seberapa banyak data yang dihapus pada .class file.

dua, minor_version & major_version: kedunya berfungsi merepresentasikan versi dari .class file. JVM akan menggunakan kedua versi tersebut untuk mengidentifikasi versi mana dari compiler yang melakukan generate dari .class file saat ini. versi dari class file ditandai sebagai M.m, dimana M besar mewakili major_version dan m mewakili minor_version.

Catatan: Lower version compiler dapat mengeksekusi generate .class file menggunakan major_version JVM, tetapi tidak sebaliknya. Jika hal tersebut coba dilakukan maka akan didapat run time exception pada proses.

Contoh demonstrasi diperlihatkan dengan tahapan sebagai berikut (khusus os windows):
step 1: Buka command prompt Windows dan coba periksa Java compiler dan JVM version menggunakan perintah seperti diperlihatkan pada gambar 3 dan 4.

periksa compiler java dengan menggunakan command prompt windows
Gambar 3 periksa compiler Java
sumber : geekforgeek.org

periksa versi java dengan menggunakan perintah command prompt pada windows
Gambar 4 periksa versi Java
sumber : geekforgeek.org

step 2: Sekarang coba periksa versi lain yang lebih tinggi atau yang lebih rendah yang telah diinstal pada sistem komputer. Untuk melakukan instalasi versi terbaru Java dapat didownload melalui link oracle.com.
Setelah itu lakukan instalasi pada pc atau laptop dan catat lokasi instalasinya.

step 3: Buka command prompt kedua pada Windows dan atur rute dari folder bin instalasi JDK seperti diperlihatkan pada step 2 sebelumnya. Dan periksa versi dari Java compiler JVM yang telah diinstal tersebut seperti pada gambar 5.

periksa versi compiler Java dengan command prompt pada Windows
Gambar 5 periksa versi Java terbaru
sumber : geekforgeek.org

step 4: Pada command prompt yang pertama coba lakukan kompilasi terhadap .java file yang tersedia sebelumnya, seperti file Sample.java. Hasil kompilasi diperlihatkan seperti gambar 6.

kompilasi file Java dengan compiler pada command prompt Windows
Gambar 6 kompilasi file Java
sumber : geekforgeek.org

step 5: Pada command prompt yang kedua pada Windows coba jalankan hasil kompilasi dari file Sample.java yang dilakukan sebelumnya, hasilnya muncul runtime exception seperti diperlihatkan pada gambar 7.

hasil dari kompilasi memberikan runtime exception Java pada command prompt Windows
Gambar 7 runtime exception Java pada command prompt
sumber : geekforgeek.org

catatan: Secara internal JDK versi 1.5 artinya adalah 49.0, 1.6 artinya 50.0, 1.7 artinya 51.0 dan seterusnya. Angka yang diperlihatkan sebelum desimal menyatakan major_version dan angka yang diperlihatkan setelah desimal menyatakan minor_version.

tiga, constant_pool_count: merepresentasikan angka dari konstanta pada konstanta pool. Ketika Java file dikompilasi, semua referensi variabel dan method ditampilkan pada konstanta class pool sebagai simbol referensi.
empat, constant_pool[]: merepresentasikan informasi mengenai konstanta yang ditampilkan dalam pool file.
lima, access_flags: menyediakan informasi mengenai modifier yang dideklarasikan untuk class file.
enam, this_class: merepresentasikan nama kualifikasi penuh dari class file.
tujuh, super_class: merepresentasikan nama kualifikasi penuh dari super class terdekat saat ini. Seperti pada file Sample.java, ketika melakukan kompilasi maka this_class bisa disebut sebagai Sample class dan super_class sebagai Object class.
delapan, interface_count: mengembalikan nilai dari implementasi interface oleh class file saat ini.
sembilan, interface[]: mengembalikan informasi implementasi interface oleh class file saat ini.
sepuluh, fields_count: merepresentasikan angka dari tampilan fields (variabel static) pada class file saat ini.
sebelas, fields[]: merepresentasikan informasi field (variabel static) dari class file saat ini.
dua_belas, method_count: merepresentasikan angka dari method yang ditampilkan dalam class file saat ini.
tiga_belas, method[]: mengembalikan informasi mengenai semua method yang ditampilkan dalam class file saat ini.
empat_belas, attributes_count: mengembalikan angka dari atribut (variabel instance) yang ditampilkan dalam class file saat ini.
lima_belas, attributes[]: menyediakan informasi mengenai semua atribut yang ditampilkan dalam class file saat ini.





Related Posts

Java Class File
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "