Jumat, September 29, 2017

java


TUGAS

1. Describe the Java Throwable class, its subclasses, and the types of exceptions

Di dalam Java terdapat berbagai kelas yang berhubungan dengan ekspresi. Ekspresi tersebut memiliki tipe-tipe, dimana untuk superclass tertinggi (kelas tertinggi) adalah Throwable class. Berdasarkan kelas itu, terdapat subclasses, yaitu Error dan Exception.

Subkelas Error

Subkelas Error digunakan untuk menangani kesalahan seperti memori habis(OutOfMemoryError) dan stack habis (StackOverflowError). Kelas seperti ini biasanya tidak perlu ditangani atau program segera berakhir apabila menemukan ekspresi seperti ini.

Subkelas Exception

Subkelas Exception memiliki subkelas RuntimeException, yang digunakan untuk menangani kesalahan seperti sebkrip array tidak valid (IndexOutOfBoundsException)dan kesalahan aritmatika (ArithmeticException). Kesalah yang tergolong dalam Exception perlu ditangani, misalnya kalau ada bagian bilangan dengan bilangan nol, program dapat diatur agar tidak diakhiri.

2.What is the purpose of declaring exceptions? How do you declare an exception, and where? Can you declare multiple exceptions in a method header?

Tujuannya untuk menyatakan suatu resource atau  suatu kondisi yang dibutuhkan oleh program jika tidak tersedia. Kita menyatakan/declare Exception ketika ada suatu kondisi yang memungkinkan akan terjadinya error pada saat melakukan input. Pada method Header, kita juga bisa melakukan declare multiple exception. Karena pada dasarnya, Exception harus di declare terlebih dahulu pada method header dengan menggunakan throws clause.

3. What is a checked exception and an unchecked exception?

Checked Exception adalah termasuk class java.lang.Throwable dan semua subclassnya, kecuali class dan subclass dari java.lang.Error dan java.lang.RuntimeError. Bila terdapat checked exception, maka Checked Exception tersebut harus di handle or declare. Pengertian di “handle” adalah terdapat blok catchyang sesuai dengan exception. Pengertian di “declare” adalah meletakkan daftar exception yang mungkin dilemparkan dari suatu method (dengan keywordthrows).

Unchecked Exception adalah  exception yang tidak perlu diperhatikan oleh programmer (tidak akan menimbulkan compile time error bila tidak diperhatikan). Yang termasuk unchecked exception adalah java.lang.Error dan subclassnya, serta java.lang.RuntimeException dan subclassnya.

4. What is the keyword throw and throws used for?
Keyword throw dapat dipergunakan untuk melempar object bertipe class atau subclass dari java.lang.Throwable atau digunakan untuk melempar suatu eksepsi dalam program

5. Point out the problem in the following code. Does the code throw any exceptions?

Tidak terjadi kesalahan dalam code di atas. Tetapi,  code tersebut tidak akan di jalankan (eksekusi) di exception.

6. Suppose that statement2 causes an exception in the following try-catch block:

Answer the following questions:

Will statement3 be executed? Tidak akan dieksekusiIf the exception is not caught, will statement4 be executed? Tidak akan dieksekusi If the exception is caught in the catch block, will statement4 be executed? Akan dieksekusiIf the exception is passed to the caller, will statement4 be executed? Tidak akan dieksekusi

7. What is displayed when the following program is run?

http://binusmaya.binus.ac.id
.....

Penanganan Kesalahan

Penanganan Kesalahan

Ada 2 jenis kesalahan,
[1] kesalahan pada saat kompilasi program, dan
[2] kesalahan ketika program dijalankan.

Kalau kesalahan terjadi saat kompilasi, maka program tidak akan dijalankan. Akan tetapi bila kesalahan terjadi saat program berjalan, maka program akan menjadi error. Oleh karena itu perlu mekanisme penanganan kesalahan. Dalam java penanganan kesalahan menggunakan mekanisme Try-Catch.

Hirarki Exception

Deklarasi

a. Penanganan Tunggal

try { //isi yang memungkinkan error } catch (jenis error){ //dijalankan jika tidak terjadi error }
Contoh :
public class Bilangan { public static void main(String args[]) { try { int a = 5; int b = 0; int c = a / b; System.out.println(c); } catch (Throwable e) { System.out.println("terjadi error"); System.out.println(e.getMessage()); } } }
 

b. Penanganan Bertingkat

try { } catch (jenis error 1) { //jika jenis error 1 terjadi } catch (jenis error 2) { //jika jenis error 2 terjadi }..... catch (jenis error n) { //jika jenis error n terjadi }
Contoh :
public class Bilangan { public static void main(String args[]) { try { int[] bil=new int[3]; bil[4]=7; int a = 5; int b = 0; int c = a / b; System.out.println(c); } catch (ArithmeticException e) { System.out.println("terjadi error"); System.out.println(e.getMessage()); } catch (IndexOutOfBoundsException e){ System.out.println("error"); System.out.println(e.getMessage()); } } } 

c. Melontarkan Exception
Melontarkan Exception berfungsi untuk memberitahukan kepada user ketika terjadi kesalahan, misalnya seperti mahasiswa salah dalam memasukkan nim, maka perlu ada pemberitahuan kesalahan input data.

Pelontaran kesalahan menggunakan keyword throws diikuti dengan kelas exception-nya.

Contoh:

public class Mahasiswa { String nim; public String getNim(){ return nim; } public void setNim(String nim) throws Throwable{ if (nim==null){ throw new Throwable("nim harus diisi"); } this.nim=nim; } public static void main (String args[]){ try { Mahasiswa m1 = new Mahasiswa(); m1.setNim(null); } catch (Throwable e){ System.out.println("terjadi error"); System.out.println(e.getMessage()); } } } 

d. Penggunaan Block Finally
Blok Finally merupakan blok yang selalu dijalankan pada proses try catch, terlepas terjadi error pada program ataupun tidak.

Contoh:
public class Mahasiswa {
String nim; public String getNim() { return nim; } public void setNim(String nim) throws Throwable { if (nim == null) { throw new Throwable("nim harus diisi"); } this.nim = nim; } public static void main(String args[]) { try { Mahasiswa m1 = new Mahasiswa(); m1.setNim(null); } catch (Throwable e) { System.out.println("terjadi error"); System.out.println(e.getMessage()); } finally { System.out.println("program tetap jalan, apapun yang terjadi"); } } }

.....

Penanganan Error

Penanganan Error

Kategori Exception

Kategori-kateogori exception, adapan kategori-kategori exception adalah, sebagai berikut:

Checked exceptions

Checked exceptions merupakan exception yang disebabkan oleh kesalahan pemakai program atau hal lain yang dapat diprediksi oleh pemrograman.

  
Runtime exception

Runtime exception adalah exception yang muncul dimana kemunculannya tidak bisa dihindari oleh pemrograman. Runtime exception biasanya disebabkan oleh kesalhan program atau pada desain program.

Errors

Error sebenarnya bukan exception, namun merupakan masalah yang muncul diluar kendali pemakai dan pemrogram. Error secara umum akan dibiarkan saja, sebab tidak ada yang bisa dilakukan untuk mengatasinya. Misalnya, jika stack overflow muncul maka error akan muncul. Adapun jenis-jenis error yaitu:

1.      Syntax error

      Syntax Error merupakan suatu kesalahan dari penulisan syntax pada program sehingga syntax tersebu tidak dapat dieksekusi oleh program yang pasti membuat program tersebut error.


2.      Logical Error

Method where error occurred Method without an exception handler Method with an exception handler main 

 

3.      Logical Error

       adalah sutau kesalahan yang disebabkan oleh si programmer sendiri, hal ini disebabkan oleh kesalhan penulisan atau rumus yang diterapkan oleh si programmer


4.      Runtime error Error 

       yang satu ini tergolong error yang unik, karena error ini akibat dari kecerobohan seorang    programmer itu sendiri. Error ini akan muncul apabila terjadi miskomunikasi antara program dan difile yang dipanggil dalam  program.

       Dasar Exception

 

Dasar-Dasar Exception Handling (Penanganan Eksepsi)

Penanganan eksepsi pada java diatur dengan lima kata kunci: try, catch, throw, throws dan finally. Pada dasarnya try digunakan untuk mengeksekusi suatu bagian program, dan jika muncul kesalahan, sistem akan melakukan throw suatu eksepsi yang dapat menangkap (catch) berdasarkan tipe eksepsi atau yang diberikan finally dengan penganan default.

Berikut ini bentuk dasar bagian penanganan eksepsi:

try{

//Block of Code }

catch (Exception Type1 e)

{

 //Exception Handler for Exception Type1 }

catch (Exception Type2 e)

{

//Exception Handler for Exception Type2

Throw(e);//re-throw the Exception...

} finally{

}

Pada bentuk diatas, bagian finally akan dijalankan, tidak tergantung apakah bagian blok try mengalami eksepsi maupun tidak.

       Exception

Eksepsi (exception) adalah suatu even, yang terjadi selama eksekusi program, yang mengacaukan alrr normal instruksi program. Pada prinsipnya, eksepsi adalah suatu objek, yang diturunkan dari kelas java.lang.Throwable. Dalam menangani suatu eksepsi, Java menggunakan mekanisme penanganan eksepsi terstruktur.

       Exception Handling

EXCEPTION HANDLING

Dalam bahasa java, ketika terjadi kesalahan, otomatis akan dilemparkan sebuah objek yang disebut exception, yang kemudian dapat diproses lebih lanjut oleh fungsi-fungsi yang siap menangani kesalahan tersebut. Proses pelemparan exception yersebut sering dikenal denga istilah throwing exception, sedangkan penerimaan exception yang bersangkutan dikenal dengan istilah catch exception.

Eksepsi (exception) adalah suatu even, yang terjadi selama eksekusi program, yang mengacaukan alrr normal instruksi program. Pada prinsipnya, eksepsi adalah suatu objek, yang diturunkan dari kelas java.lang.Throwable. Dalam menangani suatu eksepsi, Java menggunakan mekanisme penanganan eksepsi terstruktur.

Suatu program apabila mengalami kesalahan akan mengahasilkan suatu runtime errors seperti gagal membuka file, suatu program melakukan akses diatas range array. Ketika runtime errors tersebut terjadi, maka aplikasi akan membuat suatu exception.

        
Aturan Penanganan Error

Contoh program:

1.      Membuaat program tanpaexception.java

Source kode tanpaexception

class tanpaexception {

public static void main(String[] args){

int nilai=Integer.parseInt(args[0]);

//statement diatas membutuhkan exception-handling

System.out.println("Nilai yang dimasukan : " +nilai);

}

}

-          Simpan dengan nama tanpaexception.java

      Tekan Ctrl+1 untuk mengkompile

Hasil setelah di compile:

-          Klik start>run lalu ketik cmd untuk membuka command prompt

-          Gunakan perintah cd (change directory) untuk menuju directory tempat file tanpaexception.class berada

-          Ketikan java tanpaexception xxx untuk menjalankan program java.

2.      Membuat program cobaexception.java

Source code cobaexception.java

class cobaexception{

public static void main(String[]args){

int nilai=0;

try{

    nilai=Integer.parseInt(args[0]);

    //dalam blok exception-handling

    }catch(Exception e){

          System.out.println("Harus Integer");

          }finally{

             System.out.println("Nilai Anda: "+nilai);

             }

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

             }

             }

-          Simpan dengan nama cobaexception.java

      Tekan Ctrl+1 untuk mengkompile

Hasil setelah di compile:

-          Klik start>run lalu ketik cmd untuk membuka command prompt

-          Gunakan perintah cd (change directory) untuk menuju directory tempat file cobaexception.class berada

-          Ketikan java cobaexception xxx untuk menjalankan program java.

3.      Membuat program pembagian.java

Source code pembagian.java

class pembagian{

public static void main(String[]args){

       int a=0;

       int b=0;

       int c=0;

       try{

           a=Integer.parseInt(args[0]);

           b=Integer.parseInt(args[1]);

           System.out.println("Nilai a: "+a);

           System.out.println("Nilai b: "+b);

           c=a/b;

 }catch(NumberFormatException nfe){

     System.out.println("Bukan angka. Inisialisasi dengan Nilai 0");

 }catch(ArithmeticException ae){

     System.out.println("Pembagi tidak boleh 0");

     b=1;

     //karena terjadi exception maka harus

     //dilakukan pembagian lagi

     c=a/b;

       System.out.println("Inisialisasi Nilai b dengan Nilai l");

 }finally{

       System.out.println("Nilai a: "+a);

       System.out.println("Nilai b: "+b);

       System.out.println("Hasil : "+c);

 }

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

   }

 }

Method Overriding dan Exception

Overriding adalah suatu kemampuan dalam bahasa berorientasi objek untuk mengubah implementasi (menimpa) suatu method yang dimiliki oleh kelas super ketika kelas super tersebut diturunkan. 

Ada dua alasan mengapa melakukan overriding :

1.   Mendefensikan kembali method kelas induk secara total.

2.   Menambah behavior tertentu pada method kelas induk.

        Sedangkan Exception merupakan suatu objek error khusus yang dibuat ketika terjadi kesalahan pada suatu program. setelah suatu objek exception dibuat oleh Java, objek tersebut dikirimkan ke program, proses ini disebutThrowing an exception.

   Setelah sebuah metode melemparkan exception, sistem runtime akan berusaha mencari sesuatu untuk menangani exception tersebut. Maksud dari "sesuatu" yang menangani exception adalah daftar metode yang sudah diurutkan yang sudah dipanggil agar sampai ke motode dimana error terjadi. Daftar metode tersebut biasanya disebut call stack (tumpukan pemanggilan).

Kategori error dalam program :

1. Syntax error

Error yang terjadi apabila java compiler menemukan kesalahan pada syntax atau aturan-aturan lainnya pada program.

2. Runtime error

Error yang terjadi karena factor eksternal, seperti adanya pembagian dengan nol, input yang tidak sesuai dengan tipe yang diminta dan sebagainya. Kondisi ini dikenal sebagai exception.

3. Logic error

Error yang terjadi karena kesalahan logika pemrograman. Misalnya hasil pembagian dua buah bilangan diberi tipe data int. hal ini menyebabkan hasil tidak valid karena ada bagian koma decimal yang akan hilang.

.........

JAVA KONKURENSI

JAVA KONKURENSI

Konkurensi adalah kemampuan untuk menjalankan beberapa bagian program atau beberapa program secara parallel. Java konkurensi sering dikenal juga sebagai java multithreading karena didalam konsep ini terlibat suatu hal yang namanya adalah thread. Pertanyaannya apakah thread itu, apakah sama dengan proses? Baiklah agar lebih jelas berikut ini adalah perbedaannya:

Proses : berjalan secara mandiri dan terisolasi terhadap proses lainnya. Kita tidak dapat secara langsung berbagi data dengan proses lainnya. Sumber daya sebuah proseslah yang dialokasikan untuk itu melalui sistem operasi, seperti memori dan CPU.

Threads : Disebut juga proses ringan yang dapat memiliki stack sendiri namun dapat mengakses berbagi data. Setiap thread memiliki memori cache sendiri-sendiri. Jika thread membaca data yang disharing maka thread akan menyimpan data tersebut pada memory cachenya masing-masing. Sebuah thread dapat membaca ulang data yang disharing, inilah yang menjelaskan model memori java.

Hukum Amdahl's

Konkurensi menjanjikan untuk melakukan beberapa tugas lebih cepat karena tugas ini dibagi menjadi sub-tugas, lalu sub  tugas inipun dijalankan secara paralel. Tentu saja waktu selesainya bergantung kepada berapa bagian tugas yang dapat dijalankan secara paralel. Secara teori performa yang mungkin didapatkan jika menggunakan konkurensi dapat dihitung menggunakan Hukum Amdahl's

Jika F adalah presentase program yang tidak dapat dijalankan secara paralel  dan N adalah jumlah maksimal proses, maka performa maksimum yang bisa didapat adalah 1/(F + ((1-F)/N))

Masalah Pada Thread

Karena thread memiliki stack sendiri tetapi juga dapat mengakses data yang disharing, maka muncul dua masalah yang perlu diperhatikan yaitu masalah visibility dan akses. Masalah visibility muncul ketika thread A membaca data yang disharing yang telah dirubah oleh thread B dan thread A tidak menyadari hal ini. Masalah akses muncul ketika beberapa thread mengakses dan merubah data sharing yang sama pada satu waktu. Masalah visibility dan akses dapat mengakibatkan:

1. Program tidak berjalan lagi dikarenakan masalah akses data pada konkurensi

2. Program menghasilkan data yang salah

Mengunci dan Mensinkronisasi Thread

Java menyediakan kunci untuk melindungi beberapa bagian kode yang dieksekusi oleh beberapa thread pada waktu yang bersamaan, caranya adalah dengan mendefinisikan method atau kelas dengan keyword synchronized.

Keyword synchronized menjamin:

- Hanya satu thread yang dapat mengeksekusi sebuah blok kode pada satu waktu

- Setiap thread yang yang mengakses blok kode melihat efek semua modifikasi sebelumnya yang dijaga oleh kunci yang sama

Synchronization dibutuhkan untuk mengakases blok kode secara ekslusif dan komunikasi antar thread yang  handal. Kita dapat menggunakan keyword synchronization pada pendefinisian method untuk menjamin bahwa hanya akan ada satu thread yang dapat memasuki thread ini dalam waktu yang sama, sedangkan thread yang lain harus menunggu hingga thread yang pertama meninggalkan thread ini.

public synchronized void critial() { // some thread critical stuff // here }  

Synchronization dibutuhkan untuk mengakases blok kode secara ekslusif dan komunikasi antar thread yang  handal. Kita dapat menggunakan keyword synchronization pada pendefinisian method untuk menjamin bahwa hanya akan ada satu thread yang dapat memasuki thread ini dalam waktu yang sama, sedangkan thread yang lain harus menunggu hingga thread yang pertama meninggalkan thread ini.

Sumber : http://www.vogella.com/articles/JavaConcurrency/article.html