Bahasa Java

Belajar Pemrograman Java Dari Dasar

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.

Memahami Exception Handling Pada Pemrograman Java

Jika Java Virtual Machine (JVM) mendeteksi operasi yang tidak mungkin untuk dilakukan, maka saat  program berjalan akan muncul runtime error.

Sebagai contoh, jika anda mengakses suatu array menggunakan index yang out of bonds, maka anda akan mendapatkan runtime error dengan ArrayIndexOutOfBoundsException.

Atau misalkan ketika anda memasukkan nilai dengan tipe double, padahal program anda dirancang untuk nilai integer, maka anda akan mendapatkan runtime error InputMismatchException.

Pada program Java, runtime error ini akan dilemparkan sebagai pengecualian-pengecualian atau exceptions.

Exceptions ini juga adalah objek yang merepresentasikan suatu error atau kondisi yang mencegah eksekusi berjalan secara normal.

Jika exception tidak ditangani maka program akan berhenti secara tidak normal.

Pertanyaannya adalah bagaimana cara anda untuk menangani exception sehingga program bisa terus berjalan atau berhenti dengan baik?

Exception handling merupakan bagian penting dari penulisan aplikasi Java yang tangguh. 

Oleh sebab itu, bagian ini adalah persyaratan non-fungsional untuk aplikasi apa pun. Bertujuan untuk menangani kondisi di mana terjadi kekeliruan dengan baik seperti resources yang tidak tersedia, input yang tidak valid, input null dan lain sebagainya.

Java menyediakan beberapa fitur untuk handling exception, terdapat secara built-in dalam bentuk keyword try, catch dan finally. Bahasa pemrograman Java juga memungkinkan anda untuk membuat exception yang baru dan melemparnya dengan menggunakan keyword throw dan throws.

exception handling Java

Ikhtisar Exception Handling

Exceptions dilemparkan (thrown) dari suatu method. Pemanggil (caller) dari method tersebut dapat menangkap (catch) dan menangani exception itu.

Untuk memahami exception handing lihat contoh kode program di bawah ini:


Pada kode di atas ketika user memasukkan angka 0 pada angka ke dua, maka runtime error akan terjadi karena integer tidak bisa di bagi oleh angka 0. Misalkan contoh output seperti di bawah ini:

Masukkan dua buah integer: 
1
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Pembagian.main(Pembagian.java:15)

Cara sederhana untuk mengatasi masalah ini adalah dengan menggunakan kondisional if, seperti pada contoh berikut ini:


Contoh output:
Masukkan dua buah integer:
1
0
Angka pembagi tidak boleh nol!

Sebelum melangkah lebih jauh pada exception handling, kode di atas dapat ditulis ulang dengan menggunakan method untuk pembagian seperti contoh di bawah ini:



Pada kode di atas method pada line (6-12) akan mengembalikan hasil pembagian dari dua buah integer. Jika angka ke dua adalah 0 sebagai pembagi maka program akan dihentikan pada line 9.

Ini jelas adalah sebuah masalah karena anda seharusnya tidak membuat method untuk menghentikan program.

Jadi, bagaimana suatu method dapat memberitahu pemanggilnya bahwa suatu exception telah terjadi? Java mengizinkan suatu method untuk melemparkan suatu exception yang dapat ditangkap dan ditangani oleh caller atau pemanggil.

Jadi kode di atas dapat ditulis kembali sebagai:


Pada kode di atas jika angka kedua atau pembagi adalah 0, maka method akan melemparkan exception pada line 9:

throw new ArithmeticException("Angka pembagi tidak boleh nol!");

Nilai yang dilemparkan, dalam hal ini adalah new ArithmeticException("Angka pembagi tidak boleh nol!"); disebut dengan suatu exception. Sedangkan eksekusi dari pernyataan throw disebut dengan melemparkan suatu exception atau throwing an exception.

Objek exception adalah suatu object yang dibuat dari class Exception. Dalam hal ini class Exception adalah java.lang.ArithmeticException.

Dengan hirarki:

java.lang.Object 
      java.lang.Throwable 
          java.lang.Exception 
              java.lang.RuntimeException 
                  java.lang.ArithmeticException

Konstruktor ArithmeticException(String s) dipanggil untuk mengkonstruksi objek exception. Di mana String s adalah pesan yang menjelaskan mengenai exception.

Ketika sebuah exception dilemparkan, maka alur eksekusi secara normal akan terganggu. Seperti istilah "throw an exception" yang artinya adalah untuk mem-pass-kan exception dari satu tempat ke tempat lainnya.

Blok try dan catch


Pernyataan untuk memanggil method terkandung dalam blok try dan catch. Blok try pada line 23 - 28  berisi kode yang dijalankan pada keadaan normal.

Sementara itu exception akan ditangkap oleh blok catch pada line 30 - 33. Jadi kode yang terdapat pada blok catch bertujuan untuk menangani exception.

Kemudian pernyataan pada line 35 akan dieksekusi setelah blok catch dieksekusi.

Pernyataan throw ini dapat dianalogikan dengan pemanggilan method. Namun, bukan method yang dipanggil, melainkan blok catch.

Dalam hal ini, suatu blok catch adalah seperti sebuah definisi method dengan parameter yang sesuai dengan tipe nilai yang dilemparkan. Tidak seperti method, bagaimanapun, setelah blok catch dieksekusi, kontrol program tidak kembali lagi kepada pernyataan throw, melainkan akan melanjutkan ekseskusi pada pernyataan selanjutnya setelah blok catch.

Parameter Blok catch


Pada line 30:

catch (ArithmeticException exception)

Identifier exception berperan sama seperti parameter dalam sebuah method. Dengan demikian, parameter ini disebut sebagai suatu parameter blok catch.

ArithmeticException di atas, yang ditulis lebih dulu sebelum exception adalah untuk menentukan jenis exception apa yang bisa ditangkap oleh blok catch. Sekali exception ditangkap maka anda bisa mengakses nilai yang dilemparkan dari parameter ini di dalam body dari blok catch.

Secara ringkas, sebuah template dari blok try-throw-catch akan tampak seperti ini:


Sebuah exception mungkin dapat dilontarkan secara langsung dengan menggunakan pernyataan throw di dalam blok try. Atau bisa juga dengan menggunakan method yang dapat melemparkan exception.


Pada line 24, method main memanggil hitungPembagian(). Jika method hitungPembagian() berjalan dengan normal maka maka mengembalikan sebuuah nilai pada caller.

Sebaliknya jika method hitungPembagian() menemukan exception maka ia akan melemparkan kembali exception tersebut pada caller. Selanjutnya blok catch dari caller akan menangani exception tersebut.

Keuntungan Menggunakan Exception Handling

Sekarang anda bisa melihat keuntungan menggunakan exception handling. Keuntungannya dalah memungkinkan sebuah method untuk melemparkan exception pada pemanggilnya atau caller dan memungkinkan caller untuk menangani exception tersebut.

Dapat dibayangkan bila tanpa kapabilitas tersebut method yang dipanggil itu sendiri harus menangani exception atau menghentikan program. Seringkali method yang dipanggil tidak mengetahui apa yang harus dilakukan ketika terjadi error. Ini adalah kasus yang tipikal untuk method-method library. Library method dapat mendeteksi error namun hanya caller yang dapat mengetahui apa yang harus dilakukan ketika error muncul.

Manfaat utama dari exception handling adalah memisahkan pendeteksian suatu error dari penanganan error.


Banyak method library melemparkan exceptions. Berikut ini adalah contoh menangani InputMismatchException ketika membaca sebuah input.



Ketika mengeksekusi input.nextInt() pada line 13, suatu InputMismatchException muncul jika user memasukkan angka yang bukan merupakan integer.

Misalkan nilai 2.9 diinput, maka  InputMismatchException terjadi dan kontrol program akan dipindahkan ke blok catch line 20-23. Pernyataan di dalam blok tersebut akan dieksekusi.

Pernyataan input.nextLine() pada line 22 akan memusnahkan input line saat ini dan kemudian user dapat memasukkan input pada line yang baru.

Variabel lanjutkanInput mengontrol loop. Nilai inisialnya adalah true pada line 8 dan kemudian diubah menjadi false pada line 17 ketika nilai yang valid diterima. Ketika sebuah input nilai yang valid diterima maka tidak diperlukan lagi untuk melanjutkan input angka.

Contoh Penggunaan Method Untuk Mendapatkan Informasi Pada Exception Handling

Exception pada Java dan semua subclassnya tidak memberikan method yang spesifik. Oleh karena itu method-method ini terdapat dalam class Throwable, yang merupakan class dasar. Tujuan dibuatnya class exception adalah untuk menentukan jenis-jenis exception yang berbeda sehingga setiap akar permasalahan dalam program dapat diidentifikasi dan ditangani sesuai dengan tipe exception-nya.

Setiap objek exception memiliki informasi yang penting mengenai exception itu sendiri. Untuk memperoleh informasi tersebut anda dapat menggunakan instance method dari class Throwable.

method exception handling java


Beberapa method tersebut adalah:

a. public string getMessage()

Method ini akan mengembalikan pesan yang menjelaskan objek exception terkait. Programmer bisa memilih menggunakan method ini jika dia tidak ingin menyampaikan pesannya sendiri pada user.

Contoh:
Output:
/ by zero

b. public void printStackTrace()

Method ini akan membantu programmer untuk mengetahui dimana problem yang aktual terjadi. Dengan method ini beberapa baris pada konsol akan ditampilkan. Baris pertama akan memberikan informasi mengenai nama subclass Throwable dan informasi package. Kemudian pada baris kedua dan seterusnya akan menjelaskan mengenai posisi kesalahan pada nomor baris tertentu yang di awali dengan "at".

Contoh:



Output:
java.lang.ArrayIndexOutOfBoundsException: 5
at Exception_printStackTrace.main(Exception_printStackTrace.java:8)


c. getLocalizedMessage()

Method ini akan memberikan deskripsi lokal dari throwable. Subclass bisa mengoveride method ini untuk membuat pesan khusus secara lokal.

Contoh:

Output:
Ini adalah method exceptionBaru()
java.lang.Exception: Exception baru...
Exception baru...

d. public String toString()

Method ini akan mengembalikan deskripsi singkat dari throwable. Hasilnya merupakan gabungan string dari :
  • Nama class dari objek exception
  • Tanda ":" dan spasi
  • Method getMessage()
Bila getLocalizedMessage mengembalikan nilai null maka method ini hanya mengembalikan nama class exception saja.


Contoh 1:

Contoh output:
Masukkan nilai integer: 2.3
java.util.InputMismatchException

Contoh 2:


Contoh Output:
java.lang.ArrayIndexOutOfBoundsException: 4

e. getStackTrace()

Method ini akan mengembalikan array dari elemen stack trace dan merepresentasikan stack trace yang berkaitan dengan objek exception.

Contoh:
Contoh Output:
Informasi yang didapatkan dari getStackTrace:
Nama method: menjumlahkanElemenArray(Exception_getStackTrace:6)
Nama method: main(Exception_getStackTrace:14)

Menangkap Dan Menangani Exception Dengan Blok try-catch Pada Program Java

Sebelumnya anda sudah mengetahui cara untuk mendeklarasikan dan melemparkan exception. Jadi, ketika exception tersebut dilemparkan, maka dapat ditangkap dengan blok try-catch yang akan dijelaskan pada kesempatan kali ini.

Blok tersebut adalah sebagai berikut:

Bila pada blok try tidak ditemukan exception maka blok catch akan diabaikan. Sebaliknya, jika terdapat exception pada blok try maka program akan melewatkan (skip) sisa pernyataan dari blok tersebut dan akan mulai mencari kode untuk menangani exception tersebut.


Menangkap Dan Menangani Exception Dengan Blok try-catch Pada Program Java


Kode yang digunakan untuk menangani exception itu disebut dengan exception handler.

Setiap blok catch diperiksa secara bergantian. Dari yang pertama sampai dengan yang terakhir. Ini bertujuan untuk melihat apakah tipe dari objek exception adalah merupakan instance dari class exception dalam blok catch.

Jika tipe objek itu sesuai maka objek exception akan ditetapkan pada variabel yang dideklarasikan dan kode dalam blok catch akan dieksekusi.

Jika handler tidak ditemukan maka Java akan keluar dari method ini dan kemudian akan mem-pass-kan exception pada method yang memanggil method, dan proses akan terus berlanjut sampai dengan handler ditemukan.

Pada akhirnya, jika handler masih tetap tidak ditemukan juga pada semua method berantai tersebut maka program akan dihentikan dan pesan error akan ditampilkan pada konsol.

Proses untuk menemukan handler itu disebut dengan menangkap exception.

Mekanisme Exception Handling Pada Method Berantai

Misalkan main method memanggil method_1, method_1 itu memanggil method_2 dan method_2 memanggil method_3. Sementara itu, method_3 melemparkan exception. Seperti di bawah ini:

Maka mekanismenya adalah:
  • Bila tipe exception adalah Exception_3 dan ditangkap oleh blok catch untuk menangani exception exc_3 pada dalam method_2 maka pernyataaan_5 akan diabaikan, dan pernyataan_6 akan dieksekusi.

  • Bila tipe exception adalah Exception_2 maka method_2 akan dibatalkan, kontrol akan dikembalikan ke method_1, dan exception ditangkap oleh blok catch untuk menangani exc_2 dalam method_1, sedangkan pernyataan_3 diabaikan dan pernyataan_4 akan dieksekusi.

  • Bila tipe exception adalah Exception_1 maka method_1 akan dibatalkan, kontrol akan dikembalikan ke main method, dan exception ditangkap oleh blok catch untuk menangani exc_1 dalam main method, sedangkan pernyataan_1 diabaikan dan pernyataan_2 akan dieksekusi.

  • Jika exception tidak dapat ditangkap oleh method_2, method_1, ataupun main method, maka program akan dihentikan dan pernyataan_1 serta pernyataan_2 tidak akan dieksekusi.
Berbagai class exception dapat diturunkan dari superclass. Oleh karena itu, bila blok catch menangkap objek-objek exception dari superclass maka ia juga bisa menangkap objek-objek exception subclass dari superclass tersebut.


Urutan dalam memberikan spesifikasi exception pada blok catch adalah hal yang penting. Jika aturan yang berlaku tidak diikuti maka compile error dapat terjadi. Aturan ini adalah mengharuskan untuk blok catch untuk tipe subclass harus muncul lebih dahulu sebelum blok catch untuk tipe superclass.

Misalnya, urutan di bawah ini akan menyebabkan compile error karena RuntimeException adalah merupakan subclass dari Exception.

Dan contoh yang benar adalah seperti ini:


Selain itu, jika berurusan dengan checked exception, maka anda harus memanggilnya dalam blok try-catch atau mendeklarasikan untuk melemparkan exception dalam memanggil method.

Sebagai contoh, misalkan method a memanggil method b , dan method b mungkin melemparkan checked exception, contohnya IOException, maka anda harus menulisnya seperti contoh 1 dan 2 berikut ini:

Memahami throw Exception Pada Program Java

Suatu program yang mendeteksi error dapat membuat sebuah instance dari tipe exception yang sesuai. Ini dikenal juga dengan istilah melemparkan exception atau throwing an exception.

Ketika program mendeteksi argumen yang melanggar ketentuan dari method, misalnya jika suatu method membutuhkan argumen berupa angka yang positif, akan tetapi yang di-pass-kan adalah angka negatif, maka IllegalArgumentException akan terlempar.


throw exception java


Sebenarnya apa yang terjadi ketika suatu exception terlempar?

Hal yang terjadi ketika suatu exception terlempar adalah objek exception itu akan dibuat menggunakan new sama seperti ketika anda membuat objek Java lainnya. Dan objek exception ini berada di heap.

Selanjutnya alur dari pengoperasian pemrograman akan dihentikan dan variabel referensi dari objek exception ini akan berperan. Pada titik ini, mekanisme dari penanganan exception akan mengambil alih melalui exception handler.

Exception handler ini memiiki tugas untuk memulihkan program dari masalah sehingga program akan tetap berlanjut atau mencari cara lainnya.

Satu hal penting yang harus dipahami mengenai exception adalah jika ada sesuatu yang buruk terjadi, maka program tidak diijinkan untuk berlanjut sesuai dengan jalan yang biasanya.

Exception akan mengijinkan (jika tidak ada cara lain) untuk memaksa program berhenti dan memberitahukan pada anda mengenai bagian yang salah atau idealnya memaksa program untuk menangani masalah dan mengembalikannya pada keadaan stabil.


Ketika exception terlempar, eksekusi program tidak akan berlanjut pada pernyataan selanjutnya namun akan menuju pada exception handler.

Syntax throw exception:

throw exceptionObject ;

Contoh:

Jika seseorang ingin menarik uang melebihi jumlah saldo di akunnya:




Jadi ketika anda mendeteksi kondisi error, anda tinggal melemparkan (throw) objek exception  yang sesuai. Anda harus bisa melihat tipe exception yang dapat menjelaskan kondisi tersebut. Java library banyak menyediakan class-class untuk memberi tanda pada kondisi-kondisi exception tersebut.

Rilisnya Java 10 Serta Fitur dan Peningkatan Yang Dibawanya

Dengan diumumkannya perilisan Java SE 10 (JDK 10) untuk umum di bulan Maret 2018 ini maka Oracle telah melakukan rilis cepat tahun ini. Karena kurang lebih 6 bulan sebelumnya mereka baru saja merilis Java 9.Dan ini sesuai dengan pernyataan mereka pada tahun lalu mengenai perilisan cepat.

Saat ini Oracle dengan perubahan yang di sebut dengan "siklus inovasi" akan melakukan panggilan untuk perilisan fitur dalam jangka waktu setiap 6 bulan, pembaruan rilis dalam setiap kwartal, dan juga dukungan jangka panjang (LTS) akan rilis setiap 3 tahun. Rencana berikutnya adalah Java 11, yang perilisannya direncanakan pada bulan September. Kemudian versi LTS berikutnnya setelah itu adalah Java 17, yang dijadwalkan akan dirilis pada bulan September, 2021.

Sementara itu wakil presiden Pengembangan Perangkat Lunak di Java Platform Group Oracle, Georges Saab, menyatakan bahwa Oracle telah berkomitmen untuk melakukan evolusi dengan cepat dengan memberikan inovasi baru pada platform Java.

Java 10 menjadi yang pertama dalam siklus rilis baru dari model lisensi Oracle. Ia juga menyatakan bahwa dengan kemudahan dan kesederhanaan perilisan ini, mereka sangat bangga dengan memperkenalkan fitur-fitur baru yang berguna, menghilangkan elemen yang tidak perlu dan lebih mudah digunakan bagi para developer.


java 10_fitur_peningkatan


Ini Yang Menjadi Dasar Oracle Menjalankan Siklus Inovasi

Perilisan fitur setiap 6 bulan dimaksudkan agar para developer dapat memanfaatkan fitur baru dalam produksi secepatnya. Siklus inovasi terinpirasi dari model rilis yang digunakan oleh platform lain dan oleh berbagai distribusi sistem operasi yang menangani lanskap pengembanagan aplikasi modern. Pengembangan aplikasi modern mengharapkan lisensi terbuka yang sederhana dan tenggang waktu yang dapat diprediksi. Oleh karena itu siklus inovasi ini diharapkan dapat memberikan apa yang dibutuhkan terkait hal tersebut.

Fitur dan Peningkatan Baru Pada Java 10

Java 10 hadir dengan 12 peningkatan tambahan baru yang didefinisikan melalui proses Proposal Peningkatan JDK (JEP), yang merupakan versi Oracle dari proses Permintaan Spesifikasi Java (JSR) dari JCP.


Peningkatan tersebut adalah:
  1. Inferensi Tipe Variabel Lokal: Meningkatkan bahasa Java untuk memperluas tipe inferensi  ke deklarasi variabel lokal dengan menggunakan initializers. Oleh karena itu, Java memperkenalkan var, yang merupakan sesuatu yang umum dan biasa digunakan dalam bahasa pemrograman lainnya.


  2. Menggabungkan berbagai repositori JDK forest ke dalam satu repositori (tunggal) untuk menyederhanakan dan merampingkan development.


  3. Garbage Collector Interface: Meningkatkan isolasi source code dari garbage collector berbeda dengan memperkenalkan interface garbage collector (GC) yang bersih.


  4. Full GC paralel untuk G1: Memperbaiki kasus latensi G1 terburuk dengan membuat  full GC paralel .


  5. Application Data-Class Sharing: Untuk meningkatkan startup dan footprint, JEP ini memperluas fitur Class-Data Sharing ("CDS") yang ada untuk memungkinkan kelas aplikasi ditempatkan dalam arsip bersama.


  6. Thread-Local Handshakes: Memperkenalkan cara melakukan callback pada thread tanpa harus melakukan safe point VM secara global. Membuatnya menjadi mungkin dan murah untuk menghentikan thread tunggal dan tidak hanya semua thread atau tidak satu pun.


  7. Menghapus tool Native-Header Generator, dengan menghapus javah tool dari JDK karena telah digantikan oleh keunggulan fungsionalitas di javac.


  8. Ekstensi tambahan pada Unicode Language-Tag: Peningkatkan pada java.util.Locale dan API terkait untuk mengimplementasikan ekstensi Unicode tambahan dari tag bahasa BCP 47.


  9. Alokasi Heap pada Perangkat Memori Alternatif: Ini memungkinkan HotSpot VM untuk mengalokasikan objek heap Java pada perangkat memori alternatif, seperti NV-DIMM, yang dapat ditentukan oleh pengguna.


  10. Mengaktifkan compiler JIT berbasis Java, Graal, untuk digunakan sebagai compiler JIT eksperimental pada platform Linux / x64.


  11. Root Certificate: Menyediakan secara default kumpulan dari root Certification Authority (CA) di JDK.


  12. Versi Rilis Berbasis Waktu: Merevisi skema versi-string dari Java SE Platform dan JDK, dan informasi versi terkait, untuk model rilis berbasis waktu saat ini dan masa yang akan datang.


Secara resmi, perilisan Java 10 bisa anda lihat pada pemberitahuan dari Oracle.

Memahami Checked dan Unchecked Exception Pada Program Java

Pada pembahasan mengenai tipe-tipe exceptions sudah dibahas sedikit pada bagian akhir mengenai topik ini. Namun, agar lebih jelas, pada kesempatan kali ini kembali di bahas lebih detail. Terdapat dua kategori exceptions dalam bahasa pemrograman Java, yaitu:
  • Checked 
  • Unchecked
Checked dan Unchecked Exception Program Java

A. Checked Exceptions

Checked exceptions merupakan exception yang diketahui pada saat compile time. Namun, ada juga exceptions yang dicek pada saat compile time, oleh karena itu mereka disebut dengan compile time exceptions.

Compile time error akan terjadi bila exceptions ini tidak ditangani dengan menggunakan blok try-catch atau dengan menggunakan keyword throws.

Jadi class manakah pada Java yang termasuk kedalam checked exceptions?

Semua subclass dari java.lang.Exception kecuali subclass dari RunTimeException adalah checked exceptions.

Contoh kode program di bawah ini melemparkan checked exception. Namun, tidak ditangani dengan baik. Maka compile time error akan terjadi.
Pernyataan pada line 5 di atas akan melemparkan ClassNotFoundException yang termasuk dalam checked exception pada saat compile time, misalkan seperti di bawah ini:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
                     Unhandled exception type ClassNotFoundException
                     at TestCheckedException.main(TestCheckedException.java:5)

Oleh karena itu, pernyataan ini harus berada dalam blok try-catch atau dalam deklarasi main method dengan keyword throws.


Berikut ini adalah contoh untuk menangani exception tersebut:

atau bisa juga dengan:


B. Unchecked Exceptions

Unchecked exception merupakan exception yang terjadi pada saat runtime. Pada saat compile time semuanya akan berjalan normal, namun ketika runtime maka akan terlempar exception ini. Oleh sebab itulah uncheked exceptions disebut juga dengan runtime exceptions.

Semua subclass dari calss Error dan RuntimeException adalah unchecked exceptions.

Compile time error tidak akan terjadi jika ada pernyataan dalam program yang melemparkan unchecked exception ini. meskipun anda tidak menanganinya dengan blok try-catch atau keyword throws. Bagaimanapun, program akan gagal ketika dijalankan walaupun akan sukses pada saat di compile.

Oleh karena itu, untuk mencegah program diberhentikan secara prematur ketika program Java anda dijalankan, maka anda harus menangani exception ini dengan baik.

Contoh:

Ketika program di atas di eksekusi, maka akan melemparkan NumberFormatException yang tidak ditangani dengan baik. Akibatnya adalah program akan terhenti dengan buruk.

Untuk mengatasinya, anda dapat menangani exception ini dengan menggunakan blok try-catch, seperti di bawah ini:

Itulah pembahasan mengenai checked dan unchecked exception pada program Java beserta dengan contoh sederhana yang mudah di pahami. Semoga bisa membantu anda untuk belajar Java.

5 Perbedaan Error dan Exception Pada Program Java Yang Harus Anda Ketahui

Pada pembahasan mengenai tipe-tipe exception anda sudah mengetahui bahwa class java.lang.Error dan java.lang.Exception merupakan subclass dari class java.lang.Throwable.

Meskipun demikian, ternyata terdapat perbedaan yang cukup signifikan diantara keduanya.

Class Error merepresentasikan kesalahan-kesalahan atau kegagalan yang terjadi karena lingkungan di mana aplikasi tersebut berjalan. Misalnya, jika memori JVM tidak mencukupi maka akan muncul OutOfMemoryError.

Perbedaan Error dan Exception Pada Program Java


Sementara itu, class Exception akan merepresentasikan exceptions yang terutama disebabkan kerena aplikasi  itu sendiri. Misalnya ClassCastException akan muncul ketika aplikasi mencoba untuk cast tipe class yang tidak kompatibel. Atau NullPointerException yang akan terjadi ketika aplikasi Java mencoba untuk mengakses objek null.

Penjelasan Perbedaan Error dan Exception


Berikut ini adalah perbedaan antara Error dan Exception:

  1. Error berhubungan dengan lingkungan di mana aplikasi berjalan sementara itu Exception berhubungan dengan aplikasi itu sendiri.


  2. Compiler tidak memiliki pengetahuan mengenai unchecked exception, termasuk Error dan semua subclass dari RunTimeException karena mereka tidak muncul pada saat runtime program. Compiler hanya memiliki pengetahuan untuk checked exception saja. Oleh karena itu, compiler akan tetap memaksa programmer untuk menyertakan blok try-catch bila ada pernyataan-pernyataan yang mungkin saja bisa melemparkan checked exceptions.


  3. Kategori Exception pada Java dibagi meenjadi dua, yaitu checked dan unchecked. Sementara itu, semua Error termasuk dari kategori unchecked saja. 


  4. Error tidak akan bisa ditangani oeh blok try-catch. Meskipun anda mencoba untuk menanganinya menggunakan blok try-catch tersebut, namun aplikasi anda tidak akan pulih ketika error tersebut terjadi. Kebalikannya, Exception dapat ditangani oleh blok try-catch sehingga dapat membuat program tetap berjalan norman jika exception ini muncul.



  5. Memulihkan Error adalah hal yang sangat tidak mungkin. Satu-satunya cara yang mungkin dilakukan adalah mengehentikan program. Di sisi lainnya, Exception dapat dipulihkan dengan menggunakan blok try-catch atau melemparkan exception kembali kepada caller

Itulah 5 perbedaan antara Error dan Exception pada bahasa pemrograman Java. Semoga bisa menambah pengetahuan anda ketika belajar Java.

Belajar Java Mendeklarasikan Exceptions

Pada pembahasan sebelumnya anda sudah mengetahui mengenai:
Sekarang, kita akan masuk lebih dalam lagi untuk mendiskusikan mengenai topik ini. Pada Java, model exception handling adalah berdasarkan dari 3 operasi, yaitu:
  1. Mendeklarasikan exception atau throws
  2. Melemparkan atau melontarkan exception atau throw
  3. Menangkap exception atau catch
Mendeklarasikan Exceptions


Ketiga model tersebut bisa dilihat pada gambaran seperti di bawah ini:

method_A() {
//Line 3 s/d 8 adalah menangkap exception
  try {
    memanggil method_B;
  }
  catch (Exception ex) {
    Proses exception;
  }
}

//Line 12 mendeklarasikan exception
method_B() throws Exception {
  if (suatu error terjadi) {
    throw new Exception();//Line 14 melemparkan objek Exception
  }
}

Untuk mendeklarasikan exception pada suatu method, maka gunakanlah keyword throws pada method header, seperti pada contoh di bawah ini:

public void method_B() throws IOException

Keyword throws itu menandakan bahwa method_B mungkin akan melemparkan IOException. Jika suatu method mungkin akan melemparkan lebih dari satu atau multiple exception, maka gunakan tanda koma setelah keyword throws tersebut.


Seperti berikut ini:

public void method_B()
  throws Exception_1, Exception_2, Exception_3, ..., Exception_N

Ada satu hal yang  perlu diperhatikan, yaitu ketika method tidak mendeklarasikan exceptions pada superclass, maka anda tidak bisa mengoverride untuk mendeklarasikan exception pada subclass.

Pada Java, pernyataan yang dieksekusi adalah milik dari method. Oleh karena itu interpreter akan memanggil method main untuk memulai mengeksekusi program.

Mendeklarasikan exception artinya setiap method harus menyatakan tipe-tipe checked exceptions yang mungkin terlempar .

Sedangkan untuk sytem error dan runtime error (unchecked exceptions) bisa terjadi pada setiap kode apapun. Oleh karena itu, Java tidak memerlukan anda untuk mendeklarasikannya secara eksplisit di dalam method.

Namun, setiap exception lainnya yang dilemparkan dari suatu method harus dideklarasikan secara eksplisit di dalam method header sehingga caller dari method diinformasikan mengenai exception tersebut.

Mengenal Tipe-tipe Exception Pada Java

Seperti sudah anda ketahui sbelumnya bahwa exception merupakan sebuah objek. Dan pada Java objek didefinisikan dari suatu class.

Jadi class apakah yang menghasilkan objek exception? Root class untuk exception adalah java.lang.Throwable.

Pada pembahasan sebelumnya anda sudah mengetahui mengenai ArithmeticException dan InputMismatchException. Apakah masih ada lagi tipe exception lainnya? Atau apakah anda bisa menetapkan sendiri class-class exception tersebut? Jawabannya adalah masih banyak lagi tipe lainnya dan anda bisa menetapkan sendiri class exception anda.

Tipe Exception Java


Pada Java API terdapat banyak sekali class-class exception yang sudah didefinisikan sebelumnya. Gambar di bawah ini menujukkan hirarki untuk ArithmeticException dan InputMismatchException.

hirarki exception Java


Nama-nama class seperti Error, Exception, dan RuntimeException agak membingungkan. Ketiga class tersebut adalah exceptions dan semua error terjadi pada saat runtime.

Semua exceptions dalam Java inherit secara langsung ataupun tidak langsung dari class Throwable. Anda dapat membuat sendiri class-class exceptions dengan membuat subclass dari class Exception.

Klasifikasi Class-class Exceptions

Class-class exceptions itu sendiri dapat diklasifikasikan menjadi 3 tipe, yaitu:
  • System error
  • Exceptions
  • Runtime exceptions
System error dilontarkan oleh JVM dan direpresentasikan pada class Error. Error class ini akan menjelaskan mengenai sistem error internal, meskipun hal ini jarang terjadi. Namun jika error ini terjadi maka tidak banyak yang bisa dilakukan selain memberitahu user dan menghentikan program dengan baik.

Beberapa subclass dari class Error adalah:
  • AnnotationFormatError
  • AssertionError
  • AWTError
  • CoderMalfunctionError
  • FactoryConfigurationError
  • FactoryConfigurationError
  • IOError, LinkageError
  • ServiceConfigurationError
  • ThreadDeath
  • TransformerFactoryConfigurationError
  • VirtualMachineError
Exceptions direpresentasikan dalam class Exception yang menggambarkan kesalahan yang disebabkan karena program anda sendiri dan oleh sebab eksternal. Namun, error ini dapat ditangkap dan ditangani oleh program anda.

Beberapa subclass dari class Exception diantaranya adalah:
  • IOException,
  • RuntimeException, 
  • TimeoutException
  • UnsupportedLookAndFeelException
  • XMLParseException
dan masih sangat banyak lagi yang lainnya.

Runtime exceptions direpresentasikan pada class RuntimeException yang menjelaskan mengenai kesalahan pada pemrograman seperti kesalahan casting, mengakses array out-of-bounds, dan juga error numerik. Runtime exceptions ini pada umumnya dilontarkan oleh JVM.

Beberapa subclass dari class RuntimeException  diantaranya adalah:
  • ClassCastException
  • EmptyStackException
  • EventException
  • IllegalArgumentException, 
  • IndexOutOfBoundsException
  • NullPointerException
dan lain sebagainya.

Unchecked dan Checked Exceptions

RuntimeException, Error, dan para subclassnya adalah termasuk unchecked exceptions. Sementara itu, exceptions lainnya disebut dengan checked exceptions yang artinya compiler akan memaksa programmer untuk memeriksa dan mengatasinya dengan blok try-catch atau mendeklarasikannya pada header method.



Di dalam kebanyakan kasus, unchecked exceptions mencerminkan logic error pada pemrograman yang tidak terpulihkan.

Misalnya NullPointerException akan muncul ketika anda mengakses objek melalui variabel referensi sebelum objek tersebut ditetapkan pada referensi tersebut. Atau contoh lainnya adalah IndexOutOfBoundsException yang muncul ketika anda mencoba untuk mengakses elemen array di luar dari indexnya.

Logic error ini harus dikoreksi di dalam program. Unchecked exceptions dapat terjadi di mana saja di dalam program. Oleh karena itu, untuk menghindari penggunaan blok try-catch yang tidak praktis, maka Java tidak memandatkan menulis kode untuk menangkap atau mendeklarasikan unchecked exceptions tersebut.

Checked exceptions digunakan dalam situasi di mana kegagalan harus diantisipasi. Salah satu alasan umum kegagalan adalah input dan output. File mungkin saja rusak dan koneksi jaringan mungkin gagal.

Sejumlah class-class exception inherit dari IOException, dan Anda harus menggunakan yang sesuai untuk melaporkan error-error yang Anda hadapi. Misalnya, ketika file yang seharusnya ada ternyata tidak ada, maka FileNotFoundException akan terlontar.

Terkadang perlu untuk menggunakan keputusan ketika membedakan antara checked dan unchecked exception. Misalkan ketika memanggil method Integer.parseInt (str) yang akan melontarkan unchecked  NumberFormatException saat str tidak mengandung integer yang valid. Di sisi lain, method Class.forName (str) akan melontarkan checked ClassNotFoundException bila str tidak mengandung nama kelas yang valid.

Apa bedanya dari kedua hal di atas?

Alasannya adalah menjadi sesuatu yang mungkin untuk memeriksa apakah sebuah string adalah integer sebelum memanggil Integer.parseInt, namun tidak mungkin untuk mengetahui apakah sebuah class dapat di load sampai Anda benar-benar mencoba untuk me-load-nya.

Java API menyediakan banyak kelas exception, seperti IOException, IllegalArgumentException, dan sebagainya. Anda harus menggunakan ini jika sesuai dengan keperluan.

Namun, jika tidak ada kelas exception standar yang sesuai untuk tujuan Anda, maka Anda dapat membuatnya sendiri dengan mewarisi atau extend dari class Exception, RuntimeException, atau class exception lainnya. Bila Anda melakukan hal tersebut, merupakan ide yang baik jika Anda memberikan konstruktor tanpa argumen dan konstruktor dengan string pesan.

Seperti contoh di bawah ini:


Mencegah Pewarisan (Extended) Dan Overriding Pada Class Dan Method

Anda mungkin sewaktu-waktu tidak ingin class yang anda buat bisa diwariskan pada class lainnya melalui inheritance. Dalam hal ini, anda bisa menggunakan modifier final untuk mengindikasikan bahwa suatu class adalah final dan tidak bisa menjadi class induk.



Contoh class final dari Java adalah Math, String, StringBuilder dan StringBuffer.

Sebagai contoh class di bawah ini tidak bisa diwariskan:

Selain itu, anda juga bisa membuat method menjadi final. Method yang ditetapkan sebagai final tidak bisa di overriden oleh subclassnya.


Sebagai contoh method hitungHarga di bawah ini adalah final dan tidak bisa di overriden:

Modifiers public, protected, private, static, abstract, dan final digunakan pada class dan juga pada anggota-anggota class seperti data dan method. Namun, final modifier dapat juga digunakan dalam variabel-variabel lokal dan juga pada suatu method. Suatu variabel lokal yang dideklarasikan sebagai final adalah suatu konstant di dalam suatu method.