Java OOP (Programmer Zaman Now
Java OOP (Programmer Zaman Now
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 eko.belajar.oop.data.*
Default Import
● Secara default, semua class yang ada di package java.lang sudah auto import, jadi kita tidak perlu
melakukan import secara manual
● Contoh class String, Integer, Long, Boolean, dan lain-lain terdapat di package java.lang. 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 Objects.hash()
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 Company.this
● Dan untuk mengakses super class outer class nya, kita bisa menggunakan nama class outer nya
diikuti dengan kata kunci super, misal Company.super
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 java.lang.Record, 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 java.lang.Enum, 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
● @Override, untuk menandai bahwa method yang meng-override method parent class nya
● @Deprecated, untuk menandai bahwa method tersebut tidak direkomendasikan lagi untuk
digunakan
● @FunctionalInterface, untuk menandai bahwa class tersebut bisa dibuat sebagai lambda
expression
● dan lain-lain
Reflection
Reflection
● Reflection adalah kemampuan melihat struktur aplikasi kita pada saat berjalan
● Reflection biasanya sangat berguna saat kita ingin membuat library ataupun framework, sehingga
bisa meng-otomatisasi pekerjaan
● Untuk mengakses reflection class dari sebuah object, kita bisa menggunakan method getClass()
atau NamaClass.class
Kode : Annotation di Field
Kode : Validasi Menggunakan Reflection
Perlu Diperhatikan
● Reflection adalah materi yang sangat panjang
● Oleh karena itu materi Java Reflection akan dibuatkan course terpisah
Materi Selanjutnya
Materi Selanjutnya
● Java Classes
● Java Generic
● Java Collection