Bahasa Java

Belajar Pemrograman Java Dari Dasar

Membaca Input Dari User Menggunakan Class BufferedReader Pada Java

BufferedReader merupakan salah satu class yang paling banyak digunakan dalam pemrograman Java. Pada kesempatan  kali ini kita akan mencoba memahami syntax dasar, penggunaan method dan juga prinsip dari class tersebut untuk membaca input dari user.

Berikut ini adalah hirarki dari class tersebut:

java.lang.Object
      java.io.Reader
           java.io.BufferedReader

Fungsi dasar dari BufferedReader adalah membaca file dari input stream. Lebih spesifik lagi bahwa class ini digunakan sebagai buffer dari karakter-karakter dengan tujuan membuat penanganan yang lebih efisien untuk string, character, dan array.

Terdapat dua constructor untuk class BufferedReader ini, yaitu:
  • BufferedReader(Reader in)
  • BufferedReader(Reader in, int sz)
Namun, agar lebih mudah untuk memahaminya, maka kita hanya akan menggunakan constructor yang pertama dimana constructor itu hanya mengambil Reader sebagai argumennya.

Berikut ini adalah contoh bagaimana membuat objek dari class BufferedReader:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

Contoh kode program:

package com.bahasajava.io;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


//Membaca input dari user melalui konsol dengan menggunakan BufferedReader

public class ContohBufferedReader {

 public static void main(String[] args) {
  
  //Membuat objek BufferedReader
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  
  //Membuat user prompt untuk menginput nama
  System.out.print("Masukkan nama anda: ");
  
  //Membuat objek StringBuffer
  StringBuffer stringBuffer = new StringBuffer("Selamat datang ");
  
  //Membaca input dari user
  try {
   
   //Menggabungkan string Selamat datang dengan baris text yang berasal dari 
   //input oleh user
   stringBuffer.append(bufferedReader.readLine());
   
   //menutup objek BufferedReader
   bufferedReader.close();
   
   //Menampilkan string setelah menerima input dari user
   System.out.println(stringBuffer);
   
   //Menangkap exception yang mungkin terlempar ketika user memasukkan input
  } catch (IOException e) {
   System.out.println("Error terjadi ketika mencoba mendapatkan input dari user: "
     + e.getMessage());
   e.printStackTrace();
  }
  
 }
}

Output:

Masukkan nama anda: Nesta Rama
Selamat datang Nesta Rama


BufferedReader input user


Jadi apa sebenarnya maksud dan tujuan dari contoh program di atas? Pada dasarnya program itu hanya mendapatkan input pengguna dari konsol dan kemudian mencetak pesan selamat datang.

Selanjutnya mari kita pahami setiap bagian kode tersebut. Pertama-tama,  objek BufferedReader dibuat dengan konstruktor yang menggunakan Reader sebagai argumen. Setelah itu, user akan diminta memasukkan namanya pada konsol melalui keyboard dengan System.out.print ("Masukkan nama Anda: "). Kemudian objek StringBuffer diinisialisasi dengan konten inisial "Selamat datang ". Silakan anda membaca mengenai StringBuffer untuk memahaminya lebih lanjut. Tujuan dari mendeklarasikan StringBuffer “stringBuffer” adalah untuk mempersiapkan pesan selamat datang, yaitu "Selamat datang NamaUser".


Kemudian  input pengguna berupa baris text dibaca menggunakan method class BufferedReader yaitu readLine(). Metode ini akan mengembalikan baris lengkap dari representasi String sesuai dengan apa yang telah dimasukkan oleh user pada konsol. Hasil dari method readLine() itu digabungkan dengan konten StringBuffer menggunakan method append().  Method close() dipanggil untuk menutup stream sehingga dapat menghindari kebocoran memori (memory leak) dan komplikasi lebih lanjut pada kode program tersebut.

Anda mungkin juga memperhatikan bahwa pada kode tersebut terdapat blok try-catch dan ini merupakan bagian dari exception handling. Hal ini dikarenakan readLine() dan close () melemparkan IOException sehingga anda harus menangkapnya (catch) atau melemparkannya (throw) kembali. Dengan demikian jika terjadi error pada saat mendapatkan input dari user maka anda akan mendapatkan pesan dan stack trace lengkap mengenai apa yang terjadi.

Membaca Data File Menggunakan Class Scanner Pada Program Java

Class java.util.Scanner sebelumnya telah anda ketahui penggunaanya untuk memperoleh input dari user atau untuk membaca string dan nilai primitif dari konsol. Cara kerja Scanner ini yaitu dengan memecahkan input tersebut menjadi "token" yang dibatasi oleh karakter spasi.

Ada beberapa cara sebenarnya untuk membaca file berupa text atau binary pada Java, diantaranya adalah menggunakan:

  • FileReader
  • BufferedReader
  • FileInputStream
BufferedReader sering digunakan untuk membaca text file.

Oke, kita kembali lagi ke class Scanner, yang saya yakin anda lebih familiar dibandingkan ketiga class tersebut. Scanner ini memang lebih sering digunakan dan lebih populer untuk menangani input dari user. Meskipun demikan, tentunya anda juga senang mengetahui bahwa Scanner bisa digunakan untuk membaca file.

Serupa dengan class BufferedReader, class scanner juga menyediakan buffering namun dengan ukuran yang lebih kecil yaitu 1Kb dan class ini juga dapat digunakan untuk membaca file secara baris per baris.

Ketika anda membaca input dari keyboard komputer maka anda dapat melakukannya dengan membuat objek Scanner:

Scanner input = new Scanner(System.in);

Sedangkan ketika anda ingin membaca dari sebuah file, maka anda dapat membuat objek Scanner sebagai berikut:

Scanner input = new Scanner (new File(nama file));

Method-method Pada Class Scanner

Berikut ini adalah method-method dari class Scanner yang sering digunakan:

Method Penjelasan
public String next() Mengembalikan token berikutnya dari scanner
public String nextLine() Memindahkan scanner ke baris berikutnya dan mengembalikan nilai dalam string
public byte nextByte() Mengscan token berikutnya sebagai suatu byte
public short nextShort() Mengscan token berikutnya sebagai suatu nilai short
public int nextInt() Mengscan token berikutnya sebagai suatu nilai int
public long nextLong() Mengscan token berikutnya sebagai suatu nilai long
public float nextFloat() Mengscan token berikutnya sebagai suatu nilai float
public double nextDouble() Mengscan token berikutnya sebagai suatu nilai double
boolean hasNext() Mengembalikan nilai true jika scanner memiliki token lainnya dalam input
void close Untuk menutup scanner
Scanner useDelimiter(String pattern) Method ini menetapkan pola pemisah scanner ke pola yang dibangun dari String yang ditentukan.

Contoh Penggunaan Class Scanner Untuk Membaca File Text


Misalkan terdapat file dengan nama nilai ujian.txt yang terdapat di path direktori C:/bahasa java/nilai ujian.txt. Di dalam file text tersebut terdapat data mengenai nama awal, tengah, dan akhir siswa beserta dengan nilai ujiannya.

Seperti pada gambar berikut ini:

membaca-file-nilai-ujian-dengan-class-Scanner
Kode program berikut ini akan menampilkan isi file tersebut pada konsol dengan menggunakan class Scanner.

package com.bahasajava.io;

import java.io.File;
import java.util.Scanner;

public class BacaData {
 
 public static void main(String[] args) throws Exception {
  
  //Membuat sebuah objek File
  File file = new File("C:/bahasa java/nilai ujian.txt");
  
  //Mengecek apakah file tersebut ada?
  boolean cekFile = file.exists();
  System.out.println("Apakah file tersebut ada? " + cekFile);
  
  //Membuat objek Scanner untuk file
  Scanner input = new Scanner(file);
  
  //Membaca data dari file
  while(input.hasNext()) {
   String namaAwalSiswa = input.next();
   String namaTengahSiswa = input.next();
   String namaAkhirSiswa = input.next();
   
   double nilaiUjian = input.nextDouble();
   
   //Menampilkan data file pada konsol
   System.out.println(namaAwalSiswa + " " + namaTengahSiswa + " " 
   + namaAkhirSiswa + " " + nilaiUjian);
  }
  
  //Menutup file
  input.close();
 }

}

Agar Scanner bisa membaca data dari sebuah file maka anda harus membuat objek dari class java.io.File dengan menggunakan constructor new File (nama file). Kemudian menggunakan new Scanner(File) untuk membuat sebuah Scanner untuk file.

Exception bisa saja terlempar ketika memanggil constructor new Scanner(File), oleh karena itu method main mendeklarasikan throws Exception.

Pada kode juga terdapat while loop yang akan melakukan perulangan untuk membaca nama awal, tengah, dan akhir dari siswa beserta nilainya.

Selanjutnya bagian terakhir adalah pernyataan input.close(). Sebenarnya anda tidak perlu untuk menutupnya. Namun, ini adalah praktek yang bagus untuk melepaskan sumberdaya yang dimiliki oleh file tersebut.

Output:
Apakah file tersebut ada? true
Nazia Putri Arnita 98.27
Muhammad Syuja Althafarizki 95.33
Paulia Anjarina Putri 94.56
Zouza Putri Gumelar 93.56


Menulis Isi File Text Dengan PrintWriter Pada Program Java

Sebelumnya anda telah mengetahui mengenai class File. Ketika objek File itu dibuat, ia bisa mendapatkan properti dari suatu file. Namun, class ini tidak memiliki method untuk membuat sebuah file ataupun menulis/membaca data untuk/dari sebuah file.

Nah, untuk melakukan proses Input-Output ini, maka anda memerlukan class Java yang bisa membuat objek dengan kemampuan tersebut. Bisa dikatakan objek tersebut memiliki methods untuk membaca dan menulis data dari/ke sebuah file.

Ada 2 jenis file, yaitu:
  • Text
  • Binary 
Suatu file text pada dasarnya merupakan karakter-karakter yang disimpan pada disk. Pada kesempatan kali ini akan dijelaskan bagaimana cara membaca dan menulis file text tersebut.

Class PrintWriter

Class PrintWriter merupakan suatu implementasi dari class Writer. Class ini digunakan untuk mencetak (print) dari representasi objek pada output text stream. Dengan kata lain, class ini dapat digunakan untuk membuat file dan menulis data pada file text.

Untuk melakukannya, anda terlebih dahulu harus membuat objeknya:

PrintWriter output = new PrintWriter(namaFile);

Selanjutnya anda bisa memanggil method-method yang terdapat pada class ini untuk menulis data pada file.


Beberapa method yang terdapat pada class PrintWriter ini adalah:

Method Penjelasan
void println(char[] x) Digunakan untuk print nilai boolean
void println(int x) Digunakan untuk print array dari karakter-karakter
PrintWriter append(char c) Untuk print sebuah integer
PrintWriter append(CharSequence ch) Untuk menambahkan karakter spesifik pada writer
PrintWriter append(CharSequence ch, int start, int end) Untuk menambahkan urutan karakter spesifik pada writer
boolean checkError() Digunakan untuk flush stream dan memeriksa keadaan error
protected void setError() Digunakan untuk indikasi bahwa terjadi error
protected void clearError() Clear error dari stream
PrintWriter format(String format, Object... args) Untuk menulis string yang diformat pada writer menggunakan format dari string dan argumen yang telah ditentukan
void print(Object obj) Digunakan untuk print sebuah objek
void flush() Untuk flush stream
void close() Untuk menutup stream

Contoh program:

package com.bahasajava.io;

import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;

class MenulisDataFile
{
   public static void main( String[] args )
   { 
      try{
       
       //Membuat objek dari class File
       //untuk mendapatkan properti dari file terkait
          File myFile =new File("C:/bahasajavacom/myfile.words");
          
       //Jika myfile.txt tidak ada, maka file baru akan dibuat
       if(!myFile.exists()){
       myFile.createNewFile();
       }
       
      //Membuat objek printWriter untuk menulis pada konten file
       PrintWriter printWriter = new PrintWriter(myFile);
       
      //Menambahkan baris baru pada isi file
       printWriter.println("");
       
       //Menambahkan string pada baris baru
       printWriter.println("Baris pertama");
       printWriter.println("Baris kedua");
       printWriter.println("Baris ketiga");
       printWriter.println("Baris keempat");
       printWriter.println("Baris kelima");
       
       //Method close() harus dipanggil untuk menutup file untuk menghindari memory leak
       //Jika tidak, maka data mungkin tidak akan tersimpan dengan baik pada file
       printWriter.close();

   System.out.println("Data berhasil ditambahkan pada konten file");

       }catch(IOException e){
        System.out.println("Exception telah terjadi:");
        e.printStackTrace();
      }
   }
}


Ketika objek PrintWriter itu dibuat maka objek ini akan membuat file yang baru jika file tidak ada. Namun, jika file itu sudah ada sebelumnya  maka isi dari file itu akan dimusnahkan tanpa verifikasi sebelumnya dilakukan kepada user.

Memanggil constructor PrintWriter  melemparkan IOException pada saat compile time dan ini merupakan contoh dari checked exception. Oleh karena itu, program Java akan memaksa anda selaku programmer untuk menulis kode yang berurusan dengan exception tersebut.

Output:
menulis isi file text dengan PrintWriter

Output yang dihasilkan berupa file dengan nama myfile.txt dan file ini berada pada direktori C:/bahasajavacom/. Anda bisa mencoba dengan membuat dan menyimpan file pada direktori sesuai dengan komputer anda sendiri.

Class File Pada Pemrograman Java

Setelah mengetahui mengenai exception handling maka selanjutnya anda bisa menuju ke bagian pemrosesan file. Class File pada Java memiliki method untuk memperoleh properti dari file ataupun directory dan juga untuk mengganti nama dari file tersebut.

Data yang disimpan dalam program hanyalah bersifat sementara dan data-data tersebut bisa saja hilang ketika program berhenti. Oleh karena itu, untuk membuat data itu tersimpan secara permanen maka anda perlu menyimpannya dalam file ataupun disk atau bisa juga disimpan di perangkat lainnya.

File dapat dikirimkan dan selanjutnya dapat dibaca oleh program. Dikarenakan data disimpan dalam bentuk file, maka kali ini akan di bahas mengenai penggunaan class File untuk memperoleh properti,  mengganti nama, dan membuat file/direktori.

Setiap file disimpan dalam sebuah direktori dari sistem. Nama "absolut" dari suatu file mencakup path dan nama file itu sendiri.

Misalnya c:\data\HelloWorld.java adalah nama absolut dari file HelloWorld.java pada sistem operasi Windows. Di mana c:\data direferensikan sebagai direktori path dari file itu sendiri. Nama file absolut ini bisa saja berbeda-beda untuk berbagai sistem operasi.

Selain itu, dikenal juga nama file "relatif" yang berhubungan dengan direktori path di mana file itu disimpan. Pada nama file relatif ini, nama lengkap dari file akan di abaikan. Sebagai contoh, HelloWorld.java merupakan nama file relatif. Jika tempat direktori file itu disimpan adalah c:\data, maka nama file absolutnya akan menjadi c:\data\HelloWorld.java.

Class File hadir pada Java untuk menyediakan abstraksi yang berhubungan dengan kerumitan mengenai nama file-file dan path dalam berbagai jenis  mesin atau sistem operasi. Method-method pada class File ini bisa mendapatkan properti dari file dan direktori atau juga bisa menghapusnya.

Namun, class File ini tidak memiliki method yang bisa membaca dan menulis konten dari file. 

Nama file adalah tipe string. Class File itu sendiri merupakan class wrapper untuk nama file dan juga path direktori. Untuk lebih memahaminya, misalnya new File("c:\\data") akan membuat objek file untuk direktori c:\data. Sedangkan  new File("c:\\data\\mydata.ext") akan membuat objek file untuk file c:\data\mydata.ext, keduanya dalam Windows.



Method Pada Class File


Method isDirectory() dan isFile() dapat digunakan untuk mengetahui apakah objek merepresentasikan sebuah direktori atau sebuah file. Untuk mengetahui lebih jelas mengenai method-method lainnya anda bisa melihat mengenai class File tersebut.

Windows menggunakan tanda pemisah berupa tanda backslash \. Pada Java, tanda tersebut merupakan sebuah karakter yang spesial. Oleh karena itu, dalam penulisan sebagai literal string maka harus ditulis \\.

Jangan menggunakan nama file absolut dalam program anda. Jika anda menggunakan nama program seperti c:\data\HelloWorld.java maka ini hanya akan bekerja pada platform Windows saja, namun tidak akan bekerja pada platform lainnya. Anda harus menggunakan nama file relatif pada direktori yang digunakan.

Sebagai contoh, anda dapat membuat object File menggunakan new File("HelloWorld.java") untuk file HelloWorld.java pada direktori yang digunakan. Anda juga dapat membuat objek File menggunakan new File("data/mydata.ext") untuk file mydata.ext di dalam direktori data. Tanda / atau disebut juga dengan forward slash merupakan pemisah direktori pada Java, dan ini juga berlaku pada UNIX. Maka pernyataan new File ( "c:/data/HelloWorld.java") akan bekerja pada Java, UNIX, dan juga platform yang lainnya.

Membuat instance dari File bukan berarti anda membuat file tersebut. Anda dapat membuat instance File untuk nama apa saja terlepas dari file tersebut ada atau tidak. Anda juga bisa menggunakan method exist() dari instance tersebut untuk mengetahui apakah file tersebut ada atau tidak.

Berikut ini adalah contoh penggunaan class File untuk mendapatkan properti dari file yang berada pada direktori tertentu.

package com.bahasajava.exceptionhandling;

import java.io.File;
import java.util.Date;

public class MencobaClassFile {
 
 public static void main(String[] args) {
  
  long milidetik;
  
  File file = new File("D:/Belajar Java/2d graphics.pdf");
  
  //Menguji apakah aplikasi dapat membaca file yang ditandai oleh pathname abstrak ini
  System.out.println("Apakah file tersebut ada? " + file.exists());
  
  //Mengetahui ukuran file
  System.out.println("File tersebut memiliki ukuran " + file.length() + " bytes");
  
  //Menguji apakah aplikasi dapat membaca file yang ditandai oleh pathname abstrak ini.
  System.out.println("Apakah bisa di baca? " + file.canRead());
  
  //Menguji apakah aplikasi dapat memodifikasi file yang ditandai dengan pathname abstrak ini
  System.out.println("Apakah bisa di modifikasi? " + file.canWrite());
  
  //Mengetahui apakah ini sebuah direktori?
  System.out.println("Apakah ini adalah sebuah direktori? " + file.isDirectory());
  
  //Mengetahui apakah ini sebuah file?
  System.out.println("Apakah ini sebuah file? " + file.isFile());
  
  //Menguji apakah pathname abstrak ini adalah mutlak.
  System.out.println("Apakah ini absolut? " + file.isAbsolute());
  
  //Menguji apakah file yang dinamai oleh pathname abstrak ini adalah file tersembunyi.
  System.out.println("Apakah file ini tersembunyi? " + file.isHidden());
  
  //Mengetahui path absolut
  System.out.println("Path absolut adalah: " +
    file.getAbsolutePath());
  
  
  //Mengetahui waktu terakhir kali file dimodifikasi
  milidetik = file.lastModified();
  Date tanggal = new Date(milidetik);
  System.out.println("Di modifikasi terakhir kali pada: " + tanggal); 
  
 } 

}

class file java


Output:

Apakah file tersebut ada? true

File tersebut memiliki ukuran 5086962 bytes

Apakah bisa di baca? true

Apakah bisa di modifikasi? true

Apakah ini adalah sebuah direktori? false

Apakah ini sebuah file? true

Apakah ini absolut? true

Apakah file ini tersembunyi? false

Path absolut adalah: D:\Belajar Java\2d graphics.pdf

Di modifikasi terakhir kali pada: Thu Mar 08 21:18:33 SGT 2018

Membuat Class Custom Exception Pada Program Java

Untuk dapat menetapkan sebuah custom exception maka anda bisa membuat class yang inherit dari class java.lang.Exception.

Java telah menyediakan banyak exception class secara built-in. Jadi menggunakan class tersebut merupakan pilihan yang lebih tepat bila dibandingkan harus membuat custom exception class sendiri.

Tapi, bila anda memiliki masalah yang tidak bisa dijelaskan dengan sempurna oleh class exception yang sudah ditetapkan sebelumnya, maka anda bisa mencoba untuk membuat class exception anda sendiri, dimana custom class ini merupakan turunan dari class Exception ataupun dari subclassnya, seperti IOException.

custom-exception-Java

Apakah Anda Perlu Membuat Class Custom Exception?


Terdapat beberapa panduan yang bisa memberikan petunjuk apakah anda perlu membuat custom class Exception sendiri atau tidak.

Untuk mengetahuinya, cobalah jawab pertanyaan berikut ini. Jika anda menjawab YA pada salah satu dari beberapa pertanyaan ini, maka anda anda dapat menulis class exception sendiri.
Sebaliknya, jika tidak ada jawaban YA, maka anda bisa menggunakan class Exception yang sudah disediakan sebelumnya oleh Java library atau yang sudah disediakan oleh pihak lain.


Pertanyaan sebagai panduan tersebut adalah:
  • Apakah anda memerlukan tipe exception yang tidak direpresentasikan oleh platform Java?

  • Apakah exception yang anda buat itu bisa menolong user untuk membedakan custom exception anda dari apa yang sudah terlempar (throw) oleh class yang ditulis oleh vendor?

  • Apakah kode program melemparkan lebih dari satu exception yang saling berkaitan?

  • Bila anda menggunakan exception milik orang lain, apakah user akan memiliki akses pada exception tersebut? Pertanyaan yang serupa juga adalah apakah package exception anda itu harus independen dan mandiri? 
Contoh class custom exception:

//Ini adalah class custom Exception
public class ExceptionPembagianDenganAngkaNol extends Exception {
 
 public ExceptionPembagianDenganAngkaNol(String pesan){
  super (pesan);
 }

}

public class PembagianDenganAngkaNol {
 
 public static void main(String[] args) {
  try{
   int hasil = pembagianInteger(8, 2);
   System.out.format("8 dibagi 2 adalah %d%n", hasil);
   
   pembagianInteger(8, 0);//Pada pernyataan ini objek ExceptionPembagianDenganAngkaNol terlempar
   System.out.format("8 dibagi 0 adalah %d%n", hasil);
  }
  catch(ExceptionPembagianDenganAngkaNol ex){
   System.out.println(ex.getMessage());
  }
 }
 
 static int pembagianInteger(int i, int j) throws ExceptionPembagianDenganAngkaNol{
  
  if (j == 0){
   throw new ExceptionPembagianDenganAngkaNol ("Integer tidak bisa dibagi dengan angka 0!");
  }
  return i / j;
 }

}

Contoh output:
8 dibagi 2 adalah 4
Integer tidak bisa dibagi dengan angka 0!

Apakah custom exception bisa ditetapkan dengan melakukan extends dari class RunTimeException? Jawabannya adalah bisa. Namun ini bukanlah praktek yang baik karena akan membuat custom exception menjadi unchecked. Akan lebih baik jika membuat custom exception itu sebagai checked exception dengan tujuan agar compiler bisa memaksa exception ini untuk ditangkap dalam program Java anda.

Memahami Exceptions Berantai Pada Program Java

Sebelumnya anda sudah mengetahui bahwa blok catch akan melemparkan kembali exception yang asli (original). Namun terkadang Anda perlu juga untuk melemparkan exception yang baru dengan informasi tambahan bersama dengan exception original. Proses ini disebut dengan exception berantai (chained exception).

Berikut ini adalah contohnya:

public class ExceptionBerantai {
 
 
 public static void methodA() throws Exception{
  try{
   methodB();
  }
  catch (Exception ex){
   throw new Exception("Informasi baru didapatkan dari methodA", ex);
  }
 }
 
 public static void methodB() throws Exception {
  throw new Exception("Informasi baru didapatkan dari methodB");
 }
 
 public static void main(String[] args) {
  
  try{
   methodA();
  }
  catch (Exception ex){
   ex.printStackTrace();
  }
 }
}

Contoh output:
java.lang.Exception: Informasi baru didapatkan dari methodA
 at ExceptionBerantai.methodA(ExceptionBerantai.java:9)
 at ExceptionBerantai.main(ExceptionBerantai.java:20)
Caused by: java.lang.Exception: Informasi baru didapatkan dari methodB
 at ExceptionBerantai.methodB(ExceptionBerantai.java:14)
 at ExceptionBerantai.methodA(ExceptionBerantai.java:6)
 ... 1 more

Penjelasan dari program diatas adalah sebagai berikut:
  • Method main memanggil methodA pada line 20, kemudian methodA memanggil methodB di line 6.
  • MethodB kemudian melemparkan exception pada line 14. 
  • Exception ini kemudian ditangkap oleh blok catch di methodA kemudian di 'wrap' dalam exception baru di line 9.
  • Exception baru dilemparkan dan ditangkap oleh blok catch pada method main di line 22.
  • Method printStackTrace pada line 23 akan memberikan infomrasi dari exception
  • Exception baru yang dilemparkan dari methodA akan ditampilkan terlebih dahulu kemudian diikuti oleh exception original yang dilemparkan dari methodB.
exception berantai Java

Class Throwable Memiliki Constructor Yang Mendukung Exception Berantai Pada Program Java

Exception berantai ini pertama kali diperkenalkan sejak Java 1.4. Untuk mendukung exception berantai ini maka pada class Throwable terdapat 2 constructor yang mendukungnya, yaitu:
  • Throwable (Throwable cause)
  • Throwable (String msg, Throwable cause)



Method dari Class Throwable Yang Mendukung Exception Berantai 

Method class Throwable untuk exception berantai ini diantaranya adalah:
  • getCause(), method ini akan mengembalikan penyebab aktual dari exception.
  • initCause(Throwable cause), method ini akan meng-set penyebab untuk memanggil exeception.
Contoh dari penggunaan method tersebut sebagai berikut:

public class MenanganiException
{
    public static void main(String[] args)
    {
        try
        {
            //Membuat sebuah exception
            NumberFormatException ex = new NumberFormatException("Exception");   
 
            //Mengset sebuah penyebab aktual dari exceception
            ex.initCause(new NullPointerException("Ini adalah penyebab aktual dari exception"));  
 
            throw ex;
        }
        catch(NumberFormatException ex)
        {
            System.out.println(ex);//menampilkan exception
 
            System.out.println(ex.getCause());//mendapatkan penyebab aktual dari exception
        }
    }
}

Contoh output:
java.lang.NumberFormatException: Exception
java.lang.NullPointerException: Ini adalah penyebab aktual dari exception

Melemparkan Kembali Exception (Rethrow Exception)

Pada program Java mengizinkan exception handler untuk melemparkan kembali (rethrow) exception bila handler tidak bisa memprosesnya atau hanya sekedar untuk memberi tahu handler mengenai exception tersebut.

Exception dapat dilemparkan kembali dari blok catch dan ini akan menyebabkan exception tersebut di-pass-kan pada method pemanggilnya. Bila pelemparan kembali exception itu berada pada main method maka exception akan di-pass-kan pada Java Virtual Machine (JVM) dan kemudian ditampilkan pada konsol.


melemparkan kembali rethrow exception


Tujuan dari operasi pelemparan kembali exception ini adalah untuk mendapatkan perhatian bahwa exception  telah terjadi dan pada waktu yang bersamaan melakukan logika kontingensi seperti logging di dalam blok catch.

Syntax untuk melemparkan kembali exception adalah sebagai berikut:

try {
   pernyataan;
}
catch (Exception ex) {
   melakukan operasi sebelum keluar;
   throw ex;
}

Perhatikan pernyataan throw ex pada syntax di atas. Pernyataan itu akan melemparkan kembali exception pada caller sehingga handler yang lain bisa memperoleh kesempatan untuk memproses exception ex tersebut.

Berikut ini adalah contoh kode program Java untuk memahami rethrow exception.

public class RethrowExceptions {

  static void pembagian(){
    int a,b,c;
    
    try{
        a = 5 ; 
        b = 0 ; 
        c = a / b ; 
        System.out.println(a + "/"+ b +" = " + c); 
    }
    catch(ArithmeticException e){
        System.out.println("Exception ditangkap pada method pembagian()");
        System.out.println("Tidak dapat dibagi oleh nol dalam divisi Integer");
        throw e; //Melemparkan kembali exception
    } 
  } 
      
   public static void main(String[] args){
     System.out.println("Method main() dimulai!");

     try{
        pembagian();
     }
     catch(ArithmeticException e){
        System.out.println("Exception yang dilemparkan kembali ditangkap di method Main()");
        System.out.println(e);
     } 
   } 
 } 




Output:
Method main() dimulai!
Exception ditangkap pada method pembagian()
Tidak dapat dibagi oleh nol dalam divisi Integer
Exception yang dilemparkan kembali ditangkap di method Main()
java.lang.ArithmeticException: / by zero

Pada kode di line 15 di atas terdapat pernyataan throw e pada blok catch yang artinya blok catch itu akan melemparkan kembali exception dari method pembagian(). Selanjutnya exception yang terlempar itu akan di-pass-kan pada blok catch dengan pernyataan catch(ArithmeticException e) pada line 25 yang terdapat pada method main().

Kapan Exception Handling Harus Digunakan?

Kapan Exception Handling Harus Digunakan? - Bila suatu error perlu ditangani oleh pemanggilnya (caller) maka method harus melemparkan exception. Dalam keadaan normal, blok try memiliki kode-kode yang akan dieksekusi. Sementara itu, blok catch berisi kode-kode yang akan dieksekusi ketika menangkap exception yang terlempar.

kapan exception handling digunakan pada Java

Blok catch ini juga bisa melemparkan exception kembali
Apa yang membuat exception handling pada Java menjadi sangat penting adalah untuk memisahkan kode penanganan error dengan kode program secara normal sehingga membuat program lebih mudah dimengerti, jelas, dan mudah dimodifikasi.

Namun, perlu diketahui juga bahwa exception handling akan memerlukan waktu yang lebih banyak karena harus membuat objek exception itu sendiri, menelusuri kembali stack pemanggilan method, dan juga menyebarkan exception pada rantai pemanggilan method yang digunakan untuk menemukan handler.

Suatu exception terjadi pada method

Bila anda menginginkan exception itu diproses oleh caller (caller ini bisa berupa method yang memanggil method lainnya), maka objek exception harus dibuat dan dilemparkan. Jika exception yang terjadi pada method itu dapat ditangani maka exception tidak perlu digunakan atau tidak perlu melemparkannya (throw).

Pada umumnya, pada project yang terdiri dari banyak class maka class exception merupakan kandidat yang bisa terjadi. Error sederhana yang bisa muncul di dalam suatu method sebaiknya ditangani tanpa menggunakan exception, ini adalah cara yang terbaik, selanjutnya pernyataan if dapat digunakan untuk memeriksa error tersebut.




Jadi blok try-catch dapat digunakan pada kode program ketika harus berurusan dengan kondisi error yang tidak diharapkan. Jangan gunakan blok try-catch ini pada situasi yang mudah ditangani, ini akan membuat kode program menjadi tidak efektif.

Kesimpulannya, menentukan apakah sebuah situasi yang memerlukan exception handling dan yang tidak memerlukannya bisa menjadi keputusan yang sulit. Namun, satu poin penting yang harus diperhatikan adalah tidak menyalahgunakan exception handling itu hanya untuk menyelesaikan masalah logika yang sederhana, yang bisa diatasi tanpa menggunakan blok try-catch tersebut.

11 Aturan Inheritance Pada Java Serta Contohnya

Hallo gan, setelah anda sebelumnya mengetahui apa itu inheritance juga konsep-konsep dasarnya yang perlu diketahui, maka kali ini akan dibahas mengenai 12 aturan inheritance pada Java beserta dengan contoh-contohnya sehingga anda akan mudah mengaplikasikannya pada dan memahaminya ketika melakukan coding Java.

inheritance-pada-java-contoh

Aturan dan Contoh Inheritance Java

Berikut ini adalah aturan dan contoh pada inheritance yang perlu anda ketahui.

1. Semua class inherit dari class objek secara langsung ataupun tidak langsung

Setiap class yang dibuat pada Java inherit dari class Objek. Meskipun tidak dinyatakan secara eksplisit.

Contoh:

public class Mobil {
 
}


Secara implisit:

public class Mobil extends Object {
 
}


2. Dalam inheritance, suatu contructor tidak dapat diwariskan

Constructor dari superclass tidak dapat diwariskan kepada subclass, namun bisa dipanggil dengan menggunakan keyword super().

Bila sebuah constructor secara eksplisit tidak memanggil constructor dari superclass, maka compiler secara otomatis akan memanggil constructor tanpa argumen secara implisit.

Contoh:

public class Kendaraan {
 
 //Ini constructor tanpa argument
 public Kendaraan(){
  System.out.println("Ini kendaraan");
 }
 
}



public class Mobil extends Kendaraan {
 
 public Mobil(){
  super();//Sebenarnya super() ini tidak harus ditulis, karena dipanggil secara implisit oleh compiler
 }

}

Tapi jika superclass memiliki constructor dengan argumen tertentu dan subclass tidak memanggil constructor tersebut secara ekplisit maka compile error akan terjadi.

Contoh:

public class Kendaraan {
 
 protected String nama;
 
 public Kendaraan(String nama){
  this.nama = nama;
 }
}



public class Mobil extends Kendaraan {
 String brand;
 
 public Mobil(String brand){
  super(brand);
  this.brand = brand;
 }

}


Contoh kode berikut ini akan menimbulkan compile error:

public class Mobil extends Kendaraan {
 String brand;
 
 public Mobil(String brand){
  this.brand = brand;
 }

}

3. Acces modifier pada inheritance


Pada inheritance, member dengan acces modifier private tidak dapat diwariskan. Sedangkan member default dapat diwariskan asalkan berada dalam package yang sama, jadi di luar itu tidak dapat diwariskan. Untuk member protected hanya dapat diakses oleh subclass melalui inheritance baik itu pada package yang sama ataupun berbeda. Terakhir adalah member public yang dapat diwariskan di mana saja.

4. Mengakses member dari superclass


Untuk mengakses member dari superclass maka keyword super dapat digunakan.

Contoh:

public class Kendaraan {

 protected void bergerak(){
  System.out.println("Kendaraan bergerak!");
 }
}


public class Mobil extends Kendaraan {
 
 protected void bergerak(){
  System.out.println("Mobil bergerak!");
 }
 
 public void test(){
  super.bergerak();
  this.bergerak();
 }
}

Bisa dilihat baik itu superclass ataupun subclass memiliki method yang sama yaitu bergerak(), ini adalah overriding. Jadi class Mobil dapat memanggil method bergerak milik class Kendaraan dengan keyword super().

5. Referensi dan deklarasi objek

Ini adalah bagian yang menarik dari inheritance dimana referensi dari superclass bisa menjadi referensi objek dari subclass.




Perhatikan contoh berikut ini:

public class Kendaraan {

 protected void bergerak(){
  
 }
}


public class Mobil extends Kendaraan {
 
 protected void injakGas(){
  
 }
}


class Test{
 
 public static void main(String[] args) {
  
  Kendaraan kendaraan = new Mobil();
  
 }
}

Aturannya adalah referensi objek superclass yang berada disebelah kiri bisa menjadi referensi untuk sub type yang berada disebelah kanan.

Selanjutnya, bila dilanjutkan dengan pemanggilan method:

class Test{
 
 public static void main(String[] args) {
  
  Kendaraan kendaraan = new Mobil();
  
  kendaraan.bergerak();//bisa dilakukan
  
  kendaraan.injakGas();//tidak bisa dilakukan
 }
}

Ketika objek memanggil method milik superclass maka hal ini bisa dilakukan, seperti pada kendaraan.bergerak(). Namun, ketika subclass memiliki method baru, maka method tersebut tidak bisa dipanggil melalui referensi dari superclass, seperti kendaraan.injakGas().

6. Multi inheritance pada interface


Dalam Java, multi inheritance pada interface diizinkan untuk dilakukan. Interfaces itu sendiri merupakan 100% class abstract.

Contoh:

public interface A {
 
 public void methodA();

}

public interface B {
 
 public void methodB();

}

public interface C extends A,B {
 
 public void methodC();

}

public class D implements A, B, C {

 @Override
 public void methodA() {
  
 }

 @Override
 public void methodB() {
  
 }

 @Override
 public void methodC() {
  
  
 }

}

Hal di atas bisa dilakukan karena interfaces tidak memiliki method yang konkrit sehingga tidak menimbulkan kerancuan.

7. Tidak boleh multi inheritance pada class


Java tidak membolehkan suatu class inherit pada dua class atau lebih secara langsung. Ini dikarenakan jika dilakukan akan menimbulkan keraguan. Dan jika dilakukan akan menimbulkan masalah yang dikenal dengan Deadly Diamond of Death.

8. Aturan ketika suatu interface inherit dari interface lainnya

Ketika suatu interface adalah inherit dari interface lainnya maka sub interface tersebut mewarisi semua method dari super interface. Kemudian, sub interface itu memiliki kebebasan apakah akan memakai semua method tersebut atau tidak.

Contoh:

public interface Workable {
 
 public void workA();
 public void workB();
 public void workC();

}

public interface Repairable extends Workable {
 
 public void workA();//mengimplementasikan method workA()
 public void serviceA();
 public void serviceB();
 public void serviceC();

}

9. Inheritance dan interface pada class

Dalam Java, ketika class inherit dari class lainnya, maka secara bersamaan juga bisa mengimplementasikan interface.

Contoh:

public interface dapatDigerakkan {
 
 public void bergerak();

}

public class KendaraanRodaDua {

 protected void melaju(){
  
 }
 
 public void berhenti(){
  
 }
}

public class Motor extends KendaraanRodaDua implements dapatDigerakkan {

 @Override
 public void bergerak() {
  
 }
 
 
}

10. Aturan pada acces modifier

Acces modifier public dan protected dari member superclass akan diwariskan pada subclass ketika inheritance (extends) dilakukan. Sedangkan untuk member class dengan acces modifier default hanya akan diwariskan ketika berada dalam package yang sama.

11. Inheritance pada class abstract dan interface

Ketika suatu class abstract mengimplementasikan interface maka class abstract tersebut tidak perlu meng-override method dari interface tersebut. Tapi, class konkrit yang pertama kali inherit dari class abstract tersebut harus meng-override method-method tersebut.

Contoh:

public interface dapatDigerakkan {
 
 public void berhenti();
 public void bergerak();
 public void startMesin();
 public void stopMesin();

}


public abstract class KendaraanRodaDua implements dapatDigerakkan {
 
 public void startMesin(){
  System.out.println("Mesin kendaraan dinyalakan!");
 }
 
 public void stopMesin(){
  System.out.println("Mesin kendaraan dimatikan!");
 }

}


public class Motor extends KendaraanRodaDua {

 @Override
 public void berhenti() {
  System.out.println("Motor berhenti!");
 }

 @Override
 public void bergerak() {
  System.out.println("Motor bergerak!");
 }
 
}

Pada contoh di atas class KendaraanRodaDua adalah class abstract.  Jadi class ini bisa mengimplementasikan 2 method dari interface dapatDigerakkan, yaitu method startMesin() dan stopMesin(). Oleh karena itu, 2 method lainnya yaitu berhenti() dan bergerak() dari interface itu harus di implementasikan pada class konkrit yaitu class Motor.

Tapi, ketika class abstract tidak mengimeplementasikan sama sekali method dari interface maka class konkrit yang pertama kali inherit dari class abstract tersebut harus mengimplementasikan semua method dari interface tersebut.

Sebagai tambahan yang juga penting diketahui, ketika suatu class konkrit (non-abstract) mengimplementasikan interface maka class tersebut wajib mengimplentasikan seluruh method-method dari interface tersebut. Arti mengimplemntasikan adalah memberikan method dari interface itu body karena semua method-method yang terdapat pada interface adalah method abstract yang tidak memiliki body method.


Demikianlah penjelasan mengeni aturan-aturan pada inheritance beserta dengan contohnya. Semoga bisa membantu anda yang sedang memahami topik yang serupa ketika belajar Java.

9 Aturan Dan Contoh Penggunaan Constructor Pada Program Java

Halo gan, pada pembahasan sebelumnya admin sudah membahas mengenai inisialisasi objek dengan menggunakan constructor. Nah, pada kesempatan kali ini, akan dijelaskan mengenai 9 aturan dan contoh penggunaan constructor tersebut dalam program Java.

Apa sajakah itu?

Namun sebelumnya, untuk memudahkan kita bisa kembali lagi membahas mengenai constructor itu sendiri.

Seperti sudah anda ketahui bahwa objek merupakan sebuah instance dari class. Dan untuk membuat objek tersebut dapat menggunakan keyword new.

Misalnya:

Pada pernyataan di atas, suatu objek dengan referensi mobil telah dibuat dan memiliki nama Innova dengan tipe String.

Kemudian "Innova" akan dilewatkan (passed) sebagai argumen pada konstruktor berikut ini dari class Kendaraan:


Dengan demikian, anda bisa melihat bahwa sebuah constructor seperti contoh di atas akan mengizinkan untuk menentukan nama ketika objek-objek dari class Kendaraan di buat.

Suatu constructor merupakan blok kode yang istimewa dari sebuah class dan akan selalu dipanggil ketika instance dari class dibuat.

Bisa dikatakan bahwa constructor diperlukan untuk menjamin bahwa objek yang dibuat dari suatu class telah diinisialisasi dengan keadaan yang diinginkan.
aturan-contoh-penggunaan-constructor

Perbedaan Antara Constructor Dan Method Pada Java

Secara sekilas anda bisa melihat kalau constructor itu seperti sebuah method, namun sebenarnya bukan, dan terdapat perbedaan yang benar-benar signifikan.

Perbedaan tersebut adalah:
  • Constructor memiliki nama yang sama dengan nama class.
  • Conctructor memiliki list parameter sama seperti method tapi tidak memiliki tipe return ataupun void.

Inilah 9 Aturan dan Contoh Penggunaan Constructor


Berikut ini adalah aturan-aturan penting yang harus diketahui dalam penggunaan constructor dalam program Java beserta dengan contoh-contohnya.

1. Suatu constructor dapat di overload

Ketika suatu constructor di overload artinya class bisa memiliki beberapa constructor asalkan parameternya berbeda-beda.

Contoh:


2. Default constructor diberikan oleh compiler Java

Ketika anda tidak menggunakan constructor, sebenarnya compiler Java secara otomatis membuat default constructor untuk class anda yang tidak memiliki parameter dan pernyataan pada bloknya.

Contoh:

Sebenarnya pada kode di atas, compiler juga memasukkan constructor default secara implisit seperti ini:


3. Default constructor tidak akan diberikan oleh compiler jika pada class tersebut sudah ada constructor

Perhatikan contoh simple berikut ini:

Pada contoh di atas class Mobil memiliki sebuah constructor Mobil(String nama) sehingga class tersebut tidak memiliki constructor default. Oleh sebab itu, bila anda membuat objek dengan:

Mobil avanza = new Mobil();

Maka compiler akan memunculkan error karena tidak ada constructor tanpa argumen pada class Mobil tersebut.

4. Hanya compiler yang membuat default constructor

Bila anda secara eksplisit membuat constructor pada class yang sama persis dengan default constructor di atas, maka itu tidak disebut dengan default constructor.

5. Suatu constructor tidak dapat diwariskan (inherited)

Bila suatu method pada superclass bisa diwariskan pada subclassnya maka tidak demikian dengan constructor. Untuk lebih jelasnya coba perhatikan contoh di bawah ini:


Maka, kode di bawah ini tidak akan bekerja:


6. Suatu Constructor bisa memiliki acces modifer private


Meskipun tampak aneh, tapi hal ini bisa dilakukan. Constructor dengan acces modifier private dapat diterapkan pada class Singleton atau biasa dikenal dengan Singleton pattern untuk membuat objek tunggal. Dengan membuat constructor class menjadi private maka class tersebut tidak bisa dibuat instancenya diluar class tersebut.



7. Constructor default akan memiliki acces modifier yang sama dengan class-nya

Bila suatu class katakanlah memiliki acces modifier public maka default constructor yang disediakan oleh compiler juga akan memiliki access modifier yang sama. Ini juga berlaku untuk access modifier lainnya.

Contoh:

8. Constructor default dari superclass akan dipanggil oleh constructor subclass-nya


Secara otomatis compiler pada Java akan melakukan panggilan dengan keyword super() pada baris pertama dari constructor. Oleh karena itu, ini menjadi aturan yang penting untuk dipahami ketika anda melakukan pewarisan dari class.

Contoh:



Namun, kode di bawah ini tidak akan bekerja, karena class A tidak memiliki constructor default:




9.  super() atau this() adalah pernyataan pertama yang harus di panggil dalam constructor

Ketika anda ingin memanggil constructor dari superclass dari constructor subclass maka anda menggunakan keyword super (). Sementara itu, pada constructor yang di overload pada class, maka anda bisa menggunakan this(). Baik itu super() ataupun this() harus diletakkan pada posisi pertama dalam baris kode dalam blok constructor.

Contoh:

Nah, itulah 9 aturan dan contoh penggunaan constructor pada Java. Semoga bisa membantu anda untuk mempelajari Java dengan mudah.

Memahami Contoh Penggunaan Blok Finally Pada Exception Handling Program Java

Hallo para agan, kali ini admin mau menulis mengenai contoh penggunaan blok finally pada exception handling. Sebelumnya sudah di bahas mengenai blok try, catch dan contohnya. Satu poin penting yang perlu diingat adalah pernyataan dalam blok finally akan selalu dieksekusi, tidak perduli apakah suatu exception terjadi ataupun tidak.

Tapi, ada satu kasus yang bisa menyebabkan blok finally tidak dieksekusi,yaitu pada saat program keluar lebih awal dari blok try dengan memanggil method System.exit.

Jadi ketika anda menginginkan blok kode yang akan selalu dijalankan oleh program Java terlepas dari ada atau tidak adanya exception, maka blok finally adalah tempat yang tepat bagi anda untuk melakukan tujuan tersebut.

finally_try_catch_exception_handling


Secara sederhana, syntax dari finally adalah sebagai berikut:

try {
   pernyataan-pernyataan;
}
catch (Exception ex) {
   penanganan ex;
}
finally {
   pernyataanFinally;
}

5 Hal Penting Yang Harus Diketahui Dari Blok finally


Terdapat lima poin penting yang harus anda pahami dari blok finally ini, diantaranya adalah:

  1. Ketika anda menggunakan blok finally maka anda juga harus menggunakan blok try. Ini adalah pasangan yang tidak dapat dipisahkan.

  2. Penggunaan blok finally tidak wajib pada exception handling, tapi ini merupakan pilihan bila blok try-catch tidak cukup untuk menyelesaikan masalah. Pernyataan pada blok finally akan selalu dijalankan setelah eksekusi dari blok try.

  3. Blok catch akan dieksekusi lebih dahulu bila terjadi exception pada blok try. Namun, bila tidak ada exception maka blok catch akan diabaikan dan pernyataan pada blok finally akan dieksekusi.

  4. Exception pada blok finally dapat ditindaklanjuti sama persis dengan exception lainnya.

  5. Bila blok try memiliki pernyataan seperti break, continue atau return maka pernyataan dalam blok finally akan tetap dieksekusi. 


Jadi, ketika pernyataan-pernyataan dalam blok try melemparkan exception dan kemudian ditangkap oleh blok catch, maka kode dalam blok finally akan dieksekusi. Tidak hanya itu, meskipun tidak ada exception yang terlempar atau tertangkap, kode di blok finally akan tetap dieksekusi.

Ketika blok finally digunakan maka blok catch bisa saja diabaikan. 

Blok finally Dengan Blok try Yang Memiliki Pernyataan return


Finally juga akan mengeksekusi pernyataan di dalam bloknya bahkan ketika terdapat pernyataan return sebelum mencapai blok finally tersebut.

Contoh:

public class try_return_finally {
  
    public static String myMethod()
    {
       try {
         return "Ini adalah pernyataan return dalam blok try";
         
       }
       finally {
         System.err.println("Ini adalah pernyataan dalam blok finally");
         System.err.println("Pernyataan ini dieksekusi walaupun blok try memiliki pernyataan return");
       }
    }
    
    public static void main(String args[])
    {
       System.out.println(myMethod());  
    }

}

Output:
Ini adalah pernyataan dalam blok finally
Pernyataan ini dieksekusi walaupun blok try memiliki pernyataan return
Ini adalah pernyataan return dalam blok try

Blok try dan finally Tanpa Menggunakan Blok catch


Berikut ini adalah contoh ketika class hanya menggunakan blok try dan finally saja.

Contoh:

public class finally_tanpa_blok_catch {
 
 public static void main(String[] args) {
  try {
    System.out.println("Ini pernyataan di dalam blok try");          
  } 
  finally{
   System.err.println("Ini pernyataan di dalam blok finally");
  } 
 }
}

Output:
Ini pernyataan di dalam blok try
Ini pernyataan di dalam blok finally

Contoh Blok try, catch, finally dan Method System.exit()

Method System.exit() akan menghentikan thread program, sehingga pernyataan setelahnya dan juga pernyataan dalam blok finally tidak akan dieksekusi.

a) Contoh method System.exit() terdapat pada blok try

public class try_system_exit_finally {
 
 public static void main(String[] args) {
  
  try{
   lemparkanException();
  }
  catch (Exception ex){
   System.err.println("Exception yang terlempar "
     + "dari blok catch ditangani di method main");
  }
  
 }
 
 public static void lemparkanException() throws Exception{
  try{
   System.out.println("Pernyataan try dieksekusi");
   
   System.exit(0);//Method ini akan menghentikan thread
   throw new Exception();
   
  }
  catch (Exception ex){
   System.err.println("Exception terjadi");
   throw ex;//exception ini ditangani di method main
  }
  finally{
   
   System.err.println("Pernyataan finally dieksekusi");
  }
 }

}

Output:
Pernyataan try dieksekusi

b) Contoh method System.exit() terdapat pada blok catch

public class catch_system_exit_finally {
 
 public static void main(String[] args) {
  
  try{
   lemparkanException();
  }
  catch (Exception ex){
   System.err.println("Exception yang terlempar "
     + "dari blok catch ditangani di method main");
  }
  
 }
 
 public static void lemparkanException() throws Exception{
  try{
   System.out.println("Pernyataan try dieksekusi");
   
   
   throw new Exception();
   
  }
  catch (Exception ex){
   System.err.println("Exception terjadi");
   System.exit(0);//Method ini akan menghentikan thread
   throw ex;//exception ini ditangani di method main
   
  }
  finally{
   
   System.err.println("Pernyataan finally dieksekusi");
  }
 }

}

Output:
Pernyataan try dieksekusi
Exception terjadi

Sekarang anda bisa  membandingkan sendiri ketika tidak menggunakan method System.exit() untuk lebih memahaminya.



Contoh Program try, catch, finally, Pada Method Yang Melemparkan Dan Tidak Melemparkan Exception


Berikut ini adalah contoh ketika method yang melemparkan dan tidak melemparkan exception menggunakan blok try, catch, dan finally.

Contoh:

public class Exception_finally {
 
 
 public static void melemparkanException() throws Exception{
  
  try{
   System.out.println("Pernyataan pada line 7 dieksekusi");
   throw new Exception();
  }
  catch(Exception ex){
   System.out.println("Exception yang terlempar dari "
     + "method melemparkanException telah ditangkap oleh blok catch pada line 26");
   throw ex;//exception ini akan ditangani oleh blok catch di main method
  }
  
  finally{
   System.err.println("Pernyataan dalam blok finally pada line 17 dieksekusi");
  }
 }
 
 public static void tidakMelemparkanException(){
  try{
   System.out.println("Method tidakMelemparkanException dijalankan");
  }
  //blok catch ini tidak akan dieksekusi karena method tidak melemparkan exception
  catch(Exception ex){
   System.err.println(ex);
  }
  finally{
   System.err.println("Pernyataan dalam blok finally pada line 41 dieksekusi");
  }
  
  System.out.println("Akhir dari method tidakMelemparkanException");
 }
 
 public static void main(String[] args) {
  
  try{
   melemparkanException();
  }
  catch(Exception ex){
   System.err.println("Exception yang terlempar dari blok catch pada "
     + "line 13 ditangani di main method");
  }
  
  //tidakMelemparkanException();
 }

}


Contoh output:

Pernyataan pada line 7 dieksekusi
Exception yang terlempar dari method melemparkanException telah ditangkap oleh blok catch pada line 26
Pernyataan dalam blok finally pada line 17 dieksekusi
Exception yang terlempar dari blok catch pada line 13 ditangani di main method
Method tidakMelemparkanException dijalankan
Pernyataan dalam blok finally pada line 30 dieksekusi
Akhir dari method tidakMelemparkanException

Demikianlah penjelasan mengenai contoh penggunaan blok finally pada exception handling program Java. Yang terpenting adalah pemahaman konsepnya sebagai dasar. Semoga bisa membantu anda yang sedang belajar pemograman Java.

Java vs Kotlin, Is It a Dilemma for Android Developers?

Which one will you choose, learn Java or Kotlin? Many programmers who want to jump into Android developers are in a dilemma because of the questions between the two options.

Google has stated that Kotlin is the official language for Android IO development in 2017. To choose between the two programming languages then the key is you must know your current position. Are you currently a newbie who wants to learn Android development or have you been a Java developer before and want to get into a bright Android market share?

Java vs Kotlin

Why do Beginner Android Programmers Have to Learn Java first?

Let's say you are currently a beginner in the Android development world and you are advised to learn Java first, what comes to mind? "It's like a nightmare!. Because Kotlin has become the official language of Android, very productive, and the boilerplate code is very minimal. "Oh man, this advice sounds really bad!".

As a beginner, the first thing you need to consider is that Java has more job opportunities. Java has a solid and very large community in the world. And you will be part of it. The Java programming language has also become an established language and has been refined over time. You may start your career history as a programmer for development of Android developers, but that is not everything.

The second consideration is with the support of a great programmer community, you can ask anything about Java to them. Especially when you have trouble when you face technical problems as a beginner and you do not know what to do next. Try typing your problem in Google search related to Java and you will find the answer. However, for a new language like Kotlin, this can be a difficult thing.

Kotlin doesn't currently have a lot of external sources of knowledge out there, especially the free ones, which you can make reference to, and in addition, if you are only a beginner. Meanwhile, for Java, there are many books, and courses, whether paid or free to learn about Android development with it.

Indeed, as more and more programmers start using Kotlin then many other things will get better. However, whether it can instantly rival the popularity and adopt the Java language? This is the reason why the newbie should learn Java first before Kotlin as an android developer.

But, this rule is not something absolute. It doesn't matter if you as a beginner to start learning from Kotlin because you feel you will be more productive and you are very focused on developing Android as your choice. The recommended place to start is in Android Kotlin Development Master Class. However, actually when you are familiar with Java, learning Kotlin will be much easier.



Why Java Programmer Should Learn Kotlin?

JetBrains as the company of one of Java IDE's top IntelliJ IDEA has developed Kotlin. You can use your preferred Java library and framework on Kotlin, while Java users can also use Kotlin framework for development. This is all because Kotlin generates Java bytecode. It can be said that Kotlin is fully interoperable with Java. Spring 5 as one of the Java framework has also supported Kotlin.

Java programmers who want to learn android development will be better if studying Kotlin as it will increase productivity quickly. You can compare when the Java program code requires dozens of lines then Kotlin requires only a few lines even sometimes can only one line. Kotlin can avoid boiler-plate code that must be declared specifically on Java such as toString (), get method, set method, and so on.

If you want to start learning Kotlin in 2108 then you can start from Kotlin online course for Java developer and also you can start learning from Kotlin in Action book.

Conclusion


As a real newbie, you should start with a Java programming language for a career in Android development. The advantage is that you will get full support from the Java community that will help you a lot. Thus, you will also be easier when studying Kotlin in the future.

In the meantime, if you are currently a Java developer, you should start to learn Kotlin to improve productivity and time efficiency. You can also have a pretty good advantage in the job market out there.

Here are the Reasons To Learn Java Programming Language in 2018

The reasons to learn Java in 2018 may now be in your mind. Do you realize that there are about six hundred programming languages available today, so which one do you choose and be a priority for you to learn this year? Indeed, not all programming languages are easy to learn, and still, some are still in development stage. By following the current technology trends, it is predicted that some of these programming languages will become popular and some will be abandoned.

Mastering related technology is one of the keys to success if you want to be a successful developer. The highest paid technology will not always make the developer successful. The most appropriate way is to combine your experience and knowledge and use the tools you like the most. But, at the moment, that tools should be a fairly popular technology, not an outdated one.

reason-to-learn-Java-2018

Why Java?


This programming language is one of the backend languages that has many communities in the world. Java takes an important part in the development of Android. Object-oriented programming with Java can be used for a variety of purposes in technology.

Most developers use it to build server-side, games, desktop applications, and other software in large-scale projects. The main advantage of Java is its security and speed. That's why Java technology is widely used in the banking system and financial industry in the world.

Java is a programming language that is not easy when you start to learn. If you are a real beginner you will see technology that is very massive and complicated. However, it is stated that Java is easier when compared with C language. But don't forget the good side. In terms of job field, being a Java specialist is not a bad thing. In the United States, they earn a salary of around $ 100k USD / year for that position. Now, are you interested in learning Java?


IoT and JVM are Strong Reasons to Learn Java in 2018


The most powerful thing that can encourage you to learn Java this year is because Java has become the basis of the IoT system.

What is the reason behind all that? Because Java is able to provide network portability so that this programming language becomes very compatible with IoT technology.

In addition, as we know that IoT will be a tremendous trend in the coming years.

Another reason to consider is the JVM makes Java executable on any operating system as well as other hardware. Of course, this makes Java as one of the languages for multifunctional web development and also safe.

As evidence of the power of Java is the number of large projects that are considered successful when built with Java such as Eclipse, Gmail, NASA Worldwind, and Jenkins. Don't forget also some popular websites like LinkedIn, eBay, and also Amazon. Now, are you interested in learning Java? If so, you can take an online course to learn Java from the following website portal:
Happy coding and consider the reasons to learn Java in 2018.

Contoh Program Exception Handling: Mendeklarasikan, Melemparkan, Dan Menangkap Exception Pada Java

Contoh program exception handling di bawah ini akan menjelaskan mengenai mendeklarasikan, melemparkan dan menangkap exception pada program Java. Instance method yaitu setPanjang(), setLebar() dan setTinggi() dapat melemparkan (throw) exception ketika nilai yang dimasukkan berupa angka negatif.

contoh program exception handling Java


Pada class BalokDenganException di atas, method setPanjang(), setLebar() dan setTinggi() akan melemparkan exception bila nilai yang dimasukkan adalah negatif. Method-method tersebut mendeklarasikan IllegalArgumentException pada method headernya.

Meskipun tanpa menggunakan klausa throws IllegalArgumentException pada deklarasi method, class BalokDenganException akan tetap sukses di compile. Ini dikarenakan exception tersebut merupakan subclass dari RuntimeException (unchecked exception) terlepas dari apakah exception tersebut dideklarasikan pada method header.

Kemudian untuk mengujinya bisa menggunakan class TestBalokDenganException seperti di bawah ini:

Class TestBalokDenganException membuat 5 objek untuk menguji cara kerja penanganan exception. Perhatikan pada objek balok5 pada blok try,  nilai panjang yang ditetapkan adalah negatif sehingga akan melemparkan IllegalArgumentException pada method setPanjang().

Kemudian exception yang terlempar itu akan ditangkap pada blok catch. Tipe objek ex adalah IllegalArgumentException, dan ini sesuai dengan objek exception yang dilemparkan oleh method setPanjang(), sehingga exception ini akan ditangkap oleh blok catch.

Kemudian exception handler akan menampilkan pesan singkat dengan ex.toString() mengenai exception tersebut, atau anda juga bisa mencoba dengan ex.printStackTrace() untuk mendapatkan detail yang lebih mengenai exception ini.

Ketika exception terjadi maka program akan tetap dilanjutkan. Jika exception handler tidak menangkap exception tersebut maka program akan dihentikan secara mendadak.


Bila method melemparkan Error exception selain dari RuntimeException maka method harus dipanggil di dalam blok try-catch.

Contoh Kasus Program Exception Handling Pada Penjumlahan Integer


Contoh lainnya di bawah ini adalah mengenai penjumlahan integer. Dimana ketika user memasukkan nilai selain integer maka exception akan terlempar dan ditangkap oleh blok catch sebagai handler.
Demikianlah contoh program exception handling pada Java mengenai mendeklarasikan, melemparkan, dan menangkap exception yang mudah-mudahan bisa membantu anda untuk memahami topik ini dengan lebih baik.