☕ Java

"Write once, run anywhere". Bahasa OOP paling populer buat Android, backend, dan enterprise.

Pengenalan Java

Java adalah bahasa pemrograman berorientasi objek yang jalan di JVM - Java Virtual Machine. Makanya bisa jalan di Windows, Mac, Linux tanpa ubah kode.

File Java berekstensi .java harus di-compile jadi .class pake javac, baru dijalanin pake java.

💡 Java ≠ JavaScript. Beda banget. Namanya doang yang mirip karena marketing jaman dulu.
java
// File: Halo.java
public class Halo {
    public static void main(String[] args) {
        // Ini komentar satu baris

        /*
         * Ini komentar
         * multi-baris
         */
        System.out.println("Halo Dunia!");
    }
}
💡 Cara compile & run:
javac Halo.java
java Halo
📌 Bagian Penting: Nama file harus persis sama dengan nama class public di dalamnya (huruf besar-kecil juga harus sama). Kalau class-nya public class Halo, file wajib bernama Halo.java — bukan halo.java atau Hello.java.
🐞 Error Umum di Bagian Ini
error: class Halo is public, should be declared in a file named Halo.java
Terjadi karena nama file tidak cocok dengan nama class public di dalamnya.
Fix: ganti nama file jadi sama persis dengan nama class, termasuk huruf besar/kecilnya.
error: ';' expected
Lupa titik koma di akhir statement — ini error paling sering muncul buat pemula Java.
Fix: cek baris yang ditunjuk compiler (atau baris sebelumnya), tambahkan ; di akhir statement.

Struktur Dasar

Setiap program Java harus ada di dalam class. Nama file harus sama persis dengan nama class + .java

  • public class NamaClass — wadah utama program
  • public static void main(String[] args) — titik awal program jalan
  • System.out.println() — buat nampilin output
  • ; — setiap statement wajib diakhiri semicolon
java
public class Main {
    public static void main(String[] args) {
        System.out.println("Program Java pertamaku");
        System.out.print("Ini tanpa enter");
        System.out.println(" - ini nyambung");
    }
}
📌 Bagian Penting: main harus ditulis persis public static void main(String[] args) — kalau salah satu kata kuncinya hilang atau typo (misalnya lupa static), Java tidak akan tahu dari mana harus mulai menjalankan program.
🐞 Error Umum di Bagian Ini
Error: Main method not found in class Main
Signature method main tidak sesuai — bisa karena lupa static, salah huruf besar/kecil, atau parameter bukan String[] args.
Fix: pastikan tertulis persis public static void main(String[] args).

Variabel & Tipe Data

Java itu strongly typed. Tipe data harus dideklarasi dan gak bisa gonta-ganti.

  • int — bilangan bulat: 100, -25
  • double — desimal: 3.14, -0.5
  • char — satu karakter: 'A', '7'
  • String — teks: "Halo Java"
  • boolean — true / false
java
public class Variabel {
    public static void main(String[] args) {
        int umur = 21;
        double ipk = 3.75;
        char golongan = 'A';
        String nama = "Siti";
        boolean aktif = true;

        System.out.println("Nama: " + nama);
        System.out.println("Umur: " + umur + " tahun");
        System.out.println("IPK: " + ipk);
    }
}
📌 Bagian Penting: char pakai kutip satu ('A'), sedangkan String pakai kutip dua ("A") — keduanya beda tipe dan tidak bisa dicampur sembarangan.
🐞 Error Umum di Bagian Ini
error: incompatible types: String cannot be converted to char
Menulis char huruf = "A"; — pakai kutip dua padahal harusnya kutip satu untuk char.
Fix: ganti jadi char huruf = 'A'; dengan kutip satu.
error: variable umur might not have been initialized
Variabel dideklarasi (int umur;) tapi belum diisi nilai, lalu langsung dipakai.
Fix: beri nilai awal saat deklarasi, mis. int umur = 0;.
🔧 Perbaiki Kode Ini Sendiri

Kode di bawah ini error saat di-compile. Baca pesan errornya, lalu ketik ulang perbaikannya langsung di kotak edit (kode tidak bisa di-copy-paste dari luar — coba benerin pakai pemahamanmu sendiri).

error: incompatible types: String cannot be converted to char error: ';' expected
🚫 Copy-paste dinonaktifkan di kotak ini — ketik manual biar kamu benar-benar paham perbaikannya.
✅ Versi yang benar
public class Variabel { public static void main(String[] args) { char golongan = 'A'; System.out.println("Golongan: " + golongan); } }

Input & Output

Buat input pake Scanner. Import dulu dari java.util.Scanner

java
import java.util.Scanner;

public class InputOutput {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("Masukkan nama: ");
        String nama = input.nextLine(); // input string

        System.out.print("Masukkan umur: ");
        int umur = input.nextInt(); // input angka

        System.out.println("Halo " + nama + ", umur " + umur + " tahun");

        input.close(); // tutup scanner
    }
}
📌 Bagian Penting: Kalau habis nextInt() langsung mau pakai nextLine(), sering muncul masalah "input keskip". Ini karena nextInt() tidak ikut membaca karakter enter — solusinya tambahkan input.nextLine(); kosong sebagai "pembersih" sebelum nextLine() yang sesungguhnya.
🐞 Error Umum di Bagian Ini
Exception in thread "main" java.util.InputMismatchException
User mengetik teks padahal program menunggu angka lewat nextInt().
Fix: validasi input, atau pakai nextLine() lalu konversi manual dengan Integer.parseInt() dibungkus try-catch.
Exception in thread "main" java.util.NoSuchElementException: No line found
Memanggil nextLine()/nextInt() setelah Scanner sudah di-close().
Fix: pastikan input.close() dipanggil paling akhir, setelah semua input selesai dibaca.

Operator

Sama kayak C++: aritmatika, perbandingan, logika.

java
public class Operator {
    public static void main(String[] args) {
        int a = 15, b = 4;

        System.out.println("a + b = " + (a + b)); // 19
        System.out.println("a / b = " + (a / b)); // 3, bukan 3.75
        System.out.println("a % b = " + (a % b)); // 3

        System.out.println("a > b: " + (a > b)); // true

        boolean hasil = (a > 10) && (b < 10);
        System.out.println("a>10 AND b<10: " + hasil); // true
    }
}
📌 Bagian Penting: Pembagian antar int selalu dibulatkan ke bawah (integer division) — 15 / 4 hasilnya 3, bukan 3.75. Kalau butuh hasil desimal, minimal satu operand harus double, mis. 15.0 / 4.
🐞 Error Umum di Bagian Ini
(tidak error, tapi hasil salah) 15 / 4 menghasilkan 3, bukan 3.75
Ini bukan bug compiler — ini perilaku normal integer division di Java yang sering bikin pemula bingung.
Fix: ubah salah satu variabel jadi double, atau kalikan dulu dengan 1.0: (double) a / b.

Percabangan

if-else dan switch cara pakenya sama kayak bahasa lain.

java
import java.util.Scanner;

public class Percabangan {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Nilai: ");
        int nilai = input.nextInt();

        if (nilai >= 85) {
            System.out.println("Grade A");
        } else if (nilai >= 70) {
            System.out.println("Grade B");
        } else {
            System.out.println("Grade C");
        }

        // Switch
        int hari = 2;
        switch(hari) {
            case 1: System.out.println("Senin"); break;
            case 2: System.out.println("Selasa"); break;
            default: System.out.println("Hari lain");
        }
        input.close();
    }
}
📌 Bagian Penting: Jangan lupa break; di setiap case pada switch — kalau lupa, eksekusi akan "jatuh" (fall-through) ke case berikutnya walau kondisinya tidak cocok.
🐞 Error Umum di Bagian Ini
(tidak error, tapi output salah) muncul lebih dari satu case yang tercetak
Lupa menaruh break; di akhir sebuah case, jadi eksekusi lanjut ke case berikutnya (fall-through).
Fix: pastikan setiap case diakhiri break;, kecuali memang sengaja mau fall-through.
error: incompatible types: possible lossy conversion from double to int
Mencoba menyimpan hasil perhitungan double ke variabel bertipe int tanpa konversi eksplisit.
Fix: tambahkan casting manual, mis. int hasil = (int) nilaiDouble;.

Perulangan

for, while, do-while. Ada juga for-each buat array.

java
public class Perulangan {
    public static void main(String[] args) {
        // For
        System.out.print("For: ");
        for (int i = 1; i <= 5; i++) {
            System.out.print(i + " ");
        }

        // While
        System.out.print("\nWhile: ");
        int j = 1;
        while (j <= 5) {
            System.out.print(j + " ");
            j++;
        }

        // For-each
        int[] angka = {10, 20, 30};
        System.out.print("\nFor-each: ");
        for (int n : angka) {
            System.out.print(n + " ");
        }
    }
}
📌 Bagian Penting: Selalu pastikan variabel counter (mis. j di while) benar-benar berubah di dalam loop. Lupa j++; adalah penyebab paling umum program "hang"/tidak berhenti (infinite loop).
🐞 Error Umum di Bagian Ini
(program tidak error, tapi tidak pernah selesai — harus dipaksa berhenti)
Variabel kondisi di while tidak pernah di-update di dalam loop, jadi kondisinya selalu true.
Fix: pastikan ada baris yang mengubah variabel kondisi (mis. j++;) di dalam badan loop.

Method

Di Java namanya method, bukan fungsi. Harus ada di dalam class. Kalo mau dipanggil tanpa bikin objek, pake static.

java
public class Method {

    // Method static, bisa dipanggil langsung
    static void sapa(String nama) {
        System.out.println("Halo, " + nama);
    }

    // Method dengan return
    static int kuadrat(int x) {
        return x * x;
    }

    public static void main(String[] args) {
        sapa("Budi");
        int hasil = kuadrat(5);
        System.out.println("5 kuadrat = " + hasil);
    }
}
📌 Bagian Penting: Method yang punya tipe return (mis. int kuadrat(...)) wajib ada return di semua kemungkinan jalur eksekusinya — kalau ada satu jalur yang tidak return apa-apa, compiler akan error.
🐞 Error Umum di Bagian Ini
error: missing return statement
Method dideklarasikan punya return type (mis. int), tapi ada jalur kode (misal di dalam if tanpa else) yang tidak mengembalikan nilai.
Fix: pastikan setiap kemungkinan jalur di dalam method selalu berakhir dengan return.
error: non-static method sapa(String) cannot be referenced from a static context
Memanggil method non-static langsung dari main (yang static) tanpa membuat object dulu.
Fix: tambahkan static di method tersebut, atau buat object dari class-nya dulu sebelum memanggil method.

Array

Ukuran array di Java fixed. Index mulai dari 0. Pake .length buat tau ukurannya.

java
public class Array {
    public static void main(String[] args) {
        // Cara 1: langsung isi
        int[] nilai = {85, 90, 78, 92};

        // Cara 2: deklarasi ukuran dulu
        String[] nama = new String[3];
        nama[0] = "Andi";
        nama[1] = "Budi";
        nama[2] = "Citra";

        System.out.println("Jumlah data: " + nilai.length);
        System.out.println("Nilai pertama: " + nilai[0]);

        System.out.print("Semua nama: ");
        for (String n : nama) {
            System.out.print(n + " ");
        }
    }
}
📌 Bagian Penting: Index array Java mulai dari 0, dan index terakhir yang valid adalah panjang - 1. Mengakses index yang tidak ada akan langsung membuat program berhenti (crash) saat runtime, bukan error compile-time.
🐞 Error Umum di Bagian Ini
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
Array nama berisi 3 elemen (index 0, 1, 2), tapi kode mencoba mengakses nama[3] yang tidak ada.
Fix: ingat index terakhir selalu length - 1. Cek ulang batas perulangan atau index yang diakses.
🔧 Perbaiki Kode Ini Sendiri

Program di bawah crash saat dijalankan (bukan error compile). Baca pesan errornya, lalu ketik ulang perbaikannya di kotak edit (tidak bisa copy-paste).

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
🚫 Copy-paste dinonaktifkan di kotak ini — ketik manual biar kamu benar-benar paham perbaikannya.
✅ Versi yang benar
public class Array { public static void main(String[] args) { int[] nilai = {70, 80, 90}; for (int i = 0; i < nilai.length; i++) { System.out.println(nilai[i]); } } }

OOP Dasar

Java itu OOP. Semua kode ada di dalam class. Class = blueprint, Object = hasil jadi dari blueprint.

java
// Class Mahasiswa
class Mahasiswa {
    String nama;
    int nim;

    // Constructor
    Mahasiswa(String nama, int nim) {
        this.nama = nama;
        this.nim = nim;
    }

    // Method
    void perkenalan() {
        System.out.println("Halo, saya " + nama + " NIM " + nim);
    }
}

public class Main {
    public static void main(String[] args) {
        // Bikin object
        Mahasiswa mhs1 = new Mahasiswa("Dewi", 12345);
        mhs1.perkenalan();
    }
}
📌 Bagian Penting: this.nama merujuk ke attribute milik object, sedangkan nama (tanpa this) merujuk ke parameter constructor. Kalau nama parameter dan attribute sama persis, this wajib dipakai supaya tidak ambigu.
🐞 Error Umum di Bagian Ini
error: cannot find symbol — symbol: class mahasiswa
Java sensitif huruf besar/kecil — menulis mahasiswa padahal nama class-nya Mahasiswa.
Fix: samakan huruf besar/kecilnya persis dengan nama class yang dideklarasikan.
Exception in thread "main" java.lang.NullPointerException
Mencoba memakai object yang belum di- new (masih bernilai null).
Fix: pastikan object sudah dibuat dengan new NamaClass(...) sebelum method-nya dipanggil.

🚀 Mini Project: Sistem Nilai Mahasiswa

Gabungkan array, method, percabangan, dan OOP jadi satu program kecil yang menghitung nilai akhir beberapa mahasiswa sekaligus.

💡 Contoh Implementasi
java
class Mahasiswa {
    String nama;
    int[] nilaiTugas;

    Mahasiswa(String nama, int[] nilaiTugas) {
        this.nama = nama;
        this.nilaiTugas = nilaiTugas;
    }

    double rataRata() {
        int total = 0;
        for (int n : nilaiTugas) {
            total += n;
        }
        return (double) total / nilaiTugas.length;
    }

    String grade() {
        double rata = rataRata();
        if (rata >= 85) return "A";
        else if (rata >= 70) return "B";
        else return "C";
    }
}

public class SistemNilai {
    public static void main(String[] args) {
        Mahasiswa[] daftar = {
            new Mahasiswa("Andi", new int[]{80, 90, 85}),
            new Mahasiswa("Budi", new int[]{60, 65, 70}),
        };

        for (Mahasiswa m : daftar) {
            System.out.printf("%s: rata-rata %.1f, grade %s%n",
                m.nama, m.rataRata(), m.grade());
        }
    }
}
📌 Tantangan: Coba tambahkan mahasiswa ketiga, atau ubah grade() supaya punya kategori "D" untuk rata-rata di bawah 50.

✦ Coba Sendiri

Tulis kode Java di bawah, klik Run buat compile & jalanin. Support input via terminal.

Java Online Compiler Buka Tab Baru
💡 Compiler disediakan oleh Programiz. Nama class utama harus Main biar bisa jalan.
🎓

Selamat!

Telah menyelesaikan seluruh materi

Java Beginner — web-ngoding
🔄 Versi baru tersedia