Theme images by Storman. Powered by Blogger.

26 September 2017

Memahami Objek Dalam Pemrograman Java

Setelah membahas mengenai class pada artikel sebelumnya “Memahami Class Dalam Pemrograman Java”, selanjutnya kita akan coba untuk lebih memahami objek. Berikut kode sebelumnya pada kode program Lampu.java

 public class Lampu {  

      String jenis;  
      int watts;  
      boolean kondisi;  

      void hidupkan() {  
           kondisi = true;  
           System.out.println(“Lampu hidup.”);  
      }  

      void matikan() {  
           kondisi = false;  
           System.out.println(“Lampu mati.”);  
      }  

      public static void main(String[] args) {  
           Lampu refLampu = new Lampu();  
           refLampu.jenis = “LED”;  
           refLampu.watts = 20;  
           refLampu.hidupkan();  
           refLampu.matikan();  
      }  

 }  

Penjelasan:

  • Lampu refLampu, berarti kita membuat sebuah variabel referensi.
  • Dengan operator = berarti kita memberi nilai pada refLampu, nilai apa ya ? 
  • Nilai yang diberikan berupa alamat memori dimana objek atau data sebenarnya disimpan dalam memori. Objek diciptakan dengan new Lampu().
Pada kode tersebut kita baru membuat satu objek. Tentu saja kita bisa membuat lebih dari satu objek. Perhatikan kode dibawah:

 Lampu refLED = new Lampu();  
 Lampu refBohlam = new Lampu();  

Pada kode diatas kita membuat 2 variabel referensi (reference variable) yaitu refLED dan refBohlam menunjuk ke objek mereka masing-masing. Perhatikan ilustrasi dibawah:

Ilustrasi antara variabel referensi dan objek

Untuk membuktikannya, ubah isi main method pada kode Lampu.java sebelumnya menjadi:

 \\...  
 public static void main(String[] args) {  

      // Deklarasi variabel referensi dan ciptakan objek baru.  
      Lampu refLED = new Lampu();  
      Lampu refBohlam = new Lampu();  

      // Beri nilai atribut jenis.  
      refLED.jenis = "LED";  
      refBohlam.jenis = "Bohlam";  

      // Tampilkan alamat objek yang ditunjuk.  
      System.out.println("Alamat objek refLED -> " + refLED);  
      System.out.println("Alamat objek refBohlam -> " + refBohlam);  

      // Tampilkan nilai dari atribut jenis.  
      System.out.println("Nilai atribut jenis objek refLED: " + refLED.jenis);  
      System.out.println("Nilai atribut jenis objek refLED: " + refBohlam.jenis);  

 }  
 \\...  

Output:

Output Lampu.java
Output Lampu.java
Dapat dilihat bahwa masing-masing variabel referensi memiliki nilai berupa alamat objek yang berbeda, tentu saat dilakukan pemberian nilai pada atribut, nilai atribut yang berubah adalah pada atribut masing-masing objek.
Heap merupakan memori tempat menyimpan objek (instansiasi dari class) dan array.
Faktanya variabel referensi, seperti yang telah dibahas sebelumnya, menyimpan sebuah alamat memori yang menunjukkan dimana objek atau data sebenarnya disimpan dalam memori. Silahkan perhatikan kode berikut:

 Lampu refLED = new Lampu();  
 Lampu refBohlam = new Lampu();  

 Lampu refNeon = refBohlam;  

Tambah sebuah variabel referensi bernama refNeon, dapat dilihat kita memberi nilai refNeon dengan nilai pada refBohlam. Artinya refNeon akan memiliki salinan nilai berupa alamat dari refBohlam. Sehingga memungkinkan dua variabel referensi menunjuk pada objek yang sama.

Ilustrasi 2 variabel menunjuk ke objek yang sama
Ilustrasi 2 variabel menunjuk ke objek yang sama
Silahkan buat kode berikut:

 public static void main(String[] args) {  

      Lampu refLED = new Lampu();  
      Lampu refBohlam = new Lampu();  
      Lampu refNeon = refBohlam;  

      System.out.println(“Alamat objek refBohlam -> ” + refBohlam);  
      System.out.println(“Alamat objek refNeon -> ” + refNeon);  

      // Ubah nilai atribut jenis melalui refBohlam   
      refBohlam.jenis = “Bohlam”;  
      System.out.println(“Jenis : ” + refBohlam.jenis);  

      // Ubah nilai atribut jenis melalui refNeon  
      refNeon.jenis = “Neon”;  

      // Tampilkan nilai atribut jenis melalui refBohlam  
      System.out.println(“Jenis : ” + refBohlam.jenis);  

 }  

Output Lampu.java
Output Lampu.java

Dari output dapat dilihat bahwa refBohlam dan refNeon menunjuk pada objek yang sama. Dan melalui dua variabel referensi tersebut objek yang ditunjuk dapat diakses.

Untuk membuat variabel referensi tidak menunjuk pada objek apapun, kita tinggal memberi nilai null pada variabel referensi tersebut.

 Lampu refLED = new Lampu();  
 Lampu refBohlam = new Lampu();  

 Lampu refNeon = refBohlam;  

 refLED = null;  
 refBohlam = null;  

Jadi refLED dan refBohlam bernilai null atau tidak menyimpan alamat memori apapun dengan kata lain tidak menunjuk pada objek manapun.

Ilustrasi variabel referensi bernilai null atau tidak menunjuk ke objek manapun
Ilustrasi variabel referensi bernilai null atau tidak menunjuk ke objek manapun

Setiap objek tentunya menggunakan sejumlah ruang memori, termasuk objek yang tidak terpakai lagi (objek yang tidak ditunjuk oleh variabel referensi manapun). Objek tidak terpakai ini nanti akan secara otomatis dibersihkan oleh Garbage Collector atau disingkat GC. GC menyediakan solusi otomatis dalam memory management, jadi kita sebagai programmer tidak perlu mengelola memori karena sudah secara otomatis dikelola.

 public static void main(String[] args) {  

      Lampu refLED = new Lampu();  
      Lampu refBohlam = new Lampu();  
      Lampu refNeon = refBohlam;  

      System.out.println("refLED  -> " + refLED);  
      System.out.println("refBohlam -> " + refBohlam);  
      System.out.println("refNeon  -> " + refNeon);  

      System.out.println("-------------------------------");  

      refLED = null;  
      refBohlam = null;  

      System.out.println("refLED  -> " + refLED);  
      System.out.println("refBohlam -> " + refBohlam);  
      System.out.println("refNeon  -> " + refNeon);  

 }  

Oupur Lampu.java

0 on: "Memahami Objek Dalam Pemrograman Java"