Saturday, 9 April 2016

Exception Handling di java

Haii sobat koding!!...gimana progress belajar kodignya? Makin ngerti kan yaap!!
Nahhhh hari ini kita akan belajar tentang
“ Exception Handling” lohh sobbbb…. Simak yak!

Exception Handling :
Exception adalah event yang terjadi ketika program menemui kesalahan pada saat instruksi program dijalankan. Banyak hal yang dapat menimbulkan event ini, misalnya crash, harddisk rusak dengan tiba-tiba, sehingga program-program tidak bisa mengakses file-file tertentu. Programmer pun dapat menimbulkan event ini, misalnya dengan melakukan pembagian dengan bilangan nol, atau pengisian elemen array melebihi jumlah elemen array yang dialokasikan dan sebagainya.

Mekanisme :
Penangkapan runtime error, dapat mempunyai beberapa blok yang menangkap setiap jenis exception, Bentuk umum :
try {                                                                                                                                       
// pemanggilan method yg mungkin menghasilkan exception        
// blok statement yg mungkin menghasilkan exception                   
}                                                                                                                                             
catch(TipeException1 namaObjek) {                                                                      
// penanganan salah-satu jenis exception                                        
}                                                                                                                                             
catch(TipeException2 namaObjek) {                                                                      
// penanganan salah-satu jenis exception                                        
}                                                                                                                                             
finally {                                                                                                                               
// blok yang harus dieksekusi                                                                                    
}                                                                                                                                              
Penjelasan :
1. TRY

Try digunakan untuk mencoba menjalankan block program kemudian mengenai dimana munculnya kesalahan yang ingin diproses.

2. CATCH
Catch digunakan untuk menangkap kesalahan atau bug yang terjadi dalam block try.Setelah menangkap kesalahan yang terjadi maka developer dapat melakukan hal apapun pada block catch sesuai keinginan developer.
3. FINALLY
Finally menunjukan bahwa block programtersebut akan selalu dieksekusi meskipun adanya kesalahan yang muncul atau pun tidak ada.

Jika pada blok try tidak terjadi exception, maka blok catch tidak ada yang dieksekusi dan segera blok finally yang dieksekusi.

Jika terjadi exception pada blok try, maka salah satu blok catch dieksekusi, kemudian blokfinally dieksekusi.
Tipe-Tipe Exception :
Checked Exception
No
Exception
Deskripsi
1
ClassNotFoundException
Kelas tidak ditemukan
2
CloneNotSupportedException
melakukan clone objek yang tidak mengimplementasikan interfaceCloneable
3
IllegalAccessException
Pengaksesan ke kelas ditolak
4
InstantiationException
Menciptakan objek dari kelas abtract ataupun dari interface
5
InterruptedException
Thread telah diinterupsi oleh thread lain
6
NoSuchFieldException
Field yang diminta tidak ada
7
NoSuchMethodException
Method yang diminta tidak ada
Uncheked Exception
No
Exception
Deskripsi
1
AritmaticException
Kesalahan Aritmatik seperti pembagian dengan nol
2
ArrayIndexOutBoundsException
Index array di luar batas
3
ArrayStoreException
Pemberian nilai ke elemen array tidak sesuai dengan tipenya
4
ClassCastException
Cast yang tidak sah
5
IllegalArgumentException
Argument illegal
6
IllegalMonitorStateException
Operasi monitor illegal seperti menunggu di thread yang tidak terkunci
7
IllegalStateException
Lingkungan atau aplikasi state yang tidak benar
8
IllegalThreadStateException
Operasi yang diminta tidak kompatibel dengan state thread saat itu
9
IndexOutOfBoundException
Indeks di luar batas
10
NegativeArraySizeException
Array diciptakan dengan ukuran negatif
11
NullPointerException
Penggunan null yang tidak sah
12
NumberFormatException
Konversi yang tidak sah dari string ke format numerik
13
SecurityException
Melanggar
aturan security
14
StringIndexOutOfBounds
Index di luar batas string
15
UnsupportedOperationException
Ditemukan operasi yang tidak didukung

Tipe-Tipe Message Exception :
Beberapa method standard yang dapat digunakan untuk menampilkan pesan exception merupakan anggota dari kelas java.lang.Throwable.

No
Method Pesan Exception
Deskripsi
1
getMessage()
Mengembalikan nilai string yang berisi pesan rinci tentang objek Throwable yang mengalami exception
2
toString()
Mengembalikan nilai string yang berisi pesan singkat tentang objek yang mengalami exception
3
getLocalizedMessage()
Menampilkan pesan exception lokal (yang terjadi pada subkelas saja)
4
printStackTrace()
Method ini bersifat void, dan hanya mencetak informasi tentang objek Throwable
 Contoh Kode Exception:  1.  Public class Contoh1{
            public static void main (string [] args) {
int num1=5, num2=0;
try{
int num3 = num1/num2;
System.out.println(“Num 3 = “+num3);
}
Catch(ArtithmeticException obj) {
System.out.println(“Error”+obj.getLocalMessage() );
}
}
}
2. 
Public class Contoh2{
            public static void main (string [] args) {
int num1=5, num2=0;
int arrNum[] ={1,2,3);
try{
int num3 = num1/num2;
System.out.println(“Num 3 = “+num3);
System.out.println(“Elemen Array ke 3 = “+arrNum[3]);
}
Catch(ArtithmeticException obj ){
System.out.println(“Division by zero” );
}

Catch(ArrayIndexOutOfBoundsException obj) {
System.out.println(“Error Array “ );
}

Catch(Exception obj) {
System.out.println(“Errorrrrrrrr”);
}
}
}
3.
 public class Contoh3 {
public static void main(String[] args) {
int result = division(100,0); // Line 2
System.out.println(“hasil : “+result);
result = division(100,2);
System.out.println(“hasil : “+result);
}
public static int division(int totalSum, int totalNumber) {
int quotient = -1;
System.out.println(“Komputasi Pembagian “+totalSum+” dengan “+totalNumber);
try
{ quotient = totalSum/totalNumber; }
catch(Exception e)
{ System.out.println(“Pesan Exception : “+ e.getMessage()); }
finally
{ if(quotient != -1)
{ System.out.println(“Finally Block Dijalankan”);
System.out.println(“hasil fungsi : “+ quotient); }
else
{ System.out.println(“Finally Block DIjalankan. Terjadi Exception”);
System.out.println(“hasil fungsi : “+ quotient);
return quotient;
}
}
return quotient;
}
}

           

 Mantappp sobat kodinngg, gimana udah ngerti pastinya kan??
Kalo belum , coba dipelajari ulang lagi sobbb :p hahaha...

Created By :

Dilraj Putra 
6701151059
Telkom University
Praktikum Algoritma Pemograman Lanjut TA9

Saturday, 2 April 2016

Perbedaan Kelas Abstrak dan Inheritance


Haiii sobat koding,gimana nih kelancaran kodinganya??

Terima Kasih sudah mengunjungi website ini sobat koding , semoga website ini dapat membantu hari-hari sobat koding dalam urusan kodingan java nya yah, selalu menyebar energi positif dari kodingan sob!

 hari ini kita akan membahas tentang perbedaan antara kelas abstrak dan interface sobb, cusssssssssssssssssssssss !!

Prolog: 
Abstract class adalah kelas yang terletak pada posisi tertinggi pada hierarki kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas lainnya.
Abstract Class merupakan class yang tidak dapat diinstantiasi (new namaAbstrakClass).

Suatu abstract class bisa mengandung method kongkrit dan/atau method abstract.
Method dalam class abstract yang tidak mempunyai implementasi dinamakan method abstract.  Hanya berupa nama method dan parameter inputan method. Ketika suatu abstract class diturunkan/ di-extends, maka subclass harus mengimplementasikan semua method abstract pada parent/ base class. Jika tidak mengimplementasikan semua method abstract maka subclass harus dideklarasikan sebagai abstract class.

Interface adalah kumpulan method yang hanya memuat deklarasi dan struktur method, tanpa detail implementasinya. Sedangkan detail dari method berada pada class yang mengimplementasikan interface tersebut. Interface digunakan bila Anda ingin mengaplikasikan suatu method yang spesifik, yang tidak diperoleh dari proses inheritance. Tipe data yang boleh pada interface hanya tipe data konstan.

Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan dieksekusi tergantung dari tipe object yang melewati pemanggil method interface

Untuk lebih jelasnya ada tabel perbedaan kelas abstract dan inteface.



INTERFACE
KELAS ABSTRAK

-Interface hanya bisa mendefinisikan Method, tidak bisa mengimplementasikan, sedangkan

-Interface tidak boleh terdiri dari field atau property,
-Interface tidak boleh terdiri dari konstruktor dan destruktor

Method tidak boleh bersifat static
Abstrat Class bisa mengimplementasikan Method


Abstract bisa.


Method boleh bersifat static.
Tidak perlu menulis public abstract di depan nama method. Karena secara implisit, modifier untuk method di interface adalah public dan abstract.
Modifiersnya harus dituliskan sendiri.
Method tidak boleh bersifat final
Met hod boleh bersifat final..
Hanya boleh berisi abstract method.
Bisa berisi abstract dan non-abstract method.
Suatu interface bisa meng-extend  satu atau lebih interface lainnya..
Bisa mendeklarasikan constant daninstance variable
Suatu interface hanya bisa meng-extendinterface lainnya.  Dan tidak bisa meng-implement class atau interface lainnya.
Suatu abstract class hanya bisa meng-extendsatu abstract class dan meng-implement beberapa interface.
Hanya bisa mendeklarasikan constant.  Secara implisit variable yang dideklarasikan di interface bersifat publicstatic dan final.
Suatu abstact class hanya bisa meng-extendsatu abstract class lainnya.



Penalaran analogi :

- Abstract class adalah mobil, kapal, pesawat class nya adalah Sedan, SUV, MPV, Sports, dll  (untuk mobil)
- Interface adalah Kendaraan darat, kendaraan laut, kendaraan udara.
interface ini memiliki method-method/fungsi-fungsi umum ketiga jenis kendaraan tersebut, yang masing-masing fungsinya harus didefinisikan di class-class yang spesifik.

Keyword – keyword seputar kelas abstrak dan interface :

·         Extends = Memanggil fungsi dari class sebelumnya, sehingga kita tidak perlu membuat fungsi lagi pada class yang akan dibuat.
·         Override= Fungsi untuk pengaplikasian fungsi method di nama method yang sama.
·         Public = Tipe  hak akses yang digunakan untuk mengakses method dan properti dan bisa diakses oleh class lain.
·         Protected = Tipe hak akses yang digunakan untuk mengakses method dan properti oleh class tersebut dan class turunannya.
·         Private = Tipe hak akses yang digunakan untuk mengakses method dan properti oleh class ersebut saja. 
·         Parent Class = Kelas yang mewarisi (Super-class)
       Child class = Kelas yang diwarisi (Sub-Class)
·         Abstract Method= Method yang tidak memiliki body method sehingga tidak terbentuk objeknya  maka  di override.



Pengamatan Praktikum Alpro Lanjut JAVA 2016/02/31 :

Dilraj Putra / 6701151059 /  D3MI-39-04

Soal :
Abstract


abstract class AbstractClass{

abstract protected String getValue();

abstract protected String prefixValue (String prefix);

abstract protected String gabung();

public void printOut(){

System.out.println(this.getValue());

System.out.println(this.gabung());

}

}
class ConcreteClass2 extends AbstractClass{
    @Override
    public String getValue(){
        return "Kelis";
    }
// Dilraj Putra 6701151059 D3MI3904 Kelompok 6
 
    @Override
    public String prefixValue (String prefix){
        return prefix + "Mrs Kelis  Hobi Melet";
    }
@Override
public String gabung(){
return "Mrs.Kelis";
}
}
class ConcreteClass2 extends AbstractClass{
    @Override
    public String getValue(){
        return "Kelis";
    }
// Dilraj Putra 6701151059 D3MI3904 Kelompok 6
    
    @Override
    public String prefixValue (String prefix){
        return prefix + "Mrs Kelis  Hobi Melet";
    }
@Override
public String gabung(){
return "Mrs.Kelis";
}
}
class Main{
    public static void main (String[] args){
        ConcreteClass1 class1 = new ConcreteClass1 ();
        class1.printOut();
        System.out.println(class1.prefixValue("FOO_"));
        
        ConcreteClass2 class2 = new ConcreteClass2 ();
        class2.printOut();
        System.out.println(class2.prefixValue("FOO_"));
    }
}

Abstract Class Soal 1
1. Bolehkah ditambahkan body "{statement1; statement1;}" pada method getValue ataupun method prefixValue pada class abstract AbstractClass? Jelaskan! 

Jawab :

Tidak boleh , dan hasilnya pun jadi error karena method abstract tersendiri adalah method yang tidak memiliki body method ,jadi tidak terbentuk objek atau pernyataan, juga menunjukan  dan akan dioverride dikelas anak nya(class child).
2. Kembalikan program seperti semula, jelaskan error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di hapus! 

Jawab:

Hasil error , karena class ConcreteClass1 itu meng-extends class AbsctractClass yang merupakan kelas abstrak yang mempunyai abstrak method untuk di override di kelas anaknya, tetapi jika tidak dioverride maka method akan null , jadi hasil compilenya error seperti diatas.

3. Kembalikan program seperti semula, selanjutnya perhatikan perbedaan hak akses method getValue() di child class ConcreteClass1 dan ConcreteClass2! Jelaskan apa maksudnya! 
Jawab :
Pada ConcreteClass1 hak akses bersifat protected,
Protected berarti method hanya dapat diakses kelas ini dan kelas turunannya saja, atau kelas lain dalam 1 package.
Pada ConcreteClass2 hak akses bersifat public,

Public berarti method dapat diakses kelas kelas lain juga, public juga sebagai default hak akses.
4. Buatlah abstract method yang bernama getValue2 pada class ConcreteClass1! Compile dan mengapa terjadi error?

Jawab :


Terjadi error karena, ConcreteClass1 bukan kelas abstrak dan meng-extends kelas AbstracClass yang kelas abstrak , jadi tidak bisa mempunyai method abstrak seperti getValue2().
5. Ikuti soal nomor 4, silahkan ubah class ConcreteClass1 menjadi abstract. Selajutnya jelaskan mengapa terjadi error?

Jawab :

Karena , walaupun ConcreteClass1 sudah menjadi kelas abstrak dan dapat dibuat method abstrak getValue2() nya, tetapi ConcreteClass1 tidak dapat dijadikan sebuah objek dikelas Main, karena itulah maka error terjadi, karena Kelas Abstrak tidak dapat diinstansiasikan menjadi objek.


6. Dengan mengikuti struktur kode program di atas serta ditambahkan satu abstract method bernama "gabung" TANPA PARAMETER pada parent class, hasilkan output berikut:
 Tatank
 Mr. Tatank
 Mr. Tatank hobi meloncat
 Kells
 Mrs. Kells
 Mrs. Kells hobi melet

 :


Pengamatan Interface :
Soal:
interface Mobil{
    public void setMerk(String merk);
    public String getMerk();
}
interface Mesin extends Mobil{
    public void setNoMesin(String nomMesin);
    public String getNoMesin();
}
class Mobil1 implements Mesin {
    private String merk, noMesin;
 
    @Override
    public void setMerk(String merk){
        this.merk = merk;
    }

    @Override
    public void setNoMesin(String noMesin) {
        this.noMesin = noMesin;
    }

    @Override
    public String getNoMesin() {
        return noMesin;
    }

    @Override
    public String getMerk() {
        return merk;
    }
}
class Mobil2 implements Mesin {
    private String merk, noMesin;
 
    @Override
    public void setNoMesin(String noMesin) {
        this.noMesin = noMesin;
    }

    @Override
    public String getNoMesin() {
        return noMesin;
    }

    @Override
    public void setMerk(String merk) {
        this.merk = merk;
    }

    @Override
    public String getMerk() {
        return merk;
    }
}
public class Main {
   public static void main (String [] args){
       Mobil1 m1 = new Mobil1();
       m1.setMerk("Ferrari");
       m1.setNoMesin("09999");
       System.out.println(m1.getMerk());
       System.out.println(m1.getNoMesin());

  Mobil2 m2 = new Mobil2();
       m2.setMerk("Lamborghini");
       m2.setNoMesin("90467827");
       System.out.println(m2.getMerk());
       System.out.println(m2.getNoMesin());
   }
}
1.       Compile kode program dan jelaskan sebab error yang terjadi!


2.Tambahkan method yang diperlukan untuk mengatasi error yang terjadi (No. 1)!




 Perhatikan soal 1 (abstract class) dan soal 2 ini (interface) dan lakukan poin-poin berikut:
 - Apa yang terjadi apabila ditambahkan method biasa yang mengandung body "{}" pada interface Mobil? Jelaskan!
> Hasilnya akan error karena, pada inheritance hanya dapat memuat abstract method yang tidak mempunyai body methodnya.

-Jelaskan perbedaan body program Antara class abstact dan interface!
> Pada  inheritance tidak ada atribut sdangkan pada abstract class terdapat
atribut.

- Jelaskan peprbedaan penggunaan extnds Antara soal1 dan soal2?
> Pada soal2(inheritance) extends dignakan untuk menambah abstract method, pada Soal1(Abstract) extends digunakan untuk mengoverri abstract method.

Nahh gimana ni sobat koding, udah mengerti ya tentang perbedaan kelas abstrak dan inheritance...
yaa ngertiin aja yak sob....

Terima Kasih!