Paket bertujuan mengorganisir keterhubungan kelas dan mendefinisi-
kan namespace untuk kelas-kelas yang berada di dalamnya. Dalam
upaya memudahkan penggunaan, menghindari konflik nama, dan
mengontrol akses kelas-kelas maupun interface-interface, kita bisa
mengelompokkannya ke dalam suatu paket.
8
• Deklarasi Paket
Paket dideklarasikan menggunakan pernyataan package yang di-
ikuti dengan nama paket dan subpaket (jika ada). Deklarasi paket
sebaiknya dilakukan di bagian paling awal kode program. Contoh
deklarasi paket diperlihatkan seperti berikut:
package com.indodesain.didik;
Dalam implementasinya, nama paket dan subpaket sebenarnya
mencerminkan struktur direktori dengan susunan sesuai penamaan.
Apabila kita tidak menggunakan paket, maka kelas terkait meru-
pakan bagian dari paket default (tanpa nama).
• Mengakses Member Paket
Kelas-kelas dan interface-interface di dalam paket, atau disebut
member paket, hanya dapat diakses dari luar paket apabila ia dide-
finisikan sebagai public. Ada dua pendekatan yang bisa kita
gunakan untuk mengakses member paket, yaitu dengan mengacu
nama lengkap dan mengimpor member.
Misalkan di subpaket didik terdapat kelas Test, maka cara meng-
acunya adalah seperti berikut:
com.indodesain.didik.Test t = new com.indodesain.didik.Test();
Untuk pendekatan kedua, kita terlebih dahulu menuliskan keyword
import yang diikuti nama paket.
import com.indodesain.didik.Test;
…
// Instantiasi di body kelas
Test t = new Test();
Pada pendekatan kedua, Anda juga diperkenankan mengimpor se-
luruh member yang dinyatakan dengan karakter asterik (*).
import com.indodesain.didik.*;
Walaupun pendekatan acuan dengan nama lengkap terkesan kurang
efektif, namun dalam situasi-situasi tertentu sangat diperlukan. Seba-
gai contoh, pendekatan ini lazim digunakan untuk menghindari kon-
flik ketika mengakses member di beberapa paket dengan nama
sama.
9
• Impor Otomatis
Secara otomatis JRE akan mengimpor member yang ada di paket
java.lang, paket default, dan current paket. Oleh karena itu, pada
saat menggunakan member di paket-paket tersebut, kita tidak perlu
melakukan impor secara eksplisit. Sebagai contoh, kita bisa lang-
sung menggunakan kelas String tanpa terlebih dahulu mengimpor
java.lang.String ataupun mengacu nama lengkapnya.
Di Java 5.0, ada fitur baru yang memungkinkan kita untuk meng-
impor dengan tambahan pernyataan static. Penjelasan mengenai
fitur ini akan kita bahas lebih lanjut setelah mengulas pernyataan
static.
• Strategi Impor Paket
Seringkali kita melihat program-program Java yang mendeklarasi-
kan pernyataan import untuk mengakses member paket secara
lengkap. Contohnya seperti berikut:
import java.io.File;
import java.io.FileReader;
import java.net.URL;
Tak jarang pula, kita melihat deklarasi yang menggunakan karakter
asterik. Contohnya seperti berikut:
import java.io.*;
import java.net.*;
import java.util.*;
Sebenarnya, apa kelebihan dan kekurangan masing-masing pen-
dekatan di atas? Apakah pengaksesan member paket dengan nama
lengkap lebih cepat dieksekusi dibanding penggunaan karakter
asterik?
Pada prinsipnya, deklarasi lengkap memang lebih cepat dikompilasi
dibanding pendekatan asterik. Meski demikian, deklarasi lengkap
tidak menawarkan kelebihan ketika program dieksekusi (diinter-
pretasi). Dalam segi efisiensi penulisan, pendekatan asterik tentu
menawarkan kelebihan bagi kita. Selain itu, ketika kita ingin
mengganti penggunaan kelas (misal dalam satu paket), kita tidak
perlu menghapus deklarasi sebelumnya dan mengganti dengan
deklarasi baru.
10
Meskipun pengaksesan dengan karakter asterik tidak berpengaruh
terhadap eksekusi program, namun bukan berarti pendekatan ini
paling efisien. Setidaknya, kita bisa menggunakan strategi berda-
sarkan kasus yang kita hadapi. Sebagai contoh, jika kita hanya me-
merlukan satu atau dua kelas/interface di satu paket, akan lebih
efisien jika kita mendeklarasikan nama member paket secara leng-
kap. Sebaliknya, jika jumlah kelas atau interface yang kita perlukan
cukup banyak, tentu akan praktis jika kita menggunakan karakter
asterik.