cv.cm

Pemrograman · Bahasa pemrograman

Tutorial Java untuk pemula

6 menit baca

Jawaban singkat

Java adalah bahasa berorientasi objek dengan tipe statis yang dikompilasi menjadi bytecode dan berjalan di Java Virtual Machine (JVM) pada sistem operasi apa pun. Instal JDK, simpan class di Hello.java, lalu jalankan java Hello.java. Konsep intinya: class dan objek, tipe primitif dan reference, collections framework (List, Map, Set), checked exception, serta fitur baru seperti record, var, dan pattern matching.

Buka Penguji regex

Apa itu Java dan untuk apa dipakai

Java dirilis oleh Sun Microsystems pada 1995 dan kini dikembangkan di proyek terbuka OpenJDK, dengan Oracle sebagai pengelola utama. Janjinya adalah "write once, run anywhere": compiler menghasilkan bytecode, dan JVM menjalankannya di Windows, macOS, dan Linux. Java dipakai untuk back end bisnis berskala besar (sering dengan Spring Boot), aplikasi Android (berdampingan dengan Kotlin), tool big data seperti Apache Kafka dan Hadoop, serta banyak sistem desktop dan embedded. Versi baru rilis setiap enam bulan, dan versi long-term support (LTS) seperti Java 21 biasanya jadi pilihan untuk produksi.

Instal JDK dan jalankan Hello, world

Instal JDK (Java Development Kit), misalnya build OpenJDK seperti Eclipse Temurin atau JDK dari Oracle. Periksa dengan java -version. Setiap program Java berada di dalam class, dan eksekusi dimulai dari main.

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world");
    }
}
java Hello.java        # run a single source file directly
# Hello, world
javac Hello.java       # or compile to Hello.class first
java Hello

Nama file harus sama dengan nama class publik (Hello.java untuk class Hello).

Variabel dan tipe data dasar

Java memiliki delapan tipe primitif yang disimpan langsung sebagai nilai, dan tipe reference (objek seperti String dan array). Setiap variabel punya tipe tetap; var membuat compiler menyimpulkan tipe dari nilai awal di dalam method.

TipeUkuranContoh
int32-bitint n = 42;
long64-bitlong big = 10_000_000_000L;
doublefloat 64-bitdouble pi = 3.14159;
booleantrue/falseboolean ok = true;
charunit UTF-16 16-bitchar c = 'A';
byte, short, float8, 16, 32-bitJarang dipakai
StringreferenceString s = "hi";
int count = 7;
double avg = count / 2;          // 3.0, integer division happens first
double avg2 = count / 2.0;       // 3.5
var name = "Ada";                // inferred as String
String msg = name + " has " + count + " items";
System.out.println(msg);         // Ada has 7 items
System.out.println(Integer.parseInt("12") + 1); // 13

Ini hanya potongan kode: letakkan pernyataan seperti ini di dalam method seperti main.

Alur kontrol

int score = 72;
if (score >= 90) {
    System.out.println("A");
} else if (score >= 70) {
    System.out.println("B");     // B
} else {
    System.out.println("C");
}
for (int i = 0; i < 3; i++) {
    System.out.println(i);       // 0, 1, 2
}
String day = "SAT";
String kind = switch (day) {     // switch expression
    case "SAT", "SUN" -> "weekend";
    default -> "weekday";
};
System.out.println(kind);        // weekend

Java juga punya while, do/while, dan perulangan for (String s : list) yang disempurnakan untuk mengiterasi array dan collection.

Method, class, dan record

Class menggabungkan field (data) dan method (perilaku). Method static milik class itu sendiri; method lain dipanggil pada objek yang dibuat dengan new. record adalah cara singkat mendeklarasikan data class yang immutable: compiler membuatkan constructor, accessor, equals, hashCode, dan toString.

public class Shapes {
    static double square(double x) {
        return x * x;
    }
    static class Counter {
        private int value;
        void increment() { value++; }
        int get() { return value; }
    }
    record Point(int x, int y) {
        double distance() { return Math.sqrt(x * x + y * y); }
    }
    public static void main(String[] args) {
        System.out.println(square(4));        // 16.0
        Counter c = new Counter();
        c.increment();
        c.increment();
        System.out.println(c.get());          // 2
        Point p = new Point(3, 4);
        System.out.println(p + " " + p.distance()); // Point[x=3, y=4] 5.0
    }
}

Class dapat meng-extend satu parent class (extends) dan mengimplementasikan banyak interface (implements). Field biasanya private, dengan akses lewat method.

Collection: List, Map, dan Set

Collections framework di java.util menyediakan struktur data yang ukurannya dapat berubah. Collection menyimpan objek, jadi tipe primitif di-box otomatis (int menjadi Integer).

import java.util.*;
public class Collections101 {
    public static void main(String[] args) {
        List<Integer> nums = new ArrayList<>(List.of(3, 1, 2));
        nums.add(5);
        Collections.sort(nums);
        System.out.println(nums + " " + nums.get(0));  // [1, 2, 3, 5] 1
        Map<String, Integer> ages = new HashMap<>();
        ages.put("ann", 31);
        ages.put("bob", 25);
        System.out.println(ages.getOrDefault("zed", 0)); // 0
        Set<String> tags = new TreeSet<>(List.of("b", "a", "b"));
        System.out.println(tags);                        // [a, b]
        List<Integer> evensSquared = nums.stream()
            .filter(n -> n % 2 == 0)
            .map(n -> n * n)
            .toList();
        System.out.println(evensSquared);                // [4]
    }
}

Pernyataan terakhir memakai stream dan lambda, gaya fungsional untuk mengubah collection. List.of membuat list immutable; bungkus dengan new ArrayList<>(...) bila perlu mengubahnya.

Fitur khas: tipe statis, interface, dan pattern matching

Interface mendefinisikan kontrak yang bisa diimplementasikan banyak class, dan inilah dasar sebagian besar desain Java. Java modern menambahkan pattern matching: instanceof dan switch dapat menguji tipe dan mengikat variabel dalam satu langkah. Sealed interface (Java 17 ke atas) mendaftar semua implementasi yang diizinkan, sehingga compiler bisa memeriksa bahwa switch mencakup semua kasus.

public class Areas {
    sealed interface Shape permits Circle, Rect {}
    record Circle(double r) implements Shape {}
    record Rect(double w, double h) implements Shape {}
    static double area(Shape s) {
        return switch (s) {
            case Circle c -> Math.PI * c.r() * c.r();
            case Rect r -> r.w() * r.h();
        };
    }
    public static void main(String[] args) {
        System.out.println(area(new Rect(2, 3)));  // 6.0
    }
}

Pattern matching untuk switch seperti ini sudah standar di Java 21 LTS dan sesudahnya.

Exception

Error berupa exception. Checked exception (seperti IOException) harus ditangkap atau dideklarasikan dengan throws; unchecked exception (subclass dari RuntimeException, seperti NullPointerException) tidak wajib. try-with-resources menutup file dan koneksi secara otomatis.

import java.io.*;
import java.nio.file.*;
public class ReadFirst {
    static int parseAge(String text) {
        int age = Integer.parseInt(text);   // may throw NumberFormatException
        if (age < 0) throw new IllegalArgumentException("negative age");
        return age;
    }
    public static void main(String[] args) {
        try {
            System.out.println(parseAge("abc"));
        } catch (NumberFormatException e) {
            System.out.println("not a number");  // not a number
        }
        try (BufferedReader in = Files.newBufferedReader(Path.of("notes.txt"))) {
            System.out.println(in.readLine());
        } catch (IOException e) {
            System.out.println("cannot read: " + e.getMessage());
        }
    }
}

Program kecil yang lengkap: penghitung kata

import java.io.IOException;
import java.nio.file.*;
import java.util.*;
public class WordCount {
    public static void main(String[] args) throws IOException {
        if (args.length != 1) {
            System.err.println("usage: java WordCount.java FILE");
            System.exit(1);
        }
        String text = Files.readString(Path.of(args[0])).toLowerCase();
        Map<String, Integer> counts = new HashMap<>();
        for (String word : text.split("[^a-z']+")) {
            if (!word.isEmpty()) counts.merge(word, 1, Integer::sum);
        }
        counts.entrySet().stream()
            .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
            .limit(5)
            .forEach(e -> System.out.printf("%5d  %s%n", e.getValue(), e.getKey()));
    }
}

Jalankan dengan java WordCount.java notes.txt. Program ini mencetak lima kata paling sering muncul beserta jumlahnya.

Kesalahan umum pemula

  • Pembagian bilangan bulat: 5 / 2 adalah 2. Jadikan salah satu sisi double untuk mendapat 2.5.
  • NullPointerException karena memanggil method pada null. Periksa null, atau gunakan Optional untuk nilai yang mungkin tidak ada.
  • Mencoba mengubah list yang dibuat dengan List.of, yang melempar UnsupportedOperationException.
  • Lupa bahwa indeks array dan List dimulai dari 0, jadi elemen terakhir berada di length - 1.

Langkah selanjutnya

Ikuti jalur belajar di dev.java, situs developer Java resmi, dan siapkan dokumentasi Java SE API sebagai referensi. Pelajari build tool (Maven atau Gradle), unit testing dengan JUnit, lalu framework seperti Spring Boot untuk layanan web. Kotlin, yang juga berjalan di JVM, adalah bahasa lanjutan yang wajar.

FAQ

Apakah Java sulit dipelajari?

Java lebih bertele-tele daripada Python, karena Anda mendeklarasikan tipe dan menaruh kode di dalam class, tetapi aturannya konsisten dan compiler menjelaskan kesalahan sejak dini. Banyak universitas memakainya sebagai bahasa pertama.

Apa perbedaan JDK dan JVM?

JVM menjalankan bytecode hasil kompilasi. JDK adalah kit pengembangan lengkap: JVM ditambah compiler javac, pustaka standar, dan tool. Developer menginstal JDK.

Versi Java mana yang sebaiknya dipelajari?

Pelajari versi long-term support terkini, seperti Java 21 atau LTS yang lebih baru. Kode lama masih berjalan di JVM baru, jadi keahlian modern juga berlaku untuk proyek yang sudah ada.

Apakah Java sama dengan JavaScript?

Tidak. Meski namanya mirip, keduanya bahasa terpisah dengan sistem tipe, runtime, dan kegunaan yang berbeda.

Apakah Java masih dipakai?

Ya. Java tetap menjadi salah satu bahasa yang paling banyak dipakai untuk back end enterprise, Android, dan infrastruktur data.

Semua tutorial pemrograman