Pemrograman · Bahasa pemrograman
Tutorial Java untuk pemula
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.
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 HelloNama 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.
| Tipe | Ukuran | Contoh |
|---|---|---|
int | 32-bit | int n = 42; |
long | 64-bit | long big = 10_000_000_000L; |
double | float 64-bit | double pi = 3.14159; |
boolean | true/false | boolean ok = true; |
char | unit UTF-16 16-bit | char c = 'A'; |
byte, short, float | 8, 16, 32-bit | Jarang dipakai |
String | reference | String 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); // 13Ini 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); // weekendJava 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 / 2adalah2. Jadikan salah satu sisidoubleuntuk mendapat2.5. NullPointerExceptionkarena memanggil method padanull. Periksanull, atau gunakanOptionaluntuk nilai yang mungkin tidak ada.- Mencoba mengubah list yang dibuat dengan
List.of, yang melemparUnsupportedOperationException. - Lupa bahwa indeks array dan
Listdimulai dari 0, jadi elemen terakhir berada dilength - 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.