Python

β˜• Java untuk Pemula: Panduan Lengkap

Tutorial lengkap belajar Java dari nol β€” instalasi JDK, variabel, tipe data, OOP, inheritance, interface, exception handling, dan quiz interaktif dengan contoh kode praktis

1. Pengenalan Java

Java adalah bahasa pemrograman berorientasi objek yang dikembangkan oleh James Gosling di Sun Microsystems dan pertama kali dirilis pada tahun 1995. Java menggunakan prinsip "Write Once, Run Anywhere" (WORA), artinya kode Java bisa dijalankan di semua platform yang mendukung Java Virtual Machine (JVM).

Java digunakan secara luas dalam pengembangan aplikasi enterprise, Android mobile, big data, sistem embedded, dan masih banyak lagi. Hingga saat ini, Java tetap menjadi salah satu bahasa pemrograman paling populer di dunia.

Mengapa Memilih Java?

Keunggulan Penjelasan
Platform IndependentBisa dijalankan di mana saja selama ada JVM
Object-OrientedMendukung OOP sepenuhnya β€” encapsulation, inheritance, polymorphism
Multi-ThreadingBisa menjalankan banyak proses secara paralel
KeamananFitur keamanan bawaan seperti sandbox dan bytecode verifier
Stabil & MatureSudah 30+ tahun, digunakan oleh jutaan perusahaan di seluruh dunia
Ekosistem BesarSpring, Hibernate, Maven, Gradle, Android SDK, dan banyak lagi

Java vs Bahasa Lain

Aspek Java Python C++
TipeCompiled + InterpretedInterpretedCompiled
TypingStaticDynamicStatic
Sintaks🟑 Sedang-Verbose🟒 Sangat MudahπŸ”΄ Kompleks
Kecepatan🟒 Cepat🟑 Sedang🟒 Sangat Cepat
Cocok untukEnterprise, AndroidAI, Data, OtomasiSystem, Game
Diagram: Cara Kerja Java (Compile + Interpret)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   CARA KERJA JAVA                         β”‚
β”‚                                                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚  β”‚  .java   │───▢│  javac   │───▢│   .class (bytecode)  β”‚β”‚
β”‚  β”‚  Source   β”‚    β”‚ Compiler β”‚    β”‚   Platform-neutral   β”‚β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                              β”‚            β”‚
β”‚                                              β–Ό            β”‚
β”‚                                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚                                    β”‚       JVM        β”‚   β”‚
β”‚                                    β”‚  (Java Virtual   β”‚   β”‚
β”‚                                    β”‚   Machine)       β”‚   β”‚
β”‚                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                             β”‚             β”‚
β”‚                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚                        β–Ό                    β–Ό           β–Ό β”‚
β”‚                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”β”‚
β”‚                   β”‚ Windows β”‚        β”‚  Linux  β”‚ β”‚ macOSβ”‚β”‚
β”‚                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Instalasi JDK dan IDE

Untuk mulai memprogram Java, kamu perlu menginstal JDK (Java Development Kit) dan sebuah IDE (Integrated Development Environment).

Instalasi JDK di Windows

Windows
# 1. Kunjungi https://adoptium.net/ atau https://www.oracle.com/java/
# 2. Download JDK 21 (LTS terbaru)
# 3. Jalankan installer dan ikuti wizard
# 4. Setelah selesai, tambahkan ke PATH jika tidak otomatis

# Verifikasi instalasi di Command Prompt:
java --version
# Output: openjdk 21.0.3 2024-04-16

javac --version
# Output: javac 21.0.3

# Cek JAVA_HOME
echo %JAVA_HOME%
# Output: C:\Program Files\Java\jdk-21

Instalasi di macOS

macOS
# Gunakan Homebrew untuk instalasi mudah:
brew install openjdk@21

# Verifikasi:
java --version
javac --version

# Atau download dari https://adoptium.net/

Instalasi di Linux (Ubuntu/Debian)

Linux
# Update dan instal JDK
sudo apt update
sudo apt install openjdk-21-jdk -y

# Verifikasi
java --version
javac --version

# Set JAVA_HOME (opsional)
echo 'export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64' >> ~/.bashrc
source ~/.bashrc

Program Java Pertama

Java β€” HelloWorld.java
// File: HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Halo, Dunia!");
        System.out.println("Selamat datang di Java!");
        System.out.println("Nama saya: BeebaneLabs");
    }
}

// Kompilasi dan jalankan:
// javac HelloWorld.java
// java HelloWorld
//
// Output:
// Halo, Dunia!
// Selamat datang di Java!
// Nama saya: BeebaneLabs

IDE yang Direkomendasikan

IDE Kelebihan Cocok untuk
IntelliJ IDEAFitur lengkap, auto-complete canggih, refactoringDeveloper profesional
VS CodeRingan, gratis, banyak ekstensiPemula dan menengah
EclipseGratis, open source, plugin berlimpahEnterprise dan akademik
NetBeansMudah digunakan, bawaan OraclePemula
πŸ’‘ Tips

Untuk pemula, IntelliJ IDEA Community Edition (gratis) sangat direkomendasikan. IDE ini punya fitur smart code completion dan debugging yang sangat membantu saat belajar. Pastikan JDK sudah terinstal sebelum membuka IDE.

3. Variabel dan Tipe Data

Variabel di Java harus dideklarasikan dengan tipe data secara eksplisit karena Java menggunakan static typing. Setiap variabel harus ditentukan tipe datanya sebelum digunakan.

Deklarasi Variabel

Java β€” Variabel
public class ContohVariabel {
    public static void main(String[] args) {
        // Deklarasi dan inisialisasi variabel
        String nama = "Budi Santoso";   // String (class, huruf besar)
        int umur = 25;                   // integer
        double tinggi = 175.5;           // double (desimal)
        boolean isAktif = true;          // boolean
        char grade = 'A';               // karakter tunggal

        // Deklarasi tanpa inisialisasi
        int nilai;
        nilai = 100;  // inisialisasi belakangan

        // Final (konstanta) β€” tidak bisa diubah
        final double PI = 3.14159;
        final String KAMPUS = "Universitas Indonesia";

        // Menampilkan nilai
        System.out.println("Nama: " + nama);
        System.out.println("Umur: " + umur + " tahun");
        System.out.println("Tinggi: " + tinggi + " cm");
        System.out.println("Aktif: " + isAktif);
        System.out.println("Grade: " + grade);

        // Aturan penamaan variabel Java:
        // βœ… namaLengkap, umurPengguna, _private, jumlah2
        // ❌ 2angka, nama-lengkap, class, public (reserved words)
    }
}

Tipe Data Primitif

Tipe Ukuran Range Contoh
byte1 byte-128 s/d 127byte b = 100;
short2 byte-32,768 s/d 32,767short s = 30000;
int4 byte-2.1M s/d 2.1Mint x = 42;
long8 byteSangat besarlong l = 100000L;
float4 byteDesimal presisi tunggalfloat f = 3.14f;
double8 byteDesimal presisi gandadouble d = 3.14159;
char2 byteKarakter Unicodechar c = 'A';
boolean1 bittrue / falseboolean b = true;

Tipe Data Non-Primitif (Reference)

Java β€” Reference Types
public class TipeDataRef {
    public static void main(String[] args) {
        // String β€” kumpulan karakter
        String sapaan = "Selamat pagi";
        String nama = new String("Budi");

        // Array β€” kumpulan data dengan tipe sama
        int[] angka = {10, 20, 30, 40, 50};
        String[] namaOrang = {"Budi", "Ani", "Citra"};

        System.out.println(sapaan + ", " + nama + "!");
        System.out.println("Angka pertama: " + angka[0]);
        System.out.println("Jumlah elemen: " + angka.length);

        // Array 2D
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        System.out.println("Matrix[1][2]: " + matrix[1][2]); // 6

        // Konversi tipe data
        String angkaStr = "42";
        int angkaInt = Integer.parseInt(angkaStr);     // String β†’ int
        double angkaDbl = Double.parseDouble("3.14");  // String β†’ double
        String hasil = String.valueOf(100);             // int β†’ String

        System.out.println("Parsed: " + angkaInt);     // 42
        System.out.println("Double: " + angkaDbl);     // 3.14
    }
}

4. Operator

Java menyediakan berbagai jenis operator untuk memanipulasi data. Sintaksnya mirip dengan C/C++ sehingga jika sudah familiar dengan bahasa tersebut, kamu akan mudah beradaptasi.

Operator Aritmatika dan Perbandingan

Java β€” Operator
public class OperatorDemo {
    public static void main(String[] args) {
        int a = 15, b = 4;

        // Operator aritmatika
        System.out.println(a + b);   // 19 (penjumlahan)
        System.out.println(a - b);   // 11 (pengurangan)
        System.out.println(a * b);   // 60 (perkalian)
        System.out.println(a / b);   // 3  (pembagian bulat!)
        System.out.println(a % b);   // 3  (modulus/sisa bagi)

        // PERHATIAN: pembagian integer menghasilkan integer
        System.out.println(15 / 4);    // 3, bukan 3.75
        System.out.println(15.0 / 4);  // 3.75 (gunakan double)

        // Shortcut assignment
        int x = 10;
        x += 5;   // x = x + 5 β†’ 15
        x -= 3;   // x = x - 3 β†’ 12
        x *= 2;   // x = x * 2 β†’ 24

        // Increment / Decrement
        int y = 10;
        y++;        // y = 11
        y--;        // y = 10
        ++y;        // y = 11 (prefix β€” ambil nilai setelah)

        // Operator perbandingan β€” menghasilkan boolean
        System.out.println(a == b);   // false
        System.out.println(a != b);   // true
        System.out.println(a > b);    // true
        System.out.println(a <= b);   // false

        // Operator logika
        boolean aktif = true;
        boolean premium = false;
        System.out.println(aktif && premium);  // AND β€” false
        System.out.println(aktif || premium);  // OR β€” true
        System.out.println(!aktif);            // NOT β€” false

        // Ternary operator (if-else singkat)
        int umur = 20;
        String status = (umur >= 17) ? "Dewasa" : "Anak-anak";
        System.out.println(status);  // Dewasa
    }
}

5. Kontrol Alur

Kontrol alur menentukan jalannya eksekusi program. Java mendukung if-else, switch, for, while, do-while, dan enhanced for loop.

Java β€” Kontrol Alur
public class KontrolAlur {
    public static void main(String[] args) {
        // ===== IF-ELSE =====
        int nilai = 85;

        if (nilai >= 90) {
            System.out.println("Grade: A");
        } else if (nilai >= 80) {
            System.out.println("Grade: B");
        } else if (nilai >= 70) {
            System.out.println("Grade: C");
        } else {
            System.out.println("Grade: D (Tidak Lulus)");
        }

        // ===== SWITCH =====
        String hari = "Senin";

        switch (hari) {
            case "Senin":
            case "Selasa":
            case "Rabu":
            case "Kamis":
            case "Jumat":
                System.out.println("Hari kerja");
                break;
            case "Sabtu":
            case "Minggu":
                System.out.println("Hari libur");
                break;
            default:
                System.out.println("Hari tidak valid");
        }

        // Switch expression (Java 14+)
        String tipeHari = switch (hari) {
            case "Sabtu", "Minggu" -> "Libur";
            default -> "Kerja";
        };
        System.out.println(hari + " = " + tipeHari);

        // ===== FOR LOOP =====
        for (int i = 1; i <= 5; i++) {
            System.out.println("Iterasi ke-" + i);
        }

        // Enhanced for (for-each) β€” untuk array/collection
        String[] buah = {"Apel", "Mangga", "Jeruk", "Pisang"};
        for (String b : buah) {
            System.out.println("Buah: " + b);
        }

        // ===== WHILE =====
        int counter = 0;
        while (counter < 3) {
            System.out.println("Counter: " + counter);
            counter++;
        }

        // ===== DO-WHILE =====
        int angka = 5;
        do {
            System.out.println("Angka: " + angka);
            angka--;
        } while (angka > 0);

        // ===== BREAK & CONTINUE =====
        for (int i = 0; i < 10; i++) {
            if (i == 3) continue;  // skip angka 3
            if (i == 7) break;     // stop di angka 7
            System.out.println("i = " + i);
        }
        // Output: 0, 1, 2, 4, 5, 6
    }
}

6. OOP Dasar β€” Class dan Object

Object-Oriented Programming (OOP) adalah paradigma pemrograman yang menjadi fondasi Java. Empat pilar OOP: Encapsulation, Inheritance, Polymorphism, dan Abstraction.

Membuat Class dan Object

Java β€” Class & Object
// File: Mahasiswa.java
public class Mahasiswa {
    // Atribut (fields) β€” ENCAPSULATION dengan access modifier
    private String nama;
    private int umur;
    private String jurusan;
    private double ipk;

    // Constructor β€” dipanggil saat object dibuat
    public Mahasiswa(String nama, int umur, String jurusan) {
        this.nama = nama;
        this.umur = umur;
        this.jurusan = jurusan;
        this.ipk = 0.0;
    }

    // Constructor overload (dengan IPK)
    public Mahasiswa(String nama, int umur, String jurusan, double ipk) {
        this.nama = nama;
        this.umur = umur;
        this.jurusan = jurusan;
        this.ipk = ipk;
    }

    // Getter methods β€” ENCAPSULATION
    public String getNama() { return nama; }
    public int getUmur() { return umur; }
    public String getJurusan() { return jurusan; }
    public double getIpk() { return ipk; }

    // Setter methods
    public void setNama(String nama) { this.nama = nama; }
    public void setIpk(double ipk) {
        if (ipk >= 0.0 && ipk <= 4.0) {
            this.ipk = ipk;
        } else {
            System.out.println("IPK tidak valid!");
        }
    }

    // Method umum
    public String getStatus() {
        return ipk >= 2.75 ? "Lulus" : "Tidak Lulus";
    }

    public void tampilkanInfo() {
        System.out.println("=== Data Mahasiswa ===");
        System.out.println("Nama    : " + nama);
        System.out.println("Umur    : " + umur + " tahun");
        System.out.println("Jurusan : " + jurusan);
        System.out.println("IPK     : " + ipk);
        System.out.println("Status  : " + getStatus());
    }
}

// File: Main.java
public class Main {
    public static void main(String[] args) {
        // Membuat object dari class Mahasiswa
        Mahasiswa mhs1 = new Mahasiswa("Budi", 20, "Teknik Informatika");
        mhs1.setIpk(3.75);
        mhs1.tampilkanInfo();

        Mahasiswa mhs2 = new Mahasiswa("Ani", 21, "Sistem Informasi", 3.89);
        mhs2.tampilkanInfo();

        // Error β€” field private, tidak bisa diakses langsung
        // mhs1.nama = "Hacker";  // COMPILE ERROR!
    }
}
πŸ’‘ Tips

Encapsulation adalah konsep menyembunyikan detail internal class dari luar. Gunakan private untuk atribut dan berikan public getter/setter. Ini melindungi data dari perubahan yang tidak diinginkan.

7. Inheritance (Pewarisan)

Inheritance memungkinkan class anak mewarisi atribut dan method dari class parent. Ini menghindari duplikasi kode dan memungkinkan code reuse.

Java β€” Inheritance
// Class Parent (Superclass)
public class Hewan {
    protected String nama;
    protected String jenis;

    public Hewan(String nama, String jenis) {
        this.nama = nama;
        this.jenis = jenis;
    }

    public void makan() {
        System.out.println(nama + " sedang makan.");
    }

    public void bersuara() {
        System.out.println(nama + " mengeluarkan suara...");
    }

    public void info() {
        System.out.println("Nama: " + nama + ", Jenis: " + jenis);
    }
}

// Class Anak (Subclass) β€” extends parent
public class Kucing extends Hewan {
    private String warnaBulu;

    public Kucing(String nama, String warnaBulu) {
        super(nama, "Kucing");  // panggil constructor parent
        this.warnaBulu = warnaBulu;
    }

    // Override method parent β€” POLYMORPHISM
    @Override
    public void bersuara() {
        System.out.println(nama + " berkata: Meong! 🐱");
    }

    // Method khusus Kucing
    public void bermainBenang() {
        System.out.println(nama + " sedang bermain benang!");
    }

    @Override
    public void info() {
        super.info();  // panggil method parent
        System.out.println("Warna Bulu: " + warnaBulu);
    }
}

public class Anjing extends Hewan {
    private boolean terlatih;

    public Anjing(String nama, boolean terlatih) {
        super(nama, "Anjing");
        this.terlatih = terlatih;
    }

    @Override
    public void bersuara() {
        System.out.println(nama + " berkata: Guk guk! 🐢");
    }

    public void menggonggong() {
        if (terlatih) {
            System.out.println(nama + " menggonggong sesuai perintah!");
        } else {
            System.out.println(nama + " menggonggong liar!");
        }
    }
}

// Main class
public class MainHewan {
    public static void main(String[] args) {
        Kucing kucing = new Kucing("Kitty", "Putih");
        Anjing anjing = new Anjing("Buddy", true);

        kucing.info();
        kucing.bersuara();       // Meong! 🐱
        kucing.makan();          // diwarisi dari Hewan
        kucing.bermainBenang();

        anjing.info();
        anjing.bersuara();       // Guk guk! 🐢
        anjing.menggonggong();

        // Polymorphism β€” referensi parent, object child
        Hewan hewan1 = new Kucing("Tom", "Abu");
        Hewan hewan2 = new Anjing("Rex", true);

        hewan1.bersuara();  // Meong!
        hewan2.bersuara();  // Guk guk!
    }
}
Diagram: Hierarchy Inheritance
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚        Hewan            β”‚
β”‚  ─────────────────────  β”‚
β”‚  - nama: String         β”‚
β”‚  - jenis: String        β”‚
β”‚  + makan()              β”‚
β”‚  + bersuara()           β”‚
β”‚  + info()               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚ extends
    β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”
    β–Ό            β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Kucing β”‚  β”‚ Anjing β”‚
│────────│  │────────│
β”‚warnaBuluβ”‚  β”‚terlatihβ”‚
β”‚bermain  β”‚  β”‚gonggongβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜

8. Interface dan Abstract Class

Interface adalah kontrak yang mendefinisikan method-method yang HARUS diimplementasikan oleh class yang menggunakannya. Abstract class adalah class yang tidak bisa diinstansiasi langsung dan bisa memiliki method abstrak (tanpa body) dan konkret.

Java β€” Interface
// Interface β€” kontrak yang harus dipenuhi
public interface DapatBergerak {
    void bergerak();            // method abstrak (default)
    default void berhenti() {   // method default (Java 8+)
        System.out.println("Berhenti bergerak.");
    }
}

public interface DapatBerenang {
    void berenang();
}

// Class yang mengimplementasi interface
public class Orang implements DapatBergerak, DapatBerenang {
    private String nama;

    public Orang(String nama) {
        this.nama = nama;
    }

    @Override
    public void bergerak() {
        System.out.println(nama + " berjalan kaki.");
    }

    @Override
    public void berenang() {
        System.out.println(nama + " sedang berenang di kolam.");
    }
}

public class Ikan implements DapatBerenang {
    private String nama;

    public Ikan(String nama) {
        this.nama = nama;
    }

    @Override
    public void berenang() {
        System.out.println(nama + " berenang di laut.");
    }
}

Abstract Class

Java β€” Abstract Class
// Abstract class β€” tidak bisa diinstansiasi langsung
public abstract class BangunDatar {
    protected String nama;

    public BangunDatar(String nama) {
        this.nama = nama;
    }

    // Method abstrak β€” HARUS diimplementasi oleh subclass
    public abstract double hitungLuas();
    public abstract double hitungKeliling();

    // Method konkret β€” bisa langsung dipakai
    public void tampilkanInfo() {
        System.out.println("Bangun: " + nama);
        System.out.println("Luas: " + hitungLuas());
        System.out.println("Keliling: " + hitungKeliling());
    }
}

public class Lingkaran extends BangunDatar {
    private double jariJari;

    public Lingkaran(double jariJari) {
        super("Lingkaran");
        this.jariJari = jariJari;
    }

    @Override
    public double hitungLuas() {
        return Math.PI * jariJari * jariJari;
    }

    @Override
    public double hitungKeliling() {
        return 2 * Math.PI * jariJari;
    }
}

public class PersegiPanjang extends BangunDatar {
    private double panjang, lebar;

    public PersegiPanjang(double panjang, double lebar) {
        super("Persegi Panjang");
        this.panjang = panjang;
        this.lebar = lebar;
    }

    @Override
    public double hitungLuas() {
        return panjang * lebar;
    }

    @Override
    public double hitungKeliling() {
        return 2 * (panjang + lebar);
    }
}

// Main
public class MainBangun {
    public static void main(String[] args) {
        // Polymorphism dengan abstract class
        BangunDatar[] bangun = {
            new Lingkaran(7),
            new PersegiPanjang(10, 5)
        };

        for (BangunDatar b : bangun) {
            b.tampilkanInfo();
            System.out.println("---");
        }
    }
}
πŸ’‘ Interface vs Abstract Class

Interface = kontrak murni, semua method abstrak (kecuali default), bisa multiple inheritance. Abstract class = bisa punya atribut, method konkret, constructor, dan hanya single inheritance. Gunakan interface untuk kemampuan (capability), abstract class untuk hierarki.

9. Exception Handling

Exception adalah error yang terjadi saat runtime. Java menggunakan try-catch-finally untuk menangani exception secara elegan tanpa membuat program crash.

Java β€” Exception Handling
public class ExceptionDemo {
    public static void main(String[] args) {
        // ===== TRY-CATCH DASAR =====
        try {
            int hasil = 10 / 0;  // ArithmeticException!
            System.out.println("Hasil: " + hasil);
        } catch (ArithmeticException e) {
            System.out.println("Error: " + e.getMessage());
        }

        // ===== MULTIPLE CATCH =====
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[10]);  // IndexError!
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Index di luar batas!");
        } catch (Exception e) {
            System.out.println("Error umum: " + e.getMessage());
        } finally {
            System.out.println("Blok finally selalu dijalankan!");
        }

        // ===== CONTOH DENGAN INPUT =====
        try {
            String teks = "abc";
            int angka = Integer.parseInt(teks);  // NumberFormatException!
        } catch (NumberFormatException e) {
            System.out.println("'abc' bukan angka yang valid!");
        }

        // ===== CUSTOM EXCEPTION =====
        try {
            tarikTunai(100000, 150000);
        } catch (SaldoTidakCukupException e) {
            System.out.println("Error: " + e.getMessage());
            System.out.println("Kurang: Rp " + e.getKekurangan());
        }
    }

    // Method yang melempar exception (throws)
    public static void tarikTunai(int saldo, int jumlah)
            throws SaldoTidakCukupException {
        if (jumlah > saldo) {
            throw new SaldoTidakCukupException(saldo, jumlah);
        }
        System.out.println("Penarikan berhasil. Sisa: Rp " + (saldo - jumlah));
    }
}

// Custom Exception Class
public class SaldoTidakCukupException extends Exception {
    private int saldo;
    private int jumlah;

    public SaldoTidakCukupException(int saldo, int jumlah) {
        super("Saldo Rp " + saldo + " kurang dari Rp " + jumlah);
        this.saldo = saldo;
        this.jumlah = jumlah;
    }

    public int getKekurangan() {
        return jumlah - saldo;
    }
}

Hierarchy Exception di Java

Diagram: Exception Hierarchy
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Throwable        β”‚
β”‚  ───────────────────  β”‚
β”‚  + getMessage()      β”‚
β”‚  + printStackTrace() β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
      β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”
      β–Ό         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Error   β”‚  β”‚  Exception    β”‚
β”‚ (fatal,  β”‚  β”‚ (bisa ditanganiβ”‚
β”‚  jangan  β”‚  β”‚  dengan catch) β”‚
β”‚  catch)  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚          β”‚     β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”
β”‚ StackOverβ”‚     β–Ό         β–Ό
β”‚ flow     β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ OutOfMem β”‚ β”‚ Checkedβ”‚ β”‚  RuntimeException β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚(wajib  β”‚ β”‚  (Unchecked)      β”‚
             β”‚handle) β”‚ β”‚  - NullPointer    β”‚
             β”‚- IO    β”‚ β”‚  - ArrayIndex     β”‚
             β”‚- SQL   β”‚ β”‚  - NumberFormat   β”‚
             β”‚- File  β”‚ β”‚  - Arithmetic     β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

10. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Java:

Pertanyaan 1: Apa output dari kode berikut? System.out.println(15 / 4);

a) 3.75
b) 3
c) 4
d) Error

Pertanyaan 2: Keyword apa yang digunakan untuk pewarisan class di Java?

a) implements
b) extends
c) inherits
d) derives

Pertanyaan 3: Apa fungsi dari keyword final pada variabel?

a) Membuat variabel menjadi static
b) Membuat variabel tidak bisa diubah (konstanta)
c) Membuat variabel menjadi private
d) Membuat variabel nullable

Pertanyaan 4: Manakah yang BISA dilakukan oleh interface?

a) Memiliki constructor
b) Memiliki atribut instance (non-static)
c) Memiliki method default dengan body (Java 8+)
d) Diinstansiasi langsung dengan new

Pertanyaan 5: Blok mana yang SELALU dijalankan meskipun terjadi exception?

a) try
b) catch
c) finally
d) throws
πŸ” Zoom
100%
🎨 Tema