Java adalah bahasa pemrograman berorientasi objek yang berjalan di atas Java Virtual Machine (JVM). Pada Course ini, kita akan mempelajari Java secara bertahap mulai dari fondasi bahasa, object-oriented programming, collections, concurrency, hingga membangun aplikasi nyata siap produksi.
Bab 1 Pengenalan Java
Kenali Java, bahasa pemrograman berorientasi objek yang berjalan di atas JVM dan dipakai di banyak platform.
Buka → # Sejarah dan Ekosistem JavaTelusuri perjalanan Java sejak 1995 dan peta ekosistemnya: JDK, library, framework, dan komunitas.
Buka → # Java Platform: JDK, JRE, dan JVMPahami perbedaan JDK, JRE, dan JVM beserta peran masing-masing dalam siklus hidup program Java.
Buka → # Cara Kerja JavaIkuti perjalanan kode Java dari berkas sumber menjadi bytecode hingga dieksekusi oleh JVM.
Buka → # Java vs Bahasa Pemrograman LainBandingkan Java dengan Python, JavaScript, Go, dan C++ dari sisi tipemodel, eksekusi, dan ekosistem.
Buka → # Memilih Versi JavaPahami siklus rilis dan dukungan LTS Java agar bisa memilih versi yang tepat untuk proyek Anda.
Buka →Bab 2 Persiapan Lingkungan
Pasang JDK di Windows, macOS, dan Linux lalu verifikasi instalasinya melalui terminal.
Buka → # Konfigurasi Java Development KitKenali isi direktori JDK dan alat bawaannya seperti javac, java, jar, dan jshell.
Buka → # Konfigurasi Environment VariablesAtur JAVA_HOME dan PATH supaya perintah Java dapat dijalankan dari direktori mana pun.
Buka → # Menggunakan jshellGunakan jshell untuk bereksperimen dengan potongan kode Java tanpa membuat berkas lengkap.
Buka → # Menggunakan Java CompilerGunakan javac untuk mengompilasi berkas sumber menjadi bytecode dan pahami keluarannya.
Buka → # Menjalankan Program JavaJalankan program Java dalam berbagai cara: java klasik, single-file source launcher, dan jar.
Buka → # Memilih IDE dan EditorBandingkan IntelliJ IDEA, VS Code, dan Eclipse agar bisa memilih editor yang sesuai kebutuhan.
Buka → # Menggunakan IntelliJ IDEAKenali alur kerja IntelliJ IDEA: membuat proyek, menjalankan kode, dan fitur bantu produktivitas.
Buka → # Menggunakan VS CodeSiapkan VS Code dengan Extension Pack for Java dan pahami alur kerja edit-compile-run.
Buka → # Menggunakan EclipseKenali workspace, perspective, dan alur kerja pengembangan Java di Eclipse IDE.
Buka → # Struktur Proyek JavaPahami tata letak standar proyek Java: source sets, packages, resources, dan berkas build.
Buka →Bab 3 Dasar Pemrograman
Tulis, kompilasi, dan jalankan program Hello World pertama Anda dengan javac dan java.
Buka → # Struktur Program JavaBedah anatomi program Java mulai dari deklarasi package, class, hingga isi method.
Buka → # Class dan main MethodPahami peran class sebagai wadah kode dan method main sebagai pintu masuk program Java.
Buka → # Komentar dan Documentation CommentsTulis komentar baris, blok, dan Javadoc agar kode mudah dipahami dan didokumentasikan.
Buka → # Statement dan ExpressionBedakan statement yang melakukan aksi dari expression yang menghasilkan nilai.
Buka → # Identifier dan KeywordsKenali aturan penamaan identifier dan daftar kata kunci yang dicadangkan Java.
Buka → # Aturan PenamaanTerapkan konvensi penamaan Java untuk class, method, variabel, konstanta, dan package.
Buka → # Compile Time vs RuntimePahami perbedaan kesalahan yang terdeteksi saat kompilasi dan saat program berjalan.
Buka → # Membaca Pesan ErrorPelajari cara membaca pesan error javac dan stack trace runtime dengan tenang dan sistematis.
Buka →Bab 4 Variabel dan Tipe Data
Pelajari cara membuat, memberi nilai, dan menggunakan variabel dalam program Java.
Buka → # Primitive Data TypesKenali delapan tipe primitive Java beserta rentang nilai dan ukuran memorinya.
Buka → # Reference TypesPahami perbedaan variabel reference yang menunjuk objek dari variabel primitive.
Buka → # Deklarasi dan InisialisasiPelajari berbagai bentuk deklarasi dan inisialisasi variabel, termasuk deklarasi banyak variabel sekaligus.
Buka → # Type Inference dengan varGunakan var untuk deklarasi variabel lokal yang ringkas tanpa kehilangan keamanan tipe.
Buka → # Konstanta dengan finalCiptakan nilai yang tidak dapat diubah dengan variabel final dan konstanta static final.
Buka → # Type ConversionPahami konversi tipe otomatis (widening) dari tipe kecil ke tipe yang lebih besar.
Buka → # Type CastingLakukan konversi tipe eksplisit (narrowing) dan pahami risiko kehilangan datanya.
Buka → # Numeric PromotionIkuti aturan promosi numerik Java ketika tipe berbeda terlibat dalam satu operasi.
Buka → # Integer OverflowAmati apa yang terjadi saat nilai integer melewati batas dan cara mengatasinya dengan Math.addExact.
Buka → # Floating-Point PrecisionPahami keterbatasan presisi floating-point IEEE 754 dan cara membandingkannya dengan benar.
Buka → # Wrapper ClassesKenali class pembungkus untuk tipe primitive dan perannya di dunia berorientasi objek.
Buka → # Autoboxing dan UnboxingPelajari konversi otomatis antara tipe primitive dan wrapper beserta jebakannya.
Buka → # Scope dan LifetimePahami di mana sebuah variabel dapat diakses dan berapa lama variabel tersebut hidup.
Buka →Bab 5 Operator
Gunakan operator aritmetika Java untuk perhitungan dasar, pembagian, dan modulus.
Buka → # Assignment OperatorsPelajari operator assignment dasar dan bentuk gabungannya seperti += dan -=
Buka → # Comparison OperatorsBandingkan nilai dengan operator relasional dan pahami perilakunya pada tipe berbeda.
Buka → # Logical OperatorsKombinasikan kondisi boolean dengan operator logika AND, OR, dan NOT.
Buka → # Bitwise OperatorsOperasikan bilangan pada tingkat bit dengan operator AND, OR, XOR, dan NOT.
Buka → # Shift OperatorsGeser bit bilangan dengan operator shift kiri, kanan berkategori, dan kanan tak berkategori.
Buka → # Unary OperatorsPelajari operator unary: negasi, increment, decrement, dan complement bit.
Buka → # Ternary OperatorTulis percabangan ringkas satu baris dengan operator ternary dan kenali batas keterbacaannya.
Buka → # instanceof OperatorPeriksa tipe objek saat runtime dengan instanceof, termasuk pattern matching versi modern.
Buka → # Operator PrecedencePahami urutan pengerjaan operator dan gunakan tanda kurung untuk kontrol eksplisit.
Buka → # Short-Circuit EvaluationManfaatkan evaluasi hubung singkat && dan || untuk menghindari operasi yang tidak perlu.
Buka →Bab 6 Input, Output, dan Formatting
Baca input pengguna bertipe apa pun dari terminal menggunakan class Scanner.
Buka → # Membaca Input dengan BufferedReaderBaca baris teks secara efisien dengan BufferedReader dan konversi ke tipe yang dibutuhkan.
Buka → # Mencetak OutputTampilkan output ke terminal dengan print, println, dan pemahaman escape sequence.
Buka → # String FormattingBangun string terformat dengan String.format dan format specifier yang umum dipakai.
Buka → # Formatted OutputKendalikan lebar, presisi, dan perataan output dengan System.out.printf.
Buka → # Locale dan Format AngkaFormat angka dan tanggal sesuai Locale agar pemisah desimal dan ribuan sesuai harapan.
Buka → # Membaca Argumen Command LineTerima parameter saat program dijalankan melalui array args pada method main.
Buka → # Console InputGunakan class Console untuk membaca input, termasuk kata sandi yang tidak ditampilkan.
Buka →Bab 7 Struktur Kontrol
Arahkan alur program berdasarkan kondisi dengan struktur if, else if, dan else.
Buka → # Nested ifSusun percabangan bertingkat dan pelajari cara menjaga keterbacaannya.
Buka → # switch StatementPilih satu dari banyak cabang dengan switch statement dan kenali fall-through.
Buka → # switch ExpressionGunakan switch modern yang menghasilkan nilai dengan arrow label dan exhaustiveness check.
Buka → # for LoopUlangi blok kode secara terkontrol dengan init, kondisi, dan update dalam satu baris.
Buka → # Enhanced for LoopIterasi seluruh elemen array dan collection tanpa mengelola indeks secara manual.
Buka → # while LoopUlangi eksekusi selama kondisi terpenuhi dan hindari perulangan tak berujung.
Buka → # do-while LoopJalankan blok minimal sekali sebelum kondisi diperiksa dengan do-while.
Buka → # break dan continueHentikan perulangan lebih awal atau lompati satu iterasi dengan break dan continue.
Buka → # Labeled break dan continueKendalikan perulangan bertingkat dari dalam loop terdalam menggunakan label.
Buka → # Nested LoopsBangun perulangan bersarang untuk pola dua dimensi seperti tabel dan matriks.
Buka → # Control Flow AnalysisPahami definitve assignment dan cara compiler menelusuri semua jalur eksekusi.
Buka →Bab 8 Method dan Modularitas
Definisikan method dengan parameter dan return value agar kode dapat dipakai ulang.
Buka → # Parameter dan ArgumentBedakan parameter pada deklarasi method dari argument yang diberikan pemanggil.
Buka → # Return ValuesKembalikan hasil perhitungan dari method dan pahami aturan return pada tiap jalur.
Buka → # Method OverloadingSediakan beberapa versi method bernama sama dengan daftar parameter berbeda.
Buka → # Pass by ValueBuktikan bahwa Java mengirim salinan nilai argument, termasuk untuk reference objek.
Buka → # VarargsTerima jumlah argument yang fleksibel dengan parameter varargs dan kenali batasannya.
Buka → # Recursive MethodsSelesaikan masalah yang dapat dipecah menjadi submasalah lebih kecil dengan rekursi.
Buka → # Static vs Instance MethodBedakan method milik class dari method milik objek dan kapan memakai keduanya.
Buka → # Method ScopePahami visibilitas variabel lokal, parameter, dan variabel dalam blok method.
Buka → # Pure FunctionsTulis method tanpa side effect agar mudah diuji dan diprediksi.
Buka → # Memecah Program menjadi MethodLatih merombak program monolitik menjadi method kecil yang fokus dan teruji.
Buka →Bab 9 Array dan String
Simpan kumpulan nilai berurutan dalam array dan akses elemennya lewat indeks.
Buka → # Array MultidimensiBangun struktur data berbentuk tabel dengan array dua dimensi dan lebih.
Buka → # Array InitializationIsi array saat deklarasi dengan array initializer dan default value elemennya.
Buka → # Array CopyingSalin array dengan cara manual, System.arraycopy, dan Arrays.copyOf.
Buka → # Array UtilitiesManfaatkan class Arrays untuk mengisi, membandingkan, mengurutkan, dan mencetak array.
Buka → # Array of ObjectsSimpan referensi objek dalam array dan pahami nilai default elemennya.
Buka → # String FundamentalsPelajari dasar pembuatan dan penggabungan String di Java.
Buka → # String ImmutabilityPahami mengapa String tidak dapat diubah dan apa akibatnya bagi konkatenasi.
Buka → # String PoolKenali string pool dan interning yang membuat Java menghemat memori String.
Buka → # String ComparisonBandingkan String dengan benar menggunakan equals alih-alih operator ==.
Buka → # String MethodsKuasai method String yang sering dipakai: length, charAt, substring, indexOf, dan split.
Buka → # StringBuilderRangkai teks secara efisien dalam perulangan dengan StringBuilder.
Buka → # StringBufferKenali StringBuffer versi thread-safe dan kapan StringBuilder lebih tepat.
Buka → # Text BlocksTulis string multi-baris yang rapi dengan text blocks tiga tanda kutip.
Buka → # Regular ExpressionsCocokkan pola teks dengan regex dan class Pattern serta Matcher.
Buka → # Manipulasi TeksTerapkan transformasi teks sehari-hari: trim, replace, join, dan format ulang.
Buka →Bab 10 Object-Oriented Programming
Pahami empat pilar OOP dan bagaimana Java menerapkannya dalam desain program.
Buka → # Class dan ObjectDefinisikan class sebagai cetak biru dan wujudkan object dari class tersebut.
Buka → # Fields dan MethodsSimpan data pada fields dan tambahkan perilaku melalui methods.
Buka → # ConstructorsInisialisasi object dengan constructor dan atur kondisi awal yang valid.
Buka → # Constructor OverloadingSediakan beberapa bentuk constructor dan rangkai dengan this().
Buka → # Keyword thisRujuk object aktif dari dalam method dengan this dan bedakan dari parameter.
Buka → # EncapsulationSembunyikan data di balik method akses dan lindungi invarian internal objek.
Buka → # Access ModifiersKendalikan visibilitas member dengan public, private, protected, dan package-private.
Buka → # Static MembersPelajari member milik class yang dibagikan semua object dan jebakan shared state.
Buka → # InheritanceWarisi field dan method dari superclass dan bangun hierarki class yang bermakna.
Buka → # Keyword superAkses member superclass dan rangkai constructor induk dengan super().
Buka → # Method OverridingUbah perilaku method warisan dengan @Override dan aturan kovariansi return.
Buka → # PolymorphismPanggil method yang sama pada tipe berbeda dan pahami dynamic method dispatch.
Buka → # Abstract ClassesDefinisikan kontrak parsial dengan abstract class dan method abstraknya.
Buka → # InterfacesRumuskan kontrak perilaku murni dengan interface dan implementasikan di class.
Buka → # Default dan Static Interface MethodsTambahkan implementasi bawaan pada interface tanpa merusak class lama.
Buka → # Composition vs InheritancePilih komposisi saat pewarisan memaksa coupling yang tidak perlu.
Buka → # Association, Aggregation, dan CompositionBedakan tiga bentuk hubungan antar objek dan implikasinya bagi kepemilikan.
Buka → # Object LifecycleIkuti perjalanan objek dari penciptaan, penggunaan, hingga menjadi eligible untuk GC.
Buka → # Object EqualityBedakan kesamaan identitas (==) dari kesamaan nilai logis lewat equals.
Buka → # hashCode dan equalsImplementasikan pasangan hashCode/equals dengan benar agar collection berperilaku tepat.
Buka → # Object CloningSalin objek dengan clone(), copy constructor, dan salin manual yang aman.
Buka → # ImmutabilityRancang class yang tidak dapat diubah dan nikmati keamanannya di concurrency.
Buka → # RecordsBuat pembawa data ringkas dengan records beserta compact constructor.
Buka → # Sealed ClassesBatasi hierarki pewarisan dengan sealed classes dan permits.
Buka → # Prinsip Desain OOPTerapkan prinsip desain berorientasi objek agar class mudah dirawat dan diperluas.
Buka →Bab 11 Packages dan Modules
Kelompokkan class ke dalam package dan pahami pengaruhnya pada struktur direktori.
Buka → # Import StatementsRujuk class dari package lain dengan import biasa, import statik penuh, dan nama memenuhi.
Buka → # Package Naming ConventionsIkuti konvensi penamaan package berbasis domain terbalik agar unik dan teratur.
Buka → # Access Control AntarpaketKombinasikan access modifier dengan package untuk membentuk API publik yang bersih.
Buka → # Static ImportImpor member static agar kode matematis dan konstanta lebih ringkas dibaca.
Buka → # JAR FilesBungkus class dan resources menjadi satu berkas JAR dan jalankan dengan classpath.
Buka → # Module SystemKenali Java Platform Module System dan masalah classpath yang diselesaikannya.
Buka → # Module DescriptorsTulis module-info.java dan pahami arti setiap direktif di dalamnya.
Buka → # requires dan exportsNyatakan dependency antarmodule dan ekspor package yang menjadi API publik.
Buka → # Services dan ProvidersCopot implementasi dari kontrak dengan ServiceLoader dan provides/uses.
Buka → # Classpath vs Module PathBedakan dua mode pemuatan class di JVM dan implikasi transisinya.
Buka → # Membuat Library JavaRangkai package, jar, dan module menjadi library yang siap dipakai pihak lain.
Buka →Bab 12 Exception Handling
Pahami gagasan exception sebagai mekanisme melaporkan kegagalan tanpa menghentikan program secara tiba-tiba.
Buka → # Exception HierarchyPetakan hierarki Throwable dari Error, Exception, hingga RuntimeException.
Buka → # try-catchTangkap dan tangani exception dengan blok try-catch agar program tetap terkendali.
Buka → # Multiple catchTangani beberapa jenis exception dengan blok catch berurutan dan multi-catch.
Buka → # Blok finallyPastikan pembersihan selalu berjalan dengan blok finally.
Buka → # try-with-resourcesTutup resource secara otomatis dengan try-with-resources dan interface AutoCloseable.
Buka → # Checked vs Unchecked ExceptionsBedakan exception yang wajib ditangani compiler dari yang muncul saat runtime.
Buka → # throw dan throwsLempar exception dengan throw dan nyatakan kemungkinan kegagalan dengan throws.
Buka → # Custom ExceptionsCiptakan jenis exception sendiri yang menyampaikan kegagalan domain secara jelas.
Buka → # Exception ChainingPertahankan akar masalah dengan exception chaining saat membungkus exception.
Buka → # Exception PropagationIkuti perjalanan exception naik dari method ke pemanggil hingga ditangani.
Buka → # Suppressed ExceptionsPahami exception yang tertindih saat penutupan resource dan cara membacanya.
Buka → # Error vs ExceptionBedakan Error untuk kegagalan sistem dari Exception untuk kegagalan program.
Buka → # Strategi Exception HandlingPilih strategi menangani, membungkus, atau meneruskan exception secara sadar.
Buka →Bab 13 Collections Framework
Petakan hierarki interface Collection dan Map beserta implementasi utamanya.
Buka → # List InterfaceKenali kontrak List yang berurutan dan berindeks sebelum memilih implementasinya.
Buka → # ArrayListGunakan ArrayList sebagai list berbasis array yang serba bisa dan cepat diakses.
Buka → # LinkedListPelajari LinkedList berbasis node dan skenario yang menguntungkannya.
Buka → # Set InterfaceKenali kontrak Set yang menolak duplikat dan konsekuensi equals/hashCode.
Buka → # HashSetSimpan elemen unik dengan hashing dan pahami urutan iterasinya.
Buka → # LinkedHashSetPertahankan urutan penyisipan dalam Set dengan LinkedHashSet.
Buka → # TreeSetJaga elemen terurut dengan TreeSet dan interface NavigableSet.
Buka → # Queue InterfaceKenali antrian FIFO dan operasi khasnya pada interface Queue.
Buka → # Deque InterfaceKelola antrian dua arah dengan Deque untuk stack maupun queue.
Buka → # PriorityQueueLayani elemen berdasarkan prioritas dengan heap berbasis PriorityQueue.
Buka → # Map InterfaceKenali kontrak pemetaan key ke value dan method utamanya.
Buka → # HashMapGunakan HashMap untuk pencarian cepat berbasis hash.
Buka → # LinkedHashMapPertahankan urutan penyisipan dan bangun cache sederhana dengan LinkedHashMap.
Buka → # TreeMapSusun key secara terurut dan lakukan pencarian rentang dengan TreeMap.
Buka → # HashtableKenali Hashtable versi lawas, perbedaannya dari HashMap, dan alasan migrasinya.
Buka → # Iterator dan ListIteratorTelusuri collection dengan Iterator dan hindari ConcurrentModificationException.
Buka → # Comparable dan ComparatorTentukan urutan elemen dengan Comparable dan Comparator termasuk comparator modern.
Buka → # Immutable CollectionsCiptakan collection yang tidak berubah dengan List.of, Map.of, dan copyOf.
Buka → # Collection UtilitiesManfaatkan class Collections dan Arrays untuk operasi serbaguna.
Buka → # Memilih Collection yang TepatPadukan kebutuhan akses data dengan struktur collection yang paling sesuai.
Buka → # Performa CollectionBandingkan kompleksitas operasi tiap collection dan dampaknya pada desain.
Buka →Bab 14 Generics
Parametrisasi class dengan type parameter agar bekerja untuk banyak tipe.
Buka → # Generic MethodsBuat method generik yang menyimpulkan tipe dari argument pemanggil.
Buka → # Generic InterfacesRumuskan kontrak generik pada interface dan implementasikannya.
Buka → # Bounded Type ParametersBatasi type parameter dengan extends agar method tertentu dapat dipanggil.
Buka → # Multiple Type ParametersGunakan beberapa type parameter sekaligus untuk struktur seperti Pair.
Buka → # WildcardsKenali wildcard ? pada generics dan kapan kegunaannya.
Buka → # Upper-Bounded WildcardsTerima koleksi subtype dengan wildcard ? extends dan pola producer.
Buka → # Lower-Bounded WildcardsTulis ke koleksi supertype dengan wildcard ? super dan pola consumer.
Buka → # Type ErasurePahami bagaimana compiler menghapus informasi tipe dan akibatnya saat runtime.
Buka → # Generic Type InferenceBiarkan compiler menyimpulkan tipe lewat diamond operator dan target typing.
Buka → # Restrictions pada GenericsKenali larangan generics seperti instance tipe generik dan array parametrisasi.
Buka → # Merancang Generic APIRancang API generik yang ekspresif dengan kombinasi bounded types dan wildcards.
Buka →Bab 15 Functional Programming
Kenali gaya pemrograman fungsional dan perannya dalam Java modern.
Buka → # Functional InterfacesPahami kontrak single abstract method yang menjadi fondasi lambda.
Buka → # Lambda ExpressionsTulis implementasi ringkas dari functional interface dengan lambda.
Buka → # Method ReferencesRujuk method yang sudah ada dengan empat bentuk method reference.
Buka → # Constructor ReferencesRujuk constructor sebagai pabrik objek dalam gaya fungsional.
Buka → # Built-in Functional InterfacesKenali paket java.util.function dan keluarga interface dasarnya.
Buka → # PredicateUji kondisi objek dengan Predicate dan kombinasikan secara deklaratif.
Buka → # Function dan BiFunctionTransformasi nilai dengan Function dua arah dan BiFunction dua masukan.
Buka → # Consumer dan SupplierKonsumsi nilai tanpa hasil dan hasilkan nilai tanpa masukan.
Buka → # Function CompositionRangkai transformasi kecil menjadi pipeline dengan compose dan andThen.
Buka → # Closures dan Effectively FinalPahami aturan variabel yang ditangkap lambda dan alasan effectively final.
Buka → # Pure Functions dan Side EffectsKenali pure function, side effect, dan dampaknya pada keterujian kode.
Buka → # Functional Design PatternsTerapkan pola fungsional seperti strategy dan chain tanpa boilerplate class.
Buka →Bab 16 Stream API
Pahami konsep pipeline stream sebagai alternatif perulangan imperatif.
Buka → # Creating StreamsBangun stream dari collection, array, nilai, dan generator.
Buka → # Intermediate vs Terminal OperationsBedakan operasi lazy yang menyusun pipeline dari operasi yang menjalankannya.
Buka → # filterSaring elemen stream dengan Predicate sesuai kriteria.
Buka → # map dan flatMapUbah tiap elemen dengan map dan ratakan struktur bersarang dengan flatMap.
Buka → # sorted dan distinctUrutkan elemen dan buang duplikat dalam pipeline stream.
Buka → # limit, skip, takeWhile, dan dropWhileKendalikan jumlah dan rentang elemen yang diproses stream.
Buka → # reduceAgregasi seluruh elemen menjadi satu nilai dengan reduce.
Buka → # collectKumpulkan hasil stream ke collection atau struktur lain dengan collect.
Buka → # CollectorsKenali Collector bawaan untuk toList, joining, averaging, dan sebagainya.
Buka → # groupingBy dan partitioningByKelompokkan data berdasarkan kunci dan pisahkan berdasarkan kondisi.
Buka → # Primitive StreamsHindari boxing dengan IntStream, LongStream, dan DoubleStream.
Buka → # OptionalNyatakan nilai yang mungkin tidak ada dengan Optional dan rantai operasinya.
Buka → # Stream LazinessAmati cara stream menunda pekerjaan hingga terminal operation berjalan.
Buka → # Stream OrderingPahami encounter order dan flag unordered pada stream.
Buka → # Parallel StreamsParalelkan pipeline dengan parallelStream dan kenali risikonya.
Buka → # Performa StreamUkur dan bandingkan performa stream terhadap perulangan biasa.
Buka → # Best Practices StreamTulis pipeline stream yang terbaca, aman, dan tidak berlebihan.
Buka →Bab 17 Date-Time API
Kenali java.util.Date dan Calendar beserta masalah desain yang memotivasi java.time.
Buka → # LocalDateWakilkan tanggal tanpa waktu dan zona dengan LocalDate.
Buka → # LocalTimeWakilkan waktu dalam satu hari tanpa tanggal dan zona dengan LocalTime.
Buka → # LocalDateTimeGabungkan tanggal dan waktu tanpa zona dengan LocalDateTime.
Buka → # InstantWakilkan titik waktu absolut di timeline dengan Instant.
Buka → # ZonedDateTimeGabungkan tanggal, waktu, dan zona dengan ZonedDateTime.
Buka → # ZoneId dan ZoneOffsetBedakan zona berbasis aturan dari offset tetap dan cara memperolehnya.
Buka → # Duration dan PeriodUkur rentang waktu dan rentang kalender dengan tepat.
Buka → # Formatting Date-TimeFormat tanggal dan waktu dengan pola DateTimeFormatter.
Buka → # Parsing Date-TimeUbah teks menjadi objek date-time dan tangani kegagalan parsing.
Buka → # Aritmetika Date-TimeTambah dan kurangi tanggal, waktu, serta rentang dengan method plus dan minus.
Buka → # Menangani Time ZonesKelola konversi antar zona dan aturan daylight saving dengan benar.
Buka → # Best Practices Date-TimePilih tipe date-time yang tepat dan hindari jebakan umumnya.
Buka →Bab 18 File I/O dan NIO
Kenali java.io.File untuk mewakili path dan operasi sistem berkas dasar.
Buka → # Path dan PathsWakilkan path modern dan lintas platform dengan java.nio.file.Path.
Buka → # Utility FilesSelesaikan tugas berkas umum dengan sedikit kode lewat class Files.
Buka → # Byte StreamsBaca tulis data mentah biner dengan InputStream dan OutputStream.
Buka → # Character StreamsBaca tulis teks dengan Reader dan Writer serta charset yang eksplisit.
Buka → # Buffered I/OPercepat I/O dengan buffering dan pahami flush yang menyertainya.
Buka → # Object SerializationSimpan dan pulihkan object graph dengan serialization Java.
Buka → # Risiko SerializationKenali risiko keamanan, kompatibilitas, dan perawatan serialization.
Buka → # NIO BuffersPahami Buffer sebagai wadah data NIO beserta position, limit, dan capacity.
Buka → # ChannelsBaca tulis lewat Channel dengan dukungan transfer dan scatter/gather.
Buka → # File AttributesBaca dan ubah atribut berkas seperti ukuran, waktu, dan permission.
Buka → # Directory TraversalJelajahi isi direktori dengan Files.list, walk, dan DirectoryStream.
Buka → # Watching File ChangesPantau perubahan direktori secara efisien dengan WatchService.
Buka → # Temporary FilesCiptakan dan bersihkan berkas sementara dengan aman.
Buka → # File PermissionsKelola hak akses berkas lintas platform dan keterbatasannya di Java.
Buka → # Pemrosesan File yang TangguhRangkai penanganan error, encoding, dan pembersihan saat memproses berkas.
Buka →Bab 19 Concurrency dan Multithreading
Bedakan proses dan thread beserta implikasi memori dan komunikasinya.
Buka → # Membuat ThreadCiptakan dan jalankan thread dengan subclass Thread maupun Runnable.
Buka → # Runnable dan CallableBandingkan dua kontrak eksekusi dan hasil yang dapat dikembalikan.
Buka → # Thread LifecycleIkuti state thread dari NEW hingga TERMINATED dan transisinya.
Buka → # Thread Priority dan DaemonAtur prioritas dan mode daemon beserta batas kendali nyatanya.
Buka → # Race ConditionsAmati kesalahan akibat akses bersama tanpa koordinasi dan cara mereproduksinya.
Buka → # synchronizedLindungi critical section dengan method dan blok synchronized.
Buka → # Intrinsic LocksPahami lock bawaan setiap objek dan sifat reentrannya.
Buka → # volatileJamin visibilitas perubahan antar thread dengan volatile dan batasnya.
Buka → # Atomic VariablesLakukan operasi gabungan tanpa lock dengan class Atomic.
Buka → # Lock dan ReentrantLockGunakan lock eksplisit dengan fitur tryLock, fairness, dan interruptible.
Buka → # ReadWriteLockIzinkan pembaca bersamaan dengan ReadWriteLock dan tulis eksklusif.
Buka → # DeadlockPahami terbentuknya deadlock, cara mendeteksi, dan mencegahnya.
Buka → # Livelock dan StarvationKenali dua masalah koordinasi lain selain deadlock dan mitigasinya.
Buka → # wait, notify, dan notifyAllKoordinasi antar thread dengan wait/notify pada intrinsic lock.
Buka → # ExecutorServiceSerahkan pengelolaan thread ke ExecutorService dan shut down dengan benar.
Buka → # Thread PoolsPilih ukuran dan jenis pool sesuai sifat pekerjaan aplikasi.
Buka → # Future dan CompletableFutureAmbil hasil asinkron dan rangkai tahapan dengan CompletableFuture.
Buka → # Concurrent CollectionsGunakan collection thread-safe seperti ConcurrentHashMap dan CopyOnWriteArrayList.
Buka → # Fork/Join FrameworkPecah pekerjaan rekursif dan gabungkan hasilnya dengan work stealing.
Buka → # Parallel Streams dan ConcurrencyPahami hubungan parallel stream dengan ForkJoinPool dan kesalahpakaiannya.
Buka → # Virtual ThreadsSkalakan jutaan task ringan dengan virtual threads Java modern.
Buka → # Structured ConcurrencyPadatkan lifecycle task bersaudara dengan pola structured concurrency.
Buka → # Thread SafetyKenali sumber bahaya visibility dan atomicity beserta resep amannya.
Buka → # Best Practices ConcurrencyRangkai prinsip desain concurrency yang sederhana dan dapat diuji.
Buka →Bab 20 Networking
Pahami model jaringan dasar yang menjadi fondasi API networking Java.
Buka → # URI dan URLBangun dan bedah alamat jaringan dengan class URI dan URL.
Buka → # Socket ProgrammingKenali socket sebagai titik akhir komunikasi antar proses.
Buka → # TCP Client dan ServerBangun komunikasi dua arah andal dengan ServerSocket dan Socket.
Buka → # Komunikasi UDPKirim paket ringan tanpa koneksi dengan DatagramSocket.
Buka → # HTTP Client APIGunakan java.net.http.HttpClient modern untuk permintaan HTTP/1.1 dan HTTP/2.
Buka → # HTTP Requests dan ResponsesSusun HttpRequest dan baca HttpResponse beserta status dan header.
Buka → # JSON over HTTPKirim dan terima JSON lewat HTTP dengan body publisher dan subscriber.
Buka → # Timeouts dan RetriesBatasi durasi permintaan dan rancang kebijakan retry yang aman.
Buka → # Connection ManagementKelola pool koneksi dan header Connection pada HttpClient.
Buka → # TLS dan HTTPSAmankan komunikasi dengan HTTPS, sertifikat, dan TLS di HttpClient.
Buka → # HTTP Client AsinkronKirim permintaan non-blocking dengan sendAsync dan CompletableFuture.
Buka → # Keamanan NetworkingTerapkan praktik aman pada kode jaringan Java.
Buka →Bab 21 Database Programming
Pahami tabel, kunci, dan relasi sebagai fondasi bekerja dengan JDBC.
Buka → # Arsitektur JDBCBedah lapisan JDBC dari DriverManager sampai driver, plus bukti alur lewat driver buatan sendiri.
Buka → # Database Drivers dan JDBC URLPelajari cara driver terdaftar lewat SPI, dikelola sebagai dependensi, dan dialamatkan lewat URL JDBC.
Buka → # Membuka Koneksi ke DatabaseBuka koneksi JDBC, kelola kredensial lewat Properties, dan diagnosis kegagalan lewat SQLException.
Buka → # Mengeksekusi SQL dengan StatementKirim SQL ke database lewat Statement: executeQuery, executeUpdate, execute, dan penutupan resource yang rapi.
Buka → # PreparedStatement dan Parameter TerikatPahami pre-compilation SQL, placeholder berindeks 1, dan mengapa PreparedStatement menutup celah penggabungan teks.
Buka → # Menjelajah Hasil dengan ResultSetGulir kursor ResultSet, baca kolom lewat indeks atau label, dan tangani NULL dengan wasNull.
Buka → # Transaksi dengan JDBCKuasai setAutoCommit, commit, rollback, dan savepoint untuk menjaga atomisitas operasi database.
Buka → # Batch ProcessingGabungkan banyak INSERT, UPDATE, dan DELETE menjadi satu executeBatch untuk memangkas bolak-balik jaringan.
Buka → # Generated KeysAmbil kunci primer otomatis hasil INSERT lewat RETURN_GENERATED_KEYS dan getGeneratedKeys.
Buka → # Mencegah SQL InjectionBedah anatomi serangan SQL injection lalu bangun pertahanan berlapis dari PreparedStatement sampai hak akses minimum.
Buka → # Connection PoolingPahami kenapa koneksi mahal, cara pool memakai ulangnya, dan konfigurasi HikariCP lewat DataSource.
Buka → # Pola DAO (Data Access Object)Pisahkan kode akses data dari logika bisnis lewat interface DAO dan transfer object yang mudah diuji.
Buka → # Pattern RepositoryAbstraksi akses data berorientasi domain dengan Repository.
Buka → # Database MigrationsKelola perubahan skema secara terkendali dan terversi.
Buka → # Best Practices JDBCRangkai praktik JDBC yang aman dari resource sampai transaksi.
Buka →Bab 22 Annotations dan Reflection
Kenali annotation bawaan Java seperti @Override, @Deprecated, dan @FunctionalInterface.
Buka → # Custom AnnotationsDefinisikan annotation sendiri beserta elemennya dan nilai bawaannya.
Buka → # Annotation RetentionAtur masa hidup annotation dengan RetentionPolicy SOURCE, CLASS, dan RUNTIME.
Buka → # Annotation TargetBatasi tempat annotation dapat dipasang dengan ElementType.
Buka → # Processing AnnotationsBaca annotation saat runtime dan bereaksi terhadapnya.
Buka → # Reflection APIKenali mekanisme inspeksi class saat runtime di java.lang.reflect.
Buka → # Inspecting ClassesTelusuri nama, modifier, superclass, dan interface sebuah class.
Buka → # Akses Fields dan MethodsBaca dan ubah field serta panggil method lewat reflection.
Buka → # Dynamic Object CreationCiptakan objek dari nama class tanpa new lewat newInstance dan constructor.
Buka → # Performa ReflectionUkur biaya reflection dan cara menguranginya dengan caching dan MethodHandles.
Buka → # Keamanan ReflectionPahami risiko setAccessible dan batasan module system.
Buka →Bab 23 JVM dan Memory Management
Petakan komponen JVM dari class loader hingga execution engine.
Buka → # Class LoadingIkuti proses loading, linking, dan inisialisasi class beserta delegasinya.
Buka → # BytecodeBaca instruksi bytecode hasil kompilasi javac dan pelajari perannya.
Buka → # Heap dan StackBedakan memori heap untuk objek dari stack untuk frame method.
Buka → # MetaspaceKenali Metaspace sebagai tempat metadata class menggantikan PermGen.
Buka → # Garbage CollectionPahami cara JVM menemukan dan membersihkan objek yang tak terpakai.
Buka → # Jenis Garbage CollectorBandingkan Serial, Parallel, G1, dan ZGC beserta profil latensinya.
Buka → # Memory LeaksKenali pola kebocoran memori di Java dan cara mendeteksinya.
Buka → # Object Lifecycle di JVMIkuti objek dari alokasi di Eden hingga dipindah atau dipungut.
Buka → # Strong, Weak, Soft, dan Phantom ReferencesManfaatkan empat kekuatan reference untuk cache dan pembersihan.
Buka → # JVM OptionsAtur ukuran heap dan perilaku GC dengan flags -X dan -XX.
Buka → # Tools Monitoring JVMPantau JVM berjalan dengan jps, jstat, jcmd, dan JMC.
Buka → # JFR dan JDK Mission ControlRekam profil aplikasi dengan low-overhead Java Flight Recorder.
Buka → # jcmd, jstack, dan jmapDiagnosis masalah berjalan dengan tiga alat CLI bawaan JDK.
Buka → # Memory TuningSesuaikan ukuran generasi dan pilihan GC dengan karakteristik aplikasi.
Buka →Bab 24 Build Tools dan Dependency Management
Bangun aplikasi multi-file hanya dengan javac dan opsi pentingnya.
Buka → # Packaging JARBungkus hasil build menjadi JAR library dan JAR yang dapat dieksekusi.
Buka → # Maven FundamentalsKenali filosofi convention over configuration dan siklus hidup Maven.
Buka → # Struktur Proyek MavenPahami direktori src/main, src/test, dan pom.xml.
Buka → # Maven DependenciesDeklarasikan dependency dengan GAV coordinate dan scope transitif.
Buka → # Maven LifecycleIkuti fase validate sampai deploy dan kaitannya dengan goals.
Buka → # Maven PluginsPerluas build dengan plugin compiler, surefire, shade, dan assembly.
Buka → # Gradle FundamentalsKenali build script Gradle berbasis task dan DAG-nya.
Buka → # Gradle Build LifecycleIkuti tahap initialization, configuration, dan execution di Gradle.
Buka → # Gradle DependenciesKelola dependency dengan konfigurasi dan version catalog.
Buka → # Gradle PluginsTerapkan plugin java, application, dan plugin pihak ketiga.
Buka → # Dependency VersioningPahami semantic versioning dan strategi rentang versi.
Buka → # Konflik DependencySelesaikan benturan versi dengan resolution strategy dan exclusion.
Buka → # Reproducible BuildsKunci versi dan hilangkan nondeterminisme agar build dapat diulang identik.
Buka → # Memilih Build ToolBandingkan Maven dan Gradle untuk memilih alat yang cocok tim Anda.
Buka →Bab 25 Testing
Pahami piramida pengujian dan peran tiap lapisannya.
Buka → # Unit TestingRancang unit test kecil, cepat, dan terisolasi untuk method Anda.
Buka → # JUnit JupiterKenali anotasi dan lifecycle JUnit 5 sebagai standar testing Java.
Buka → # AssertionsVerifikasi hasil dengan Assertions JUnit dan AssertJ yang ekspresif.
Buka → # Parameterized TestsUji banyak kasus dari satu method uji dengan @ParameterizedTest.
Buka → # Lifecycle MethodsSiapkan dan bersihkan kondisi uji dengan @BeforeEach dan @AfterAll.
Buka → # Test FixturesBangun data uji yang stabil dan mudah dirawat.
Buka → # Mocking FundamentalsPahami mock sebagai alat memutus dependensi eksternal.
Buka → # MockitoBuat mock, stub, dan verifikasi interaksi dengan Mockito.
Buka → # Stubs, Mocks, dan FakesBedakan tiga jenis test double dan kapan memakainya.
Buka → # Integration TestingUji komponen yang bekerja bersama dengan lingkup terkendali.
Buka → # Database TestingUji akses data dengan transaksi tergulung dan basis data uji.
Buka → # Testing ExceptionsVerifikasi bahwa jalur gagal melempar exception yang benar.
Buka → # Test CoverageBaca laporan coverage JaCoCo dan gunakannya secara bijak.
Buka → # Property-Based TestingUji properti yang berlaku untuk semua input dengan jqwik.
Buka → # TestcontainersJalankan dependensi nyata dalam container Docker saat pengujian.
Buka → # Testing Kode ConcurrencyUji kode paralel dengan pola yang deterministik dan timeout ketat.
Buka → # Best Practices TestingSusun suite uji yang cepat, jelas, dan dapat dipercaya.
Buka →Bab 26 Debugging dan Code Quality
Bedah stack trace dari baris paling atas untuk menemukan sumber masalah.
Buka → # IDE DebuggersManfaatkan debugger IDE sebagai mikroskop perilaku program.
Buka → # Breakpoints dan WatchpointsHentikan eksekusi pada titik dan kondisi yang Anda pilih.
Buka → # Step-Through DebuggingTelusuri eksekusi baris demi baris dengan step in, over, dan out.
Buka → # Logging FundamentalsKenali mengapa logging terstruktur menggantikan System.out.println.
Buka → # SLF4J dan LogbackPasang facade SLF4J dan konfigurasi Logback dari XML.
Buka → # Logging LevelsPilih level TRACE sampai ERROR sesuai dampak peristiwa.
Buka → # Static AnalysisTemukan cacat sebelum runtime dengan alat analisis statik.
Buka → # CheckstyleJaga gaya kode konsisten dengan aturan Checkstyle.
Buka → # SpotBugsDeteksi pola bug tersimpan lewat analisis bytecode SpotBugs.
Buka → # Error ProneTangkap kesalahan umum saat kompilasi dengan Error Prone.
Buka → # Code FormattingSeragamkan format kode dengan formatter dan konfigurasinya.
Buka → # RefactoringPerbaiki struktur kode langkah demi langkah tanpa mengubah perilaku.
Buka → # Technical DebtKenali, ukur, dan kelola utang teknis secara realistis.
Buka → # Praktik Code ReviewJalankan review yang konstruktif dan terukur di tim.
Buka →Bab 27 Software Design dan Architecture
Pahami lima prinsip desain class yang menjadi dasar arsitektur sehat.
Buka → # Separation of ConcernsPisahkan tanggung jawab agar tiap bagian berubah karena satu alasan.
Buka → # Dependency InversionBalik arah dependensi agar detail mengikuti abstraksi.
Buka → # Dependency InjectionSuntikkan dependensi dari luar agar komponen mudah diuji dan diganti.
Buka → # Composition over InheritanceSusun perilaku dari bagian kecil alih-alih mewarisinya.
Buka → # Clean CodeTulis kode yang dibaca manusia dengan penamaan dan fungsi yang jujur.
Buka → # Design by ContractNyatakan prasyarat dan jaminan method secara eksplisit.
Buka → # Defensive ProgrammingLindungi kode dari input dan state yang tidak masuk akal.
Buka → # Object-Oriented DesignTerjemahkan kebutuhan menjadi class dan interaksi yang koheren.
Buka → # Layered ArchitectureSusun aplikasi berlapis presentation, business, dan persistence.
Buka → # Hexagonal ArchitectureIsolasi domain dari detail teknologi lewat ports and adapters.
Buka → # Clean ArchitectureArahkan dependensi menuju domain yang berada di pusat.
Buka → # Domain-Driven DesignSelaraskan kode dengan bahasa dan batasan domain bisnis.
Buka → # Domain ModelingBangun model domain dengan entity, value object, dan aggregate.
Buka → # Design PatternsKenali katalog pola solusi berulang dan cara memakainya tepat.
Buka → # Factory PatternPusatkan penciptaan objek dengan factory method dan abstract factory.
Buka → # Builder PatternRakit objek kompleks langkah demi langkah dengan builder.
Buka → # Strategy PatternTukar algoritma saat runtime dengan strategy dan lambda.
Buka → # Observer PatternSiarkan peristiwa ke banyak pendengar secara longgar.
Buka → # Adapter PatternJembatani antarmuka yang tidak cocok dengan adapter.
Buka → # Decorator PatternTambah perilaku membungkus objek tanpa mengubah class asal.
Buka → # Repository PatternHadirkan koleksi domain yang menyerap detail persistensi.
Buka → # Unit of Work PatternKumpulkan perubahan dan simpan sekali dalam satu transaksi.
Buka → # Memilih Arsitektur AplikasiTimbang ukuran tim, domain, dan kendala untuk memilih arsitektur.
Buka →Bab 28 Algorithms dan Data Structures
Ukur biaya algoritma dari segi langkah dan memori yang dipakai.
Buka → # Big-O NotationBaca dan menuliskan pertumbuhan kompleksitas dengan notasi Big-O.
Buka → # Array dan Linked ListBandingkan dua struktur sekuensial dan biaya operasinya.
Buka → # Stack dan QueueImplementasikan dua struktur akses terbatas dengan Java.
Buka → # Hash TablePahami hashing, collision, dan load factor di balik HashMap.
Buka → # Tree dan Binary Search TreeBangun hierarki terurut dengan BST dan penelusurannya.
Buka → # Heap dan Priority QueuePahami heap biner yang menopang PriorityQueue.
Buka → # GraphWakilkan relasi entitas dengan adjacency list dan matrix.
Buka → # Algoritma SearchingImplementasikan linear dan binary search beserta prasyaratnya.
Buka → # Algoritma SortingBandingkan bubble, insertion, merge, dan quick sort secara konkret.
Buka → # Recursion dan BacktrackingJelajahi ruang solusi dengan rekursi dan mundur terarah.
Buka → # Greedy AlgorithmsAmbil keputusan lokal optimal dan kenali batas jaminannya.
Buka → # Dynamic ProgrammingPecah masalah tumpang tindih dengan memoization dan tabulation.
Buka → # Algoritma GraphTerapkan BFS, DFS, dan Dijkstra pada graph berbobot.
Buka → # Implementasi Algoritma dengan JavaTerjemahkan pseudocode menjadi kode Java yang bersih dan teruji.
Buka →Bab 29 Security
Kenali prinsip keamanan yang melandasi seluruh praktik aman.
Buka → # Input ValidationValidasi data masuk di batas sistem sebelum dipercaya.
Buka → # Output EncodingEncode data saat keluar untuk mencegah injeksi di konteks tujuan.
Buka → # Secrets ManagementSimpan dan suntikkan rahasia tanpa menghardcode di kode.
Buka → # Fundamentals CryptographyBedakan hashing, enkripsi simetris, dan asimetris beserta kegunaannya.
Buka → # Secure RandomnessGunakan SecureRandom ketika prediktabilitas menjadi celah.
Buka → # Password HashingHash kata sandi dengan salt dan algoritma lambat yang tepat.
Buka → # Message Digests dan SignaturesBuat sidik jari data dan tanda tangan digital dengan JCA.
Buka → # TLS dan Certificate ValidationPahami handshake TLS dan validasi sertifikat pada klien Java.
Buka → # Keamanan DeserializationKenali bahaya deserialisasi data tak terpercaya dan mitigasinya.
Buka → # Path TraversalCegah manipulasi path agar akses berkas tetap dalam batas.
Buka → # Manajemen Kerentanan DependencyPindai dan kelola CVE pada dependency dengan OWASP dan audit build.
Buka → # Keamanan Aplikasi JavaRangkai lapisan keamanan menyeluruh pada aplikasi Java.
Buka →Bab 30 Desktop Development
Kenali dua toolkit UI utama Java dan posisinya hari ini.
Buka → # Swing FundamentalsBangun jendela Swing pertama dengan JFrame dan komponen dasar.
Buka → # Layouts dan ComponentsSusun komponen dengan layout manager FlowLayout hingga GridBagLayout.
Buka → # Event-Driven ProgrammingTangani aksi pengguna dengan listener dan lambda di Swing.
Buka → # Table ModelsTampilkan data tabel dengan JTable dan TableModel kustom.
Buka → # JavaFX FundamentalsKenali Stage, Scene, dan Node sebagai fondasi aplikasi JavaFX.
Buka → # FXML dan Scene BuilderPisahkan tampilan ke FXML dan rancang secara visual.
Buka → # JavaFX Properties dan BindingsIkat property agar UI bereaksi otomatis terhadap perubahan data.
Buka → # JavaFX ConcurrencyJalankan pekerjaan latar dengan Task dan Service tanpa membekukan UI.
Buka → # Packaging Aplikasi DesktopDistribusikan aplikasi desktop dengan jpackage dan installer.
Buka → # Arsitektur Aplikasi DesktopSusun aplikasi UI berlapis agar mudah diuji dan dikembangkan.
Buka →Bab 31 Web Development
Petakan pilihan teknologi web Java dari servlet hingga framework modern.
Buka → # HTTP FundamentalsPahami method, status code, header, dan body yang mengalir antar klien dan server.
Buka → # Servlet FundamentalsKenali servlet sebagai unit pemroses request di dalam web container.
Buka → # Servlet LifecycleIkuti init, service, dan destroy servlet di dalam container.
Buka → # Request dan ResponseBaca parameter, header, dan body dari HttpServletRequest lalu tulis responsenya.
Buka → # Sessions dan CookiesKenali state HTTP dan dua mekanisme klasik untuk mengingat pengguna.
Buka → # Template RenderingRender HTML dari server dengan template engine seperti Thymeleaf.
Buka → # Gambaran Umum Jakarta EEKenali platform enterprise Java dan profil deploy lamanya.
Buka → # Dependency Injection di Web AppsRangkai komponen web lewat injection tanpa instansiasi manual.
Buka → # Membangun REST APIRancang endpoint REST yang konsisten dengan resource, verb, dan status code.
Buka → # Validasi APIValidasi payload di batas API dan balas pesan kesalahan yang terstruktur.
Buka → # Error Handling APISusun respons kesalahan yang seragam dan informatif bagi klien API.
Buka → # Keamanan Web ApplicationTerapkan praktik aman khas aplikasi web Java.
Buka →Bab 32 Spring Framework
Kenali Spring, container IoC, dan alasan dominasinya di ekosistem Java.
Buka → # Dependency Injection dengan SpringSerahkan penyambungan komponen kepada container Spring.
Buka → # Spring Container dan BeansPahami bean definition, scope, dan lifecycle di ApplicationContext.
Buka → # Configuration dan ProfilesKonfigurasi bean dengan anotasi, Java Config, dan profile per lingkungan.
Buka → # Spring Boot FundamentalsKenali auto-configuration dan starter yang memangkas konfigurasi manual.
Buka → # Setup Proyek dengan Spring InitializrLahirkan proyek Spring Boot siap pakai dengan Spring Initializr.
Buka → # Application PropertiesAtur konfigurasi aplikasi lewat application.properties dan YAML.
Buka → # Spring MVCPahami alur request melalui DispatcherServlet dan komponen MVC.
Buka → # Controllers dan RoutingPetakan endpoint ke method controller dengan @RestController.
Buka → # Request BindingIkat path variable, query param, dan body JSON ke parameter method.
Buka → # Validasi dengan SpringValidasi input dengan Bean Validation dan anotasi constraint.
Buka → # Exception Handling dengan SpringPusatkan penanganan kesalahan dengan @ExceptionHandler dan RFC 7807.
Buka → # Spring Data JPAKenali abstraksi repository yang menyerap boilerplate JDBC.
Buka → # Entities dan RepositoriesPetakan tabel ke entity dan query ke method repository.
Buka → # Transaksi DatabaseKendalikan batas transaksi secara deklaratif dengan @Transactional.
Buka → # Spring SecurityKenali filter chain dan arsitektur keamanan Spring Security.
Buka → # Authentication dan AuthorizationBeda kenalan pengguna dari pemberian izin berbasis role dan authority.
Buka → # Password EncodingSimpan kata sandi ter-hash dengan BCrypt dan DelegatingPasswordEncoder.
Buka → # REST API dengan Spring BootRangkai CRUD REST API lengkap berlapis dengan Spring Boot.
Buka → # Pagination dan SortingSajikan data besar per halaman dengan Pageable dan Page.
Buka → # File UploadTerima unggahan berkas multipart dan simpan dengan aman.
Buka → # CachingPercepat respons dengan cache deklaratif dan CacheManager.
Buka → # Scheduled TasksJalankan pekerjaan berkala dengan @Scheduled dan cron expression.
Buka → # Pemrosesan AsinkronTangani pekerjaan latar dengan @Async dan executor khusus.
Buka → # Testing Spring BootUji lapisan web dan data dengan @WebMvcTest, @DataJpaTest, dan Testcontainers.
Buka → # Actuator dan Health ChecksPantau aplikasi berjalan lewat endpoint Actuator dan health indicator.
Buka → # Observability AplikasiRangkai log terstruktur, metrics, dan tracing ala Micrometer.
Buka → # Kesiapan Produksi Spring BootKemas, konfigurasi, dan amankan aplikasi sebelum naik ke produksi.
Buka →Bab 33 Microservices dan Distributed Systems
Bandingkan dua gaya arsitektur beserta konsekuensi operasionalnya.
Buka → # Service BoundariesPotong sistem menjadi service berdasarkan kapabilitas domain.
Buka → # REST vs MessagingPilih gaya komunikasi sinkron atau asinkron sesuai kebutuhan.
Buka → # Komunikasi AntarservicePanggil service lain dengan REST client dan penanganan kegagalannya.
Buka → # Resilience PatternsKenali pola bertahan saat dependensi melambat atau berhenti.
Buka → # Timeouts, Retries, dan Circuit BreakersBatasi dampak kegagalan dengan timeout, retry berjitter, dan circuit breaker.
Buka → # IdempotencyRancang operasi yang aman diulang saat retry terjadi.
Buka → # Transaksi TerdistribusiPahami mengapa ACID lintas service sulit dan alternatifnya.
Buka → # Saga PatternKelola transaksi panjang dengan rangkaian langkah dan kompensasi.
Buka → # Event-Driven ArchitectureBangun sistem berbasis peristiwa yang longgar terhubung.
Buka → # Message BrokersKenali peran broker seperti Kafka dan RabbitMQ dalam arsitektur pesan.
Buka → # Service DiscoveryTemukan lokasi service secara dinamis tanpa hardcode alamat.
Buka → # Observability dan TracingTelusuri permintaan lintas service dengan distributed tracing.
Buka → # Trade-Offs MicroservicesTimbang kompleksitas operasional sebelum memecah monolith.
Buka →Bab 34 Deployment dan Production
Bangun fat JAR yang dapat dijalankan dengan satu perintah java -jar.
Buka → # jlinkRangkai runtime minimal khusus aplikasi dengan jlink dan jdeps.
Buka → # jpackageBundel aplikasi Java menjadi installer platform dengan jpackage.
Buka → # Konfigurasi EnvironmentPisahkan konfigurasi dari kode agar satu build berlaku di banyak lingkungan.
Buka → # Externalized ConfigurationBaca konfigurasi dari environment variable dan berkas di luar JAR.
Buka → # Docker FundamentalsKenali image, container, dan Dockerfile untuk aplikasi Java.
Buka → # Containerizing Aplikasi JavaTulis Dockerfile JVM yang efisien dan sadar memori container.
Buka → # Docker Multi-Stage BuildsPisahkan tahap build dan runtime agar image akhir ramping.
Buka → # CI/CD FundamentalsPahami pipeline continuous integration dan delivery untuk proyek Java.
Buka → # GitHub ActionsOtomatiskan build, test, dan publish JAR dengan workflow GitHub Actions.
Buka → # Logging AplikasiKelola log produksi: rotasi, format terstruktur, dan retensi.
Buka → # Health ChecksEkspos status kesehatan aplikasi untuk orchestrator dan load balancer.
Buka → # Metrics dan MonitoringPublikasikan metrik aplikasi dan pantau dengan Micrometer serta Prometheus.
Buka → # Performance ProfilingTemukan bottleneck produksi dengan profiler dan JFR.
Buka → # Graceful ShutdownHentikan aplikasi dengan menyelesaikan pekerjaan yang sedang berjalan.
Buka → # Troubleshooting ProduksiDiagnosis aplikasi sakit di produksi dengan langkah sistematis.
Buka → # Release ManagementKelola versi rilis, changelog, dan strategi rollout mundur.
Buka →Bab 35 Performance dan Optimization
Kenali alur kerja mengukur dulu sebelum mengubah apa pun.
Buka → # Benchmarking FundamentalsPahami jebakan benchmark JVM: warmup, JIT, dan dead code elimination.
Buka → # JMHTulis microbenchmark yang sahih dengan Java Microbenchmark Harness.
Buka → # CPU ProfilingTemukan method yang menghabiskan waktu CPU dengan sampling profiler.
Buka → # Memory ProfilingLacak alokasi dan retensi objek dengan heap dump dan profiler.
Buka → # Allocation ProfilingKurangi tekanan alokasi dengan profil alokasi dan escape analysis.
Buka → # Garbage Collection TuningSetel pilihan GC dan ukuran heap sesuai SLA latensi atau throughput.
Buka → # Optimasi CollectionsPilih struktur dan kapasitas awal collection yang tepat untuk data Anda.
Buka → # Optimasi StreamsHindari jebakan performa stream dan pilih primitive stream saat tepat.
Buka → # Performa ConcurrencyUkur dampak kontensi lock dan skala thread pool dengan benar.
Buka → # Latency vs ThroughputBedakan dua metrik kinerja dan trade-off penyetelannya.
Buka → # Performance Regression TestingKunci kinerja dengan benchmark yang berjalan otomatis di pipeline.
Buka →Bab 36 Modern Java
Petakan evolusi bahasa Java dan versi pengantar tiap fiturnya.
Buka → # varRingkaskan deklarasi lokal dengan var sambil menjaga keterbacaan.
Buka → # Switch ExpressionsGunakan switch modern dengan arrow label dan nilai kembali.
Buka → # Text BlocksTulis literal multi-baris bersih dengan text blocks.
Buka → # RecordsKenali record sebagai pembawa data transparan yang ringkas.
Buka → # Sealed ClassesBatasi pewarisan dan lengkapi exhaustiveness switch.
Buka → # Pattern MatchingUji dan konversi tipe dalam satu langkah dengan pattern matching.
Buka → # Record PatternsBedah isi record secara deklaratif dengan record patterns.
Buka → # Virtual ThreadsSkalakan concurrency berat I/O dengan virtual threads ringan.
Buka → # Sequenced CollectionsAkses elemen pertama dan terakhir dengan API SequencedCollection.
Buka → # Foreign Function and Memory APIPanggil kode native dan kelola memori luar dengan aman lewat FFM API.
Buka → # Gambaran Umum Vector APIKenali SIMD-style Vector API untuk komputasi vektor.
Buka → # Structured ConcurrencyKelola task terkait dalam satu unit kerja dengan structured concurrency.
Buka → # Scoped ValuesBagikan data immutable lintas thread dengan ScopedValue.
Buka → # Unnamed Variables dan PatternsSederhanakan kode dengan variabel _ yang sengaja diabaikan.
Buka → # Compatibility dan MigrationRencanakan upgrade versi Java dengan jadwal dan alat bantu.
Buka →Bab 37 Interoperability dan Native Integration
Kenali JNI sebagai jembatan lawas ke kode native dan bebannya.
Buka → # Foreign Function and Memory APIGanti JNI dengan FFM API modern yang lebih aman dan cepat.
Buka → # Memanggil Library NativeMuat library native dan petakan fungsinya dengan SymbolLookup.
Buka → # ProcessBuilderLuncurkan proses sistem dengan direktori, environment, dan redirect.
Buka → # Menjalankan Proses EksternalBaca output proses, tunggu selesai, dan tangani exit code.
Buka → # Standard Input, Output, dan ErrorKendalikan tiga aliran standar proses dan pewarisannya.
Buka → # Keamanan InteroperabilityMitigasi risiko saat melintasi batas JVM dan kode native.
Buka →Bab 38 Scripting dan Automation
Jadikan jshell teman eksperimen harian dengan script dan session.
Buka → # Utilitas Command LineRancang program CLI Java yang ramah pengguna dan mudah di-script.
Buka → # Parsing Argumen Command LineParsing flag dan parameter manual maupun dengan library.
Buka → # Batch ProcessingProses data secara bertahap dengan checkpoint dan resume.
Buka → # Otomasi File SystemOtomatiskan tugas berkas berulang dengan NIO dan pattern matching.
Buka → # Job Terjadwal JavaJalankan job berkala dengan ScheduledExecutorService dan cron.
Buka → # Packaging Aplikasi CLIDistribusikan tool CLI Java sebagai JAR atau image runtime.
Buka →Bab 39 Proyek
Bangun aplikasi catatan tugas berbasis teks dengan input pengguna, validasi, penyimpanan JSON, dan packaging JAR.
Lihat proyek → # Proyek: Sistem Manajemen PerpustakaanModelkan domain perpustakaan dengan OOP: katalog buku, keanggotaan, sirkulasi, dan persistensi berbasis berkas.
Lihat proyek → # Proyek: Aplikasi Keuangan PribadiCatat transaksi pribadi, kelola kategori dan anggaran, lalu susun laporan bulanan dari data nyata.
Lihat proyek → # Proyek: REST API Manajemen TugasBangun REST API manajemen tugas tanpa framework berat: routing manual, validasi, penyimpanan, dan pengujian endpoint.
Lihat proyek → # Proyek: Aplikasi InventarisKelola stok barang berbasis database: transaksi masuk-keluar, pencarian, dan laporan CSV.
Lihat proyek → # Proyek: Aplikasi Desktop Manajemen DataBangun aplikasi desktop Swing untuk mengelola data kontak lengkap dengan tabel, pencarian, dan penyimpanan.
Lihat proyek → # Proyek: Aplikasi Web Spring BootBangun aplikasi web Spring Boot lengkap: REST API, validasi, database, security, testing, hingga deployment.
Lihat proyek → # Proyek: Aplikasi Pemrosesan Data AsinkronBangun pipeline data asinkron: pembacaan berkas, pemrosesan paralel, retry, dan pengukuran performa.
Lihat proyek →Bab 40 Sumber Belajar
Kenali pintu masuk dokumentasi resmi Oracle JDK dan cara menelusurinya.
Buka → # Java Language SpecificationPelajari cara membaca JLS saat perilaku bahasa dipertanyakan.
Buka → # Java API ReferenceBaca Javadoc efisien dan manfaatkan halaman API sebagai sumber utama.
Buka → # Panduan Build ToolsKumpulkan rujukan resmi Maven dan Gradle untuk pendalaman.
Buka → # Panduan TestingKumpulkan rujukan JUnit, Mockito, dan AssertJ untuk pengujian.
Buka → # Panduan KeamananTelusuri sumber keamanan Java dari Oracle dan OWASP.
Buka → # Panduan PerformanceTelusuri sumber performa JVM dari dokumen GC hingga JMH.
Buka → # TroubleshootingKenali resep diagnosis cepat untuk masalah Java yang sering muncul.
Buka → # GlossaryRangkum istilah Java penting dalam satu halaman rujukan cepat.
Buka → # Roadmap BelajarPetakan urutan belajar Course Java dan jalur lanjutannya.
Buka →