Java Object Oriented Programming
Java Object Oriented Programming
Programming
Eko Kurniawan Khannedy
Eko Kurniawan Khannedy
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
Public Class
● Saat kita membuat public class, kita hanya bisa membuat 1 public class di 1 file java
● Selain itu, nama public class harus sama dengan nama file
Kode : Access Modifier (1)
Kode : Access Modifier (2)
Import
Import
● Import adalah kemampuan untuk menggunakan class yang berada di package yang
berbeda
● Syarat class yang bisa digunakan jika package nya berbeda adalah class yang harus
public
Kode : Import
Import Semua Package
● Jika kita ingin mengimport semua class di dalam sebuah package, kita bisa
menggunakan tanda *, misal
● import [Link].*
Default Import
● Secara default, semua class yang ada di package [Link] sudah auto import, jadi
kita tidak perlu melakukan import secara manual
● Contoh class String, Integer, Long, Boolean, dan lain-lain terdapat di package
[Link]. Oleh karena itu, kita tidak perlu meng-import nya secara manual
Abstract Class
Abstract Class
● Saat kita membuat class, kita bisa menjadikan sebuah class sebagai abstract class.
● Abstract class artinya, class tersebut tidak bisa dibuat sebagai object secara
langsung, hanya bisa diturunkan
● Untuk membuat sebuah class menjadi abstract, kita bisa menggunakan kata kunci
abstract sebelum kata kunci class
● Dengan demikian abstract class bisa kita gunakan sebagai kontrak untuk class child
Kode : Abstract Class
Kode : Membuat Abstract Class
Abstract Method
Abstract Method
● Saat kita membuat class yang abstract, kita bisa membuat abstract method juga di
dalam class abstract tersebut
● Saat kita membuat sebuah abstract method, kita tidak boleh membuat block method
untuk method tersebut
● Artinya, abstract method wajib di override di class child
● Abstract method tidak boleh memiliki access modifier private
Kode : Abstract Method
Kode : Menggunakan Abstract Method
Getter dan Setter
Encapsulation
● Encapsulation artinya memastikan data sensitif sebuah object tersembunyi dari
akses luar
● Hal ini bertujuan agar kita bisa menjaga agar data sebuah object tetap baik dan
valid
● Untuk mencapai ini, biasanya kita akan membuat semua field menggunakan access
modifier private, sehingga tidak bisa diakses atau diubah dari luar
● Agar bisa diubah, kita akan menyediakan method untuk mengubah dan
mendapatkan field tersebut
Getter dan Setter
● Di Java, proses encapsulation sudah dibuat standarisasinya, dimana kita bisa
menggunakan Getter dan Setter method.
● Getter adalah function yang dibuat untuk mengambil data field
● Setter ada function untuk mengubah data field
Getter dan Setter Method
● Sebanyak apapun hashCode dipanggil, untuk object yang sama, harus menghasilkan
data integer yang sama
● Jika ada 2 object yang sama jika dibandingkan menggunakan method equals, maka
nilai hashCode nya juga harus sama
● Tidak wajib hashCode berbeda jika method equals menghasilkan false, karena
memang keterbatasan jumlah integer sekitar 2 milyar
Kode : Override HashCode Method
Kode : Method [Link]()
Final Class
Final Class
● Sebelumnya kita pernah menggunakan kata kunci final di Java
● Jika digunakan di variable, maka variable tersebut tidak bisa berubah lagi datanya
● Final pun bisa digunakan di class, dimana jika kita menggunakan kata kunci final
sebelum class, maka kita menandakan bahwa class tersebut tidak bisa diwariskan
lagi
● Secara otomatis semua class child nya akan error
Kode : Final Class
Final Method
Final Method
● Kata kunci final juga bisa digunakan di Method
● Jika sebuah method kita tambahkan kata kunci final, maka artinya method tersebut
tidak bisa di override lagi di class child nya
● Ini sangat cocok jika kita ingin mengunci implementasi dari sebuah method agar
tidak bisa diubah lagi oleh class child nya
Kode : Final Method
Inner Class
Inner Class
● Di Java, kita bisa membuat class di dalam class, atau disebut dengan Inner Class
● Salah satu kasus kita membuat inner class biasanya ketika kita butuh membuat
beberapa class yang saling berhubungan, dimana sebuah class tidak bisa dibuat
tanpa class lain
● Misal kita perlu membuat class Employee, dimana membutuhkan class Company,
maka kita bisa membuat class Employee sebagai inner class Company
● Cara membuat inner class, cukup membuatnya di dalam blok class outer class nya
Kode : Inner Class
Kode : Membuat Object Inner Class
Mengakses Outer Class
● Keuntungan saat kita membuat inner class adalah, kemampuan untuk mengakses
outer class nya
● Inner class bisa membaca semua private member yang ada di outer class nya
● Untuk mengakses object outer class nya, kita bisa menggunakan nama class outer
nya diikuti dengan kata kunci this, misal [Link]
● Dan untuk mengakses super class outer class nya, kita bisa menggunakan nama
class outer nya diikuti dengan kata kunci super, misal [Link]
Kode : Mengakses Outer Class
Anonymous Class
Anonymous Class
● Anonymous class atau class tanpa nama.
● Adalah kemampuan mendeklarasikan class, sekaligus meng-instansiasi object-nya
secara langsung
● Anonymous class sebenarnya termasuk inner class, dimana outer class nya adalah
tempat dimana kita membuat anonymous class tersebut
● Anonymous class sangat cocok ketika kita berhadapan dengan kasus membuat
implementasi interface atau abstract class sederhana, tanpa harus membuat
implementasi class nya
Kode : Contoh Interface Sederhana
Kode : Contoh Anonymous Class
Static Keyword
Static Keyword
● Sebelumnya kita sudah sering melihat kata kunci static, namun belum pernah kita
bahas
● Dengan menggunakan kata kunci static, kita bisa membuat field, method atau class
bisa diakses langsung tanpa melalui object nya
● Perlu diingat, static hanya bisa mengakses static lainnya
Static Dapat Digunakan di
● Field, atau disebut class variable, artinya field tersebut bisa diakses langsung tanpa
membuat object terlebih dahulu
● Method, atau disebut class method, artinya method tersebut bisa diakses langsung
tanpa membuat object terlebih dahulu
● Block, static block akan otomatis dieksekusi ketika sebuah class di load
● Inner Class, artinya inner class tersebut bisa diakses secara langsung tanpa harus
membuat object outer class terlebih dahulu. Static pada inner class menyebabkan
kita tidak bisa mengakses lagi object outer class nya
Kode : Static Field
Kode : Static Method
Kode : Static Inner Class
Kode : Static Block
Kode : Memanggil Static Members
Kode : Static Import
Record Class
Java 14 - Experimental
● Fitur ini masih versi preview dan belum stabil di versi Java 14, namun kita sudah bisa
mencobanya
● Tapi perlu diingat, bahwa karena fitur ini masih experimental, artinya tidak ada
jaminan di versi Java mendatang, fitur ini akan tetap ada, bisa saja dihilangkan
Record Class
● Kadang kita sering membuat class, hanya untuk class yang berisikan data. Hanya
berisi getter, equals, hashCode, dan toString method
● Record class digunakan untuk mempermudah pembuatan jenis class tersebut
● Saat kita membuat record class, secara otomatis Java akan membuatkan getter,
equals, hashCode dan toString method secara otomatis, dan juga constructor secara
otomatis
● Saat membuat record class, secara otomatis kita akan meng-extends class
[Link], yang artinya kita tidak bisa extends class lain. Namun kita tetap
bisa meng-implement interface
Kode : Membuat Record Class
Kode : Menggunakan Record Class
Record Class Constructor
● Secara default, constructor di record class akan dibuat secara otomatis, sesuai
dengan definisi record class parameter
● Namun jika kita ingin melakukan sesuatu di constructor tersebut, kita bisa membuat
compact constructor, yaitu constructor tanpa tanda ()
● Selain itu, kita juga bisa melakukan constructor overloading, namun ada syaratnya,
yaitu constructor overloading nya harus tetap memanggil constructor utama yang
secara otomatis dibuatkan di record class
Kode : Record Class Constructor
Enum Class
Enum Class
● Saat kita membuat aplikasi, kadang kita akan bertemu dengan jenis-jenis data yang
nilainya terbatas
● Misal, gender, ada male dan female, atau tipe customer, ada standard, premium
atau vip, dan lain-lain
● Dalam kasus seperti ini, kita bisa menggunakan enum class, yaitu class yang
berisikan nilai terbatas yang sudah ditentukan
● Saat membuat enum class, secara otomatis dia akan meng-extends class
[Link], oleh karena itu class enum tidak bisa extends class lain, namun
masih tetap bisa implements interface.
Kode : Membuat Enum Class
Kode : Menggunakan Enum
Enum Members
● Sama seperti class biasanya, di class enum pun kita bisa menambahkan members
(field, method dan constructor)
● Khusus constructor, kita tidak bisa membuat public constructor, karena memang
tujuan enum bukan untuk di instansiasi secara bebas
Kode : Members di Enum
Kode : Konversi Enum ke String
Exception
Exception
● Saat kita membuat aplikasi, kita tidak akan terhindar dengan yang namanya error
● Di Java, error direpresentasikan dengan istilah exception, dan semua
direpresentasikan dalam bentuk class exception
● Kita bisa menggunakan class exception sendiri, atau menggunakan yang sudah
disediakan oleh Java
● Jika kita ingin membuat exception, maka kita harus membuat class yang extends
class Throwable atau turunan-turunannya
Kode : Membuat Class Exception
Membuat Exception
● Exception biasanya terjadi di method, ketika kita membuat exception di sebuah
method, maka method tersebut harus ditandai dengan kata kunci thrown diikuti
dengan class exception nya.
● Jika method tersebut bisa menimbulkan lebih dari satu jenis exception, kita bisa
menambah lebih dari satu class exception
● Di dalam kode program kita, untuk membuat exception kita cukup menggunakan
kata kunci throw, diikuti dengan object exception nya
Kode : Membuat Exception
Try Catch
● Saat kita memanggil sebuah function yang bisa menyebabkan exception, maka kita
wajib menggunakan try-catch expression di Java
● Ini gunanya agar kita bisa menangkap exception yang terjadi, karena jika tidak
ditangkap, lalu terjadi exception, maka secara otomatis program kita akan berhenti
● Cara menggunakan try-catch expression di java sangat mudah, di block try, kita
tinggal panggil method yang bisa menyebabkan exception, dan di block catch, kita
bisa melakukan sesuatu jiga terjadi exception
Kode : Try Catch
Kode : Multiple Try Catch (1)
Kode : Multiple Try Catch (2)
Finally Keyword
● Dalam try-catch, kita bisa menambahkan block finally
● Block finally ini adalah block dimana akan selalu dieksekusi baik terjadi exception
ataupun tidak
● Ini sangat cocok ketika kita ingin melakukan sesuatu, tidak peduli sukses ataupun
gagal, misal di block try kita ingin membaca file, di block catch kita akan tangkap
jika terjadi error, dan di block finally error ataupun sukses membaca file, kita wajib
menutup koneksi ke file tersebut, biar tidak menggantung di memory
Kode : Finally
Runtime Exception
Jenis Exception
Secara garis besar, di Java, exception dibagi menjadi 3 jenis
● Checked Exception, yaitu exception yang wajib di try catch, seperti yang sudah kita
bahas sebelumnya
● Runtime Exception, dan
● Error (yang akan kita bahas di materi selanjutnya)
Runtime Exception
● Runtime exception adalah jenis exception yang tidak wajib di tangkap
menggunakan try catch
● Kompiler Java tidak akan protes walaupun kita tidak menggunakan try catch ketika
kita memanggil method yang bisa menyebabkan runtime exception
● Untuk membuat class runtime exception, kita wajib mengextends class
RuntimeException
● Ada banyak di Java yang merupakan runtime exception, seperti NullPointerException,
IllegalArgumentException, dan lain-lain
Kode : Membuat Runtime Exception
Kode : Method Dengan Runtime
Exception
Kode : Tanpa Try Catch
Perlu Diperhatikan
● Walaupun runtime exception tidak wajib di try-catch, tapi ada baiknya kita tetap
melakukan try-catch
● Karena jika terjadi runtime exception, yang ditakutkan adalah program kita berhenti
Error
Error
● Error adalah jenis exception yang terakhir
● Error adalah sebuah class di Java, yang tidak direkomendasikan untuk di try-catch
● Biasanya error terjadi ketika ada masalah serius, dan sangat tidak direkomendasikan
untuk di try catch
● Artinya, direkomendasikan untuk mematikan aplikasi
● Contoh, misal jika diawal aplikasi kita tidak bisa terkoneksi ke database,
direkomendasikan untuk membuat exception jenis Error, dan menghentikan aplikasi
Kode : Membuat Error
Kode : Terjadi Error
StackTraceElement Class
StackTraceElement Class
● Throwable memiliki method yang bernama getStackTrace(), dimana menghasilkan
Array dari StackTraceElement object
● StackTraceElement berisikan informasi tentang, class, file bahkan baris lokasi
terjadinya error
● Class StackTraceElement ini sangat penting untuk menelusuri lokasi kejadian error
yang terjadi
● Cara yang paling mudah, kita bisa memanggil method printStackTrace() class
Throwable, untuk memprint ke console detail error StackTraceElement nya
Kode : StackTraceElement
Kode : Multiple StackTraceElement
Try with Resource
Try with Resource
● Di Java 7, terdapat fitur baru yang bernama try with resource
● Try with resource adalah sebuah mekanisme agar kita lebih mudah menggunakan
resource (yang wajib di close) dalam block try
● Jika kita ingin menggunakan fitur ini, kita wajib menggunakan interface
AutoCloseable
Kode : Manual Close Resource
Kode : Try with Resource
Annotation
Annotation
● Annotation adalah menambahkan metadata ke kode program yang kita buat
● Tidak semua orang membutuhkan Annotation, biasanya Annotation digunakan saat
kita ingin membuat library / framework
● Annotation sendiri bisa diakses menggunakan Reflection, yang akan kita bahas nanti
● Untuk membuat annotation, kita bisa menggunakan kata kunci @interface
● Annotation hanya bisa memiliki method dengan tipe data sederhana, dan bisa
memiliki default value
Attribute Annotation
Attribute Keterangan