Bab 1 : Pengenalan Terhadap Java
- Sebutkan kelebihan-kelebihan yang dimiliki oleh Java yang Anda ketahui!
Jawaban :
· Bersifat portable dan platform independent . Program Java yang Anda tulis akan dapat dieksekusi di platform mana pun tanpa memerlukan kompilasi ulang (portable) asalkan Java Virtual Machine untuk platform tersebut tersedia.
· Memiliki garbage collection yang dapat mendealokasikan memori secara otomatis. Anda tidak perlu secara eksplisit membebaskan suatu lokasi memori yang dipakai karena ini akan dilakukan secara otomatis oleh Java.
· Menghilangkan pewarisan berganda yang terdapat pada C++. Walaupun kelihatannya lebih sebagai suatu kekurangan, namun banyak para ahli yang mengakui bahasa konsep pewarisan berganda lebih banyak mengakibatkan kerugian dari pada keuntungan. Java telah didesain sedemikian rupa sehingga Anda tidak akan memerlukan tehnik ini dalam pembuatan program apa pun.
· Mengurangi pointer aritmetik. Pengaksesan lokasi memori secara langsung dengan menggunakan pointer memungkinkan program untuk melakukan suatu tindakan yang tidak seharusnya atau tidak boleh dilakukan. Untuk mengurangi dan menghilangkan kemungkinan kesalahan seperti ini, penggunaan pointer pada Java telah dibatasi dengan menggunakan reference.
· Memiliki array sejati.
· Mengurangi kerancuan antara pemberian nilai pada statement kondisional. Contoh penggunaan tanda ‘=’ dengan ‘==’ pada kondisi if.
- Apa yang Anda ketahui tentang karakteristik Java?
Jawaban :
- Berorientasi Objek, Java telah menerapkan konsep pemrograman berorientasi objek yang modern dalam implementasinya.
- Robust, Java mendorong pemrograman yang bebas dari kesalahan dengan bersifat strongly typed dan memiliki runtime checking.
- Portable, program Java dapat dieksekusi di platform mana pun selama tersedia Java Virtual Machine untuk platform tersebut.
- Multithreading, Java mendukung penggunaan multithreading yang telah terintegrasi secara langsung dalam bahasa Java.
- Dinamis, program Java dapat melakukan suatu tindakan yang ditentukan pada saat eksekusi program dan bukan pada saat kompilasi.
- Sederhana, Java menggunakan bahasa yang sederhana dan mudah dipelajari.
- Terdistribusi, Java didesain untuk berjalan pada lingkungan yang terdistribusi seperti halnya internet.
- Aman, aplikasi yang dibuat dengan bahasa Java dapat dipastikan keamanannya terutama untuk aplikasi internet.
- Netral secara arsitektur, Java tidak terikat pada suatu mesin atau sistem operasi tertentu.
- Interpreted, aplikasi Java dapat dieksekusi pada platform yang berbeda-beda dengan melakukan interpretasi pada bytecode.
- Berkinerja Tinggi, bytecode Java telah sangat teroptimasi, sehingga eksekusi program dapat dilakukan secara cepat sekalipun dilakukan dengan cara interpretasi terhadap bytecode.
Bab 2: Pengenalan Objek: Paradigma Pemrograman Berbasis Objek
- Jelaskan perbedaan antara state dan behavior. Berikan contohnya!
Jawaban:
State merupakan keadaan dari suatu objek, contohnya tinggi, berat, usia, merupakan state yang dimiliki oleh objek manusia. State ini bersifat pasif karena ia tidak dapat melakukan operasi apa pun, padanya justru dilakukan operasi. Oleh karena itu secara sederhana state dapat dianggap sebagai ‘kata benda’. Sedangkan behaviour merupakan operasi atau aktivitas yang dapat dilakukan oleh suatu objek, contohnya makan, minum, menua, bekerja, merupakan behaviour yang dimiliki oleh objek manusia. Aktivitas ini dapat (tidak selalu) mempengaruhi state dari objek itu sendiri, misalnya behaviour menua dapat merubah state umur. Oleh karena sifatnya ini, secara sederhana behaviour dianggap sebagai ‘kata kerja’.
- Jelaskan apa yang dimaksud dengan class dan objek ! Apa bedanya dan berikan contohnya!
Jawaban:
Class digunakan untuk menggambarkan suatu model atau spesifikasi dari suatu entitas, sedangkan objek merupakan kenyataan, realisasi atau perwujudan dari class itu sendiri. Contoh sederhana : desain arsitektur gedung dan gedung yang dibuat berdasarkan desain tersebut. Desain arsitektur gedung dapat dianggap sebagai class, sedangkan gedung yang dibangun berdasarkan desain itu sendiri dapat dianggap sebagai objeknya.
Bab 3 : Sintaks Bahasa dan Tipe Data
- Apa perbedaan antara tipe data primitif dan tipe data referensi?
Jawaban :
Tipe data primitif merupakan tipe data dasar yang dikenal oleh Java. Variabel dengan tipe data primitif dapat langsung digunakan untuk ‘memegang’ data yang sesuai dengan tipe datanya. Contoh : int var = 3; maka nilai variabel var adalah 3.
Sedangkan tipe data referensi digunakan untuk semua tipe data selain tipe data primitif termasuk di sini adalah array dan class. Variabel dengan tipe data referensi tidak ‘memegang’ secara langsung nilai yang hendak disimpan, melainkan variabel ini hanya ‘memegang’ referensi (alamat) dari nilai yang sebenarnya yang ada di memori.
- Untuk melatih pengetahuan Anda akan tipe data, buatlah program untuk menghitung luas :
- Segitiga
- Lingkaran
- Bujursangkar
- Empat persegi panjang
Hati-hati dengan konversi tipe data secara otomatis yang dilakukan oleh Java, terutama konversi dari tipe floating-point ke integer.
Jawaban :
public class HitungLuas { public static void main(String[] args) { // data segitiga int panjangSegitiga = 5; int tinggiSegitiga = 9; // data lingkaran int jari2Lingkaran = 15; // data bujursangkar int panjangSisi = 13; // data persegi panjang int panjangPersegi = 35; int lebarPersegi = 45; double luas; // luas segitiga luas = ((double) (panjangSegitiga*tinggiSegitiga)/2); System.out.println("Luas Segitiga : " + luas); // luas lingkaran luas = 3.14*jari2Lingkaran*jari2Lingkaran; System.out.println("Luas Lingkaran : " + luas); // luas bujursangkar luas = panjangSisi*panjangSisi; System.out.println("Luas Bujursangkar : " + luas); // luas persegi panjang luas = panjangPersegi*lebarPersegi; System.out.println("Luas Persegi Panjang : " + luas); } } |
output program :
Bab 4 : Operator
1. Apa perbedaan x++ dan ++x, jelaskan!
Jawaban :
Penggunaan x++ dan ++x jika tidak dikombinasikan dengan ekspresi lainnya tidak memiliki perbedaan sama sekali. Perbedaannya baru akan terasa jika penggunaannya digabung dengan suatu ekspresi. Namun secara sederhana x++ dapat diartikan : lakukan operasi terhadap x baru kemudian tambahkan tambahkan dengan 1. Sedangkan ++x dapar diartikan : jumlahksn x dengan 1, baru kemudian lakukan operasi terhadap x. Contoh :
y = x++ + 10; sama dengan : y = x + 10;
x = x + 1;
Sedangkan
y = ++x + 10; sama dengan : y = x + 1;
x = x + 10;
2. Bagaimana menghitung perkalian dan pembagian dengan bilangan dua tanpa menggunakan operator matematika?
Jawaban :
Perkalian dengan bilangan dua dapat dilakukan dengan menggunakan operator bitwise << (geser kiri). Sedangkan untuk pembagian dapat dilakukan dengan menggunakan operator bitwise >> (geser kanan).
Contoh penjelasan :
124/2 = 124 >> 1
124 = 0000000001111100
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ >> 1
0000000000111110 = 62
124*2 = 124 << 1
124 = 0000000001111100
/ / / / / / / / / / / / / / / << 1
0000000011111000 = 248
3. Bagaimana menukar nilai dari dua variabel integer dengan tanpa menggunakan variabel perantara.
Jawaban :
Contoh : variabel A = 22 dan B = 34, tanpa menggunakan variabel perantara, tukarlah kedua nilai dari variabel tersebut sehingga variabel A = 34 dan B = 22.
Untuk menukar nilai dari dua buah variabel integer tanpa menggunakan variabel perantara dapat digunakan operator bitwise XOR. Perhatikan contoh penjelasan berikut ini :
A = 22 dan B = 34
Hasil dari A XOR B adalah
A = 22 = 0000000000010110
B = 34 = 0000000000100010
A XOR B = 0000000000110100 = 52
Jika kita anggap hasil dari A XOR B adalah C maka
A = 22 = 0000000000010110
C = 52 = 0000000000110100
B XOR C = 0000000000010110 = A
Dapat disimpulkan bahwa jika C = A XOR B,
maka C XOR A = B dan C XOR B = A
Dengan demikian, Anda dapat menuliskan kode berikut ini untuk menukar nilai dari dua buah variabel integer A dan B di atas :
A = A ^ B;
B = A ^ B;
A = B ^ A;
Sehingga sekarang nilai variabel A = 34 dan B = 22.
Bab 5 : Kontrol Alur Eksekusi Program
1. Buatlah program yang menghasilkan ouput seperti di bawah ini!
Jawaban :
public class Bintang { public static void main(String[] args) { int ukuran = 7; for (int i = 0; i<ukuran; i++) { int j; int spasiCounter = ukuran - i - 1; for (j = 0; j < spasiCounter; j++) { System.out.print(" "); } for (j = 0; j <= (i*2); j++) { if (j % 2 == 1) System.out.print(" "); else System.out.print("*"); } System.out.println(); } } } |
Bab 6 : Class
Buatlah sebuah class dengan nama Televisi, yang mempunyai property :
· deskripsi : untuk menyimpan nama/deskripsi dari televise. Property ini hanya dapat diset saat pembuatan saja, dapat dibaca namun tidak dapay diubah setelahnya.
· jumlahChannel : untuk menyimpan banyaknya channel yang dapat disimpan oleh televisi. Property ini hanya dapat diset saat pembuatan saja, dapat dibaca namun tidak dapat diubah setelahnya.
· channels : untuk menyimpan data channel stasiun televisi yang sudah diset. Property ini dapat dibaca dan diubah kapan saja.
· channelAktif : untuk menyimpan nomor channel yang sedang aktif saat ini. Property ini dapat dibaca dan diubah kapan saja.
· volume : untuk menyimpan informasi besarnya volume televisi yang sedang aktif saat ini. Property ini dapat dibaca dan diubah kapan saja.
Selain itu objek Televisi tersebut juga harus mendukung operasi berikut ini :
· Menset channel stasiun televisi yang diinginkan. Ini sama halnya jika Anda membeli televisi baru, hal pertama kali yang Anda lakukan tentunya adalah mendaftarkan semua channel stasiun televisi yang ada ke dalam televisi Anda.Sehingga berikutnya jika Anda ingin menonton televisi yang Anda inginkan, Anda cukup memasukkan nomor channel dari stasiun tersebut yang sudah terdaftar pada televisi tersebut. Anda juga tidak boleh menset channel lebih banyak dari jumlah channel yang dapat ditampung oleh televisi.
· Mengganti channel stasiun yang sedang aktif. Jika nomor channel yang diinginkan ternyata belum diset ke stasiun televisi manapun, tampilkan informasi yang memberitahukan hal tersebut.
· Mengubah volume suara.
· Menampilkan deskripsi dari televisi.
Class Televisi yang Anda buat tersebut harus dapat digunakan oleh program berikut ini :
public class User { public static void main(String[] args) { Televisi tv = new Televisi("TV tempoe doeloe, 14 inches", 10); String[] semuaChannel = {"RCTI", "SCTV","INDOSIAR","LA TV", "METRO TV","TRANS TV","TPI","TV 7", "TVRI","TV G","AN TV"}; String[] channelFavorit = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "MTRO TV","TRANS TV","TPI","TV 7"}; System.out.println("Televisi yang baru gua beli : " + tv.getDeskripsi()); tv.getChannels(); tv.setChannels(semuaChannel); tv.setChannels(channelFavorit); tv.setChannelAktif(3); tv.setVolume(10); tv.setChannelAktif(1); } } |
Dengan hasil eksekusi seperti berikut ini :
Jawaban :
class Televisi { private String deskripsi; private int jumlahChannel; private String[] channels = null; private int channelAktif; private int volume; public Televisi(String deskripsi, int jumlahChannel) { this.deskripsi = deskripsi; this.jumlahChannel = jumlahChannel; } public String getDeskripsi() { return deskripsi; } public int getJumlahChannel() { return jumlahChannel; } public String[] getChannels() { if (channels == null) { System.out.println("Belum ada channel yang diset!"); } return channels; } public void setChannels(String[] channels) { if (channels.length > jumlahChannel) { System.out.println("Maaf Tv ini hanya dapat menyimpan " + jumlahChannel + " channel"); } else { this.channels = channels; System.out.println("Informasi channel berhasil di update!"); } } public int getChannelAktif() { return channelAktif; } public void setChannelAktif(int channelAktif) { if (channelAktif > channels.length) { System.out.println("Channel yang Anda inginkan belum diset!"); return; } this.channelAktif = channelAktif; System.out.println("Pindah channel ke : " + channels[channelAktif]); } public int getVolume() { return volume; } public void setVolume(int volume) { this.volume = volume; System.out.println("intensitas volume sekarang : " + volume); } } |
Bab 7 : Pewarisan
1. Keuntungan apa yang dapat Anda peroleh dengan melakukan pewarisan dan kapan Anda mungkin perlu untuk melakukannya?
Jawaban :
Keuntungan terutama yang Anda dapatkan adalah ‘reusable code’, karena dengan menurunkan suatu class dari Superclass, Anda cukup menambahkan kode specific yang dimiliki oleh class itu saja sedangkan kode lainnya mungkin tidak perlu Anda ketik ulang karena telah didapat dari Superclass-nya.
2. Apa yang terjadi jika Anda mendeklarasikan member pada Subclass yang sama persis dengan yang dimiliki oleh superclass-nya? Bagaimana pula cara subclasss agar dapat mengakses member dari superclass tersebut?
Jawaban :
Member yang Anda deklarasikan pada subclass yang sama persis dengan member yang dideklarasikan oleh superclass-nya dikatakan meng-override member dari superclass tersebut. Untuk mengakses member dari superclass ini dari subclass-nya harus digunakan keyword super.
3. Buatlah sebuah class turunan bernama class TelevisiModern dari class Televisi yang telah Anda buat pada soal di bab 6. Tambahkan fasilitas teletext dan cd player built-in yang dapat digunakan oleh contoh program berikut ini :
public class User { public static void main(String[] args) { TelevisiModern tv = new TelevisiModern("TV Modern, 29 inches", 100); String[] semuaChannel = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "METRO TV", "TRANS TV", "TPI", "TV 7", "TVRI", "TV G", "AN TV"}; String[] channelFavorit = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "MTRO TV", "TRANS TV", "TPI", "TV 7"}; System.out.println("Televisi yang baru gua beli : " + tv.getDeskripsi()); tv.getChannels(); tv.setChannels(semuaChannel); tv.setChannelAktif(3); tv.setVolume(10); tv.setChannelAktif(10); tv.setChannelAktif(1); tv.setModusTampilan(TelevisiModern.TELETEX); tv.setHalamanTeletext(250); tv.setModusTampilan(TelevisiModern.TV); tv.playCD(); tv.setDiscTray("The Matrix"); tv.playCD(); } } |
Dengan tampilan hasil eksekusi seperti berikut ini :
Jawaban :
public class TelevisiModern extends Televisi { public static final int TV = 0; public static final int TELETEXT = 1; int modusTampilan = TV; int halamanTeletext = 100; String discTray = null; public TelevisiModern(String deskripsi, int jumlahChannel) { super(deskripsi, jumlahChannel); } public void setHalamanTeletext(int halamanTeletext) { this.halamanTeletext = halamanTeletext; System.out.println("Berpindah ke halaman teletext " + halamanTeletext); } public void setModusTampilan(int modusTampilan) { switch (modusTampilan) { case TV: System.out.println("Modus tampilan : Televisi"); break; case TELETEXT: System.out.println("Modus tampilan : Teletext"); break; } } public String getDiscTray() { return discTray; } public void setDiscTray(String discTray) { this.discTray = discTray; } public void playCD() { if (discTray == null) { System.out.println("Tidak ada CD di dalam disc tray!"); return; } System.out.println("Memutar file " + discTray); } } |
Bab 8 : Interface
Buatlah sebuah interface bernama Control dan rombaklah class TelevisiModern yang telah anda buat pada soal Bab 7 di atas agar mengimplmentasi interface Control ini sehingga semua fungsi objek dari class TelevisiModern tersebut dapat di akses melalui interface tersebut! Buat juga sebuah class baru bernama RemoteControl di mana objek dari class inilah yang akan menggunakan interface Control untuk mengakses fungsi objek dari class TelevisiModern tersebut! Class dan Interface yang telah dibuat tersebut harus dapat digunakan seperti dalam contoh program berikut ini:
public class User { public static void main(String[] args) { TelevisiModern tv1 = new TelevisiModern("TV Sony 29 inches", 200); TelevisiModern tv2 = new TelevisiModern("TV Hitachi 21 inches", 100); String[] semuaChannel = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "METRO TV", "TRANS TV", "TPI", "TV 7", "TVRI", "TV G", "AN TV"}; String[] channelFavorit = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "METRO TV", "TRANS TV", "TPI", "TV 7"}; tv1.setDiscTray("The Matrix"); tv2.setDiscTray("Spiderman"); // remote control diarahkan ke tv1 RemoteControl rc = new RemoteControl(tv1); rc.setChannels(semuaChannel); rc.setChannelAktif(3); rc.setVolume(10); rc.setChannelAktif(10); rc.setModusTampilan(TelevisiModern.TELETEXT); rc.setHalamanTeletext(250); rc.setModusTampilan(TelevisiModern.TV); rc.playCD(); System.out.println(); //remote control diarahkan ke tv2 rc.setTv(tv2); rc.setChannels(channelFavorit); rc.setVolume(20); rc.setChannelAktif(1); rc.playCD(); } } |
Jawaban:
public interface Control { public String getDeskripsi(); public String[] getChannel(); public int getJumlahChannel(); public void setChannels(String[] channels); public int getChannelAktif(); public void setChannelAktif(int channelAktif); public int getVolume(); public void setVolume(int volume); } public class RemoteControl implements Control { Control tv = null; public RemoteControl(Control tv) { this.tv = tv; System.out.println("Remote diarahkan ke tv : " + tv.getDeskripsi()); } public void setTv(Control tv) { this.tv = tv; System.out.println("Remote diarahkan ke tv : " + tv.getDeskripsi()); } public String getDeskripsi() { return tv.getDeskripsi(); } public int getJumlahChannel() { return tv.getJumlahChannel(); } public String[] getChannels() { return tv.getChannels(); } public void setShannels(String[] channels) { tv.setChannels(channels); } public int getChannelAktif() { return tv.getChannelAktif(); } public void setChannelAktif(int channelAktif) { tv.setChannelAktif(channelAktif); } public int getVolume() { return tv.getVolume(); } public void setVolume(int volume) { tv.setVolume(volume); } public void setHalamanTeletext(int halamanTeletext) { tv.setHalamanTeletext(halamanTeletext); } public void setModusTampilan(int modusTampilan) { tv.setModusTampilan(modusTampilan); } public void playCD() { tv.playCD(); } } |
Selanjutnya class TelevisiModern yang telah anda buat sebelumnya harus dideklarasikan agar mengimplementasi interface Control diatas.
Bab 9 : Package dan Classpath
1. Bagaimana cara anda memberitahu Java untuk menggunakan classpath yang anda inginkan dan bagaimana pula cara Java memanfaatkan classpath ini untuk mendapatkan class yang dibutuhkan ?
Jawaban:
Cara pertama adalah dengan menset environment variabel yang bernama CLASSPATH agar menampung semua path yang mungkin dibutuhkan untuk mendapatkan class ataupun interface yang akan digunakan. Misalnya, class yang dibutuhkan terletak pada direktori c:\java_projects\classes dan d:\java_tool\lib, maka environment variabel CLASSPATH harus berisi kedua path tersebut. Pada sistem operasi Windows hal ini dapat Anda lakukan dengan mengetikan perintah berikut ini pada command prompt (dos prompt):
set CLASSPATH= c:\java_projects\classes; d:\java_tool\lib
Direktori yang terdaftar dalam CLASSPATH ini akan digunakan oleh Java sebagai titik awal (root) pencarian dari class yang dibutuhkan. Misalnya, jika anda mengetikkan perintah berikut ini:
java TesMe
maka Java akan mencari class TesMe ini dalam kedua direktori di atas. Jika class yang hendak anda eksekusi menggunakan package, misalnya anda hendak mengeksekusi program dengan mengetikan perintah berikut ini:
java bab9.TesPackage
maka Java akan mencari class TesPackage dalam direktori:
c:\java_projects\classes \bab9 dan
d:\java_tool\lib\bab9.
Cara kedua yang dapat dilakukan untuk menset CLASSPATH adalah dengan mengunakan switch
-classpath <daftar-direktori>
pada waktu hendak mengompilasi ataupun hendak mengeksekusi suatu program. Contoh:
java -classpath c:\java_projects bab9.TesPackage
2. keuntungan apa saja yang dapat anda peroleh dengan menggunakan package dalam program?
Jawaban:
Dengan menggunakan package anda menciptakan name space anda sendiri sehingga anda dapat menggunakan nama yang sama dengan class maupun interface asalkan kedua class maupun interface tersebut berada di dalam package yang berbeda. Selain itu dengan menggunakan package, file class maupun interface yang anda buat akan tersimpan dengan rapi dalam direktorinya masing-masing sehingga memudahkan pencarian. Menaruh file dalam jumlah besar ke dalam satu direktori saja akan mudah menimbulkan kebingungan pada saat pencarian.
3. Jelaskan fungsi keyword import dalam hubungannya dengan penggunaan package!
Jawaban:
Keyword import dipakai jika anda ingin menggunakan class ataupun interface yang berbeda pada package yang berbeda dari tempat dimana anda ingin menggunakannya. Dengan menggunakan keyword import ini, anda tidak perlu menuliskan full package class/interface name untuk dapat menggunakan class atau interface yang ada dalam suatu package. Anda cukup menggunakan nama classnya saja secara langsung.
Bab 10 : Penanganan Eksepsi
1. Apa perbedaan antara keyword throw dengan keyword throws!
Jawaban :
Keyword throw digunakan untuk melempar suatu eksepsi dalam program, contoh kode:
If (ada yang salah)
Throw new Exception(“Salah nih….!”);
Sedangkan keyword throws digunakan pada waktu mendeklarasikan suatu method untuk memberitahu bahwa method yang bersangkutan dapat melempar eksepsi dengan tipe yang dideklarasikan oleh keyword throws tersebut. Contoh kode :
void methodAneh() throws IOException, Exception {}
Penggunaan keyword throws ini juga hanya diperlukan jika eksepsi yang hendak dilempar merupakan eksepsi yang dicek (bukan merupakan turunan dari class RuntimeException dan umumnya merupakan turunan dari class Exception).
2. Jelaskan fungsi pembuatan subclass eksepsi sendiri!
Jawaban :
Dengan membuat class eksepsi sendiri berarti Anda membuat tipe data baru dimana tipe data baru ini dapat Anda gunakan untuk melempar suatu eksepsi untuk kemudian ditangkap pada bagian lain dari program. Dengan menggunakan tipe data eksepsi yang berbeda-beda, program dapat mengetahui apa kira-kira penyebab eksepsi yang bersangkutan sehingga dapat bertindak sebagimana mestinya.
Bab 11 : Pemrograman Multithreading
1. Menurut Anda, kapan sebaiknya menggunakan interface Runnable dan kapan membuat turunan dari class Thread?
Jawaban :
Interface Runnable digunakan jika Anda harus menurunkan class yang Anda buat dari class lainnya sehingga tidak memungkinkan lagi untuk diturunkan dari class Thread. Namun membuat class turunan dari class Thread sangat disarankan jika class yang Anda buat tersebut akan meng-override member dari class Thread tersebut.
2. Pertimbangan apa yang kira-kira digunakan pada saat Anda memutuskan penggunaan antara sinkronisasi pada method dengan sinkronisasi pada objek!
Jawaban :
Sinkronisasi pada method mengharuskan method tersebut dideklarasikan dengan menggunakan keyword synchronized. Jika ternyata pendeklarasian method tersebut tidak menggunakan keyword tersebut maka Anda tidak punya cara lain selain menggunakan tehnik sinkronisasi pada objek. Namun jika Anda memiliki source code dari class dimana method tersebut berada, Anda dapat saja mengubah method tersebut agar didelarasikan menggunakan keyword synchronized.
Bab 12 : The Java Library
1. Jelaskan fungsi class wrappers dan hubungannya dengan tipe data primitif!
Jawaban :
Class wrappers digunakan untuk mempresentasikan tipe data primitif dalam bentuk objek. Ini diperlukan karena tipe data primitif tidak digunakan menggunakan referensinya. Sedangkan banyak operasi yang didukung oleh Java Library mengharuskan penggunaan referensi yang hanya didukung oleh tipe data referensi.
2. Berikut ini adalah sekumpulan string yang di dalamnya terdapat informasi No Induk Mahasiswa(NIM), Nama, dan IPK :
0256975648;Nilasari Kumala;3.1#0568974567;Timotius;3.8#0236971245;Stevabus Firman;2.6#0457878975;Dicky Suteja;0#0695475486;Andi Setiawan;3.4
Buatlah sebuah program untuk mengelompokkan semua informasi yang didapat dari string di atas, ke dalam collection atau map. Tambahkan fasilitas untuk mengurutkan data berdasarkan ketiga informasi tersebut dan tampilkan ke layer!
Program yang Anda buat tersebut harus dapat digunakan seperti berikut ini :
public class User { public static void main(String[] args) { String inputData = "0256975648;Niko Syah;3.1#0568974567; Titi Nur;3.8#0236972345;" + "StevanusFirman;2.6#0457878975; DickySuteja;2.0#0695475486;Andi Sujata;3.4"; Database database = new Database(inputData); System.out.println("Data Asli"); System.out.println("============="); database.tampilkanData(); System.out.println(); System.out.println("Diurutkan Berdasarkan NIM"); System.out.println("=============================="); database.urutkanBerdasarkanNim(); database.tampilkanData(); System.out.println(); System.out.println("Diurutkan Berdasarkan Nama"); System.out.println("=============================="); database.urutkanBerdasarkanNama(); database.tampilkanData(); System.out.println(); System.out.println("Diurutkan Berdasarkan IPK"); System.out.println("=============================="); database.tampilkanData(); } } |
Dengan tampilan hasil eksekusi sebagai berikut :
Jawaban :
public class Mahasiswa { private String nim; private String nama; private double ipk; public Mahasiswa(String nim, String nama, double ipk) { this.nim = nim; this.nama = nama; this.ipk = ipk; } public String getNim() { return nim; } public void setNim(String nim) { this.nim = nim; } public String getNama() { return nama; } public void setNama(String nama) { this.nama = nama; } public double getIpk() { return ipk; } public void setIpk(double ipk) { this.ipk = ipk; } } |
import java.util.ArrayList; import java.util.StringTokenizer; public class Database { private ArrayList data = new ArrayList(); public Database(String inputData) { Mahasiswa datum; StringTokenizer tokens = new StringTokenizer(inputData, ";#"); while (tokens.hasMoreTokens()) { String nim = tokens.nextToken(); String nama = tokens.nextToken(); double ipk = Double.parseDouble(tokens.nextToken()); datum = new Mahasiswa(nim, nama, ipk); data.add(datum); } } public void tampilkanData() { for (int i = 0; i < data.size(); i++) { Mahasiswa datum = (Mahasiswa)data.get(i); System.out.print(datum.getNim() + "\t"); System.out.print(datum.getNama() + "\t\t"); System.out.println(datum.getIpk()); } } public void urutkanBerdasarkanNim() { ArrayList dataBaru = new ArrayList(data.size()); String str1, str2; int length; Mahasiswa datum, datumBaru; for(int i=0;i<data.size();i++){ datumBaru = (Mahasiswa)data.get(i); if(i==0){ dataBaru.add(datumBaru); continue; } str1 = datumBaru.getNim(); length = dataBaru.size(); for(int j=0;j<length;j++){ datum = (Mahasiswa)dataBaru.get(j); str2 = datum.getNim(); if(str1.compareTo(str2)<0){ dataBaru.add(j,datumBaru); break; } else if (j==length-1) dataBaru.add(datumBaru); } } data = dataBaru; dataBaru = null; } public void urutkanBerdasarkanNama() { ArrayList dataBaru = new ArrayList(data.size()); String str1,str2; int length; Mahasiswa datum,datumBaru; for (int i=0;i<data.size();i++) { datumBaru = (Mahasiswa)data.get(i); if(i==0) { dataBaru.add(datumBaru); continue; } str1 = datumBaru.getNama(); length = dataBaru.size(); for(int j=0;j<length;j++) { datum = (Mahasiswa)dataBaru.get(j); str2 = datum.getNama(); if(str1.compareTo(str2)<0) { dataBaru.add(j,datumBaru); break; } else if(j==length-1) dataBaru.add(datumBaru); } } data = dataBaru; dataBaru = null; } public void urutkanBerdasarkanIpk() { ArrayList dataBaru = new ArrayList(data.size()); double num1, num2; int length; Mahasiswa datum, datumBaru; for (int i = 0; i < data.size(); i++) { datumBaru = (Mahasiswa)data.get(1); if (i == 0) { dataBaru.add(datumBaru); continue; } num1 = datumBaru.getIpk(); length = dataBaru.size(); for (int j = 0; j < length; j++) { datum = (Mahasiswa)dataBaru.get(j); num2 = datum.getIpk(); if (num1 < num2) { dataBaru.add(j, datumBaru); break; } else if (j == length - 1) dataBaru.add(datumBaru); } } data = dataBaru; dataBaru = null; } } |
Bab 13 : Operasi I/O
1. Jelaskan perbedaan utama antara Byte Streams dengan Character Streams!
Jawaban :
Sesuai dengan namanya, byte streams membaca maupun menulis data (stream) dengan menggunakan ukuran byte atau 8 bit, sedangkan character streams menggunakan ukuran character, di mana dalam Java yang menggunakan Unicode untuk mempresentasikan sebuah karakter, memiliki besar 2 byte atau 16 bit. Oleh karena itu penggunaan character streams umumnya hanya cocok digunakan untuk membaca ataupun menulis data yang berupa teks (string) saja. Jika data yang hendak dibaca ataupun ditulis bukan merupakan teks, sebaiknya digunakan byte streams.
2. Buatlah program untuk mengkopi suatu file teks! Nama file yang hendak dikopi dan hasil kopiannya harus dilewatkan sebagai parameter pada waktu eksekusi. Contoh eksekusi program :
Java kopi fileA.txt fileB.txt
Jawaban :
public class Kopi { public static void main(String[] args) { if (args.length < 2) { System.out.println("Cara pemakaian : " ); System.out.println("java Kopi namaFileSumber namaFileTujuan"); return; } String sumber = args[0]; String tujuan = args[1]; String data; FileWriter fout = null; FileReader fin = null; try { try { fin = new FileReader(sumber); } catch (FileNotFoundException e) { System.out.println("File : " + sumber + "tidak ada atau tidak dapat dibuka."); return; } try { fout = new FileWriter(tujuan); } catch (FileNotFoundException e) { System.out.println("File : " + sumber + "tidak ada atau tidak dapat dibuka."); return; } BufferedReader br = new BufferedReader(fin); data = br.readLine(); while (data != null) { // \r\n digunakan untuk pindah baris fout.write(data + "\r\n"); data = br.readLine(); } } catch (IOException e) { System.out.println("Eksepsi tidak diketahui : " + e); } finally { //tutup file if (fout != null) { try { fout.close(); } catch (IOException err) { System.out.println("Eksepsi tidak diketahui : " + err); } } if (fin != null) { try { fin.close(); } catch (IOException err) { System.out.println("Eksepsi tidak diketahui : " + err); } } } } } |
Tidak ada komentar:
Posting Komentar
If you find any difficulty please comment below .... ^ _ ^