Java & Spring Eğitim Portalı
Bu çalışmanın orijinali React + Spring Boot mimarisindeydi: backend, örnek Java kodunu derleyip canlı çalıştırıyordu. Burada tüm anlatımları ve örnekleri tek bir Next.js frontend’ine topladım. Çalıştırılabilir örneklerin çıktısı yerel JDK 21 ile gerçekten koşturularak önceden yakalandı; tarayıcıda JVM olmadığından “Çalıştır” bu hazır çıktıyı gösterir. Spring/Spring Boot örnekleri (Gradle ortamı gerektiren) kod + anlatım olarak, açık etiketle sunulur.
Java'ya Giriş ve Temeller
Bu bölümde Java yolculuğuna ilk adımı atıyoruz. Amacımız, daha sonra gelecek tüm konuların üzerine inşa edileceği sağlam bir zemin kurmak: Java'nın ne olduğunu, kodun nasıl çalıştığını, verileri nasıl sakladığımızı ve…
Kontrol Yapıları
Bir program, satırları yukarıdan aşağıya çalıştırır. Ama gerçek hayattaki problemler bu kadar düz değildir: bazen bir koşula göre farklı bir yol seçmemiz, bazen bir işi defalarca tekrarlamamız gerekir. İşte kontrol ya…
Metotlar ve Diziler
Programlar büyüdükçe aynı kodu tekrar tekrar yazmak hem yorucu hem de hataya açıktır. Metotlar, bir işi bir kez tanımlayıp istediğimiz kadar çağırmamızı sağlar; kodu parçalara böler, okunur ve test edilebilir kılar. D…
Nesne Yönelimli Programlama: Temeller
Şimdiye kadar veriyi (değişkenler, diziler) ve davranışı (metotlar) ayrı ayrı düşündük. Nesne yönelimli programlama (OOP) bunları bir araya getirir: gerçek dünyadaki bir varlığı, hem durumu (verisi) hem de davranışı (…
Kalıtım ve Çok Biçimlilik
OOP'nin temellerinde nesneleri sınıflarla modellemeyi gördük. Şimdi iki güçlü mekanizmaya geçiyoruz: kalıtım sayesinde var olan bir sınıfın özelliklerini yeniden kullanır, çok biçimlilik sayesinde farklı nesneleri tek…
Soyutlama: Abstract Sınıflar ve Interface'ler
Soyutlama, OOP'nin dördüncü temel taşıdır. Fikir basit ama güçlüdür: bir nesneyle çalışırken onun ne yaptığına odaklanır, nasıl yaptığını gizleriz. Bir televizyonun uzaktan kumandasını kullanırken içindeki elektroniği…
String İşlemleri ve StringBuilder
Metinlerle çalışmak, neredeyse her programın bir parçasıdır: kullanıcı adları, dosya içerikleri, mesajlar... Java'da metin denince akla String gelir. Bu bölümde String'in nasıl çalıştığını, en sık kullanılan metotları…
Hata Yönetimi (Exceptions)
Hiçbir program kusursuz bir dünyada çalışmaz: dosya bulunamaz, ağ kopar, kullanıcı beklenmedik veri girer, sıfıra bölünür. İyi bir yazılımcı bu durumları yok saymaz; onları öngörür ve zarifçe ele alır. Java'da bunun a…
Collections Framework
Dizilerle sabit sayıda veriyi tutmayı öğrendik. Ama gerçek programlarda veri sürekli büyür, küçülür, sıralanır, gruplanır. Collections Framework, Java'nın bu ihtiyaçlar için sunduğu zengin veri yapıları kütüphanesidir…
Generics (Jenerikler)
Bir önceki bölümde List<String>, Map<String, Integer> gibi yazımlar gördün. Açılı parantez içindeki tipler işte generics'tir. Generics, bir sınıf veya metodu belirli bir tipe bağlamadan, "hangi tiple çalışacağı sonrad…
Enum ve Wrapper Sınıfları
Bu bölümde iki küçük ama günlük hayatta sık kullanılan konuyu ele alıyoruz. Enum, sabit ve sınırlı bir değer kümesini tip güvenli biçimde temsil eder (haftanın günleri, sipariş durumu, yönler). Wrapper sınıfları ise i…
Lambda İfadeleri ve Functional Interface'ler
Java 8, dile köklü bir yenilik getirdi: davranışı (kodu) bir değer gibi taşıyabilmek. Lambda ifadeleri sayesinde bir metodu, bir değişkene atayıp parametre olarak geçebiliriz. Bu, koleksiyonları işlemekten olay dinley…
Stream API
Bir koleksiyondaki verileri işlerken genelde aynı şeyleri yaparız: filtrele, dönüştür, sırala, topla. Geleneksel for döngüleriyle bu işler hem uzar hem de "ne yapıldığı" "nasıl yapıldığı"nın içinde kaybolur. Stream AP…
Optional ile Null Güvenliği
null, programlamanın en sık hata kaynaklarından biridir; öyle ki onu icat eden Tony Hoare buna "milyar dolarlık hata" demiştir. Bir metot null döndürdüğünde, çağıran taraf bunu kontrol etmeyi unutursa kaçınılmaz sonuç…
Dosya İşlemleri ve I/O
Şimdiye kadar veriler programın içinde, bellekte yaşadı. Ama gerçek uygulamalar dış dünyayla konuşur: dosya okur/yazar, ağdan veri alır, kayıt tutar. Bu bölümde Java'da girdi/çıktı (I/O) işlemlerini, hem klasik akış (…
Çoklu İş Parçacığı ve Eşzamanlılık
Modern bilgisayarların birden çok çekirdeği var ve gerçek uygulamalar aynı anda birçok iş yapar: bir gösterge paneli onlarca servisten veri toplar, bir e-ticaret sitesi binlerce isteği aynı anda karşılar. Çoklu iş par…
Reflection ve Annotations
Şimdiye kadar yazdığın kod, derleme anında neyle çalışacağını biliyordu. Ama Spring, Hibernate, Jackson, JUnit gibi araçlar bir "sihir" yapıyormuş gibi görünür: sınıflarını tanır, nesnelerini oluşturur, alanlarını oku…
JDBC ile Veritabanı Bağlantısı
Gerçek uygulamalar verilerini kalıcı olarak saklamak ister; işte burada veritabanları devreye girer. JDBC (Java Database Connectivity), Java'nın ilişkisel veritabanlarıyla konuşmak için sunduğu standart API'dir. Sprin…
Build Araçları ve Bağımlılık Yönetimi (Maven / Gradle)
Tek dosyalık örneklerden gerçek projelere geçtiğinde yeni bir ihtiyaç doğar: onlarca kaynak dosyayı derlemek, başkalarının yazdığı kütüphaneleri (bağımlılıkları) indirip projeye eklemek, testleri çalıştırmak ve sonund…
Tasarım Desenleri (Design Patterns)
Yazılımcılar yıllar içinde aynı problemlerle defalarca karşılaştı: "tek bir örnek nasıl garanti edilir?", "nesne oluşturma mantığı nasıl gizlenir?", "uyumsuz iki arayüz nasıl birleştirilir?", "bir algoritma çalışma za…
Java Sürüm Evrimi (8 → 25)
Java, 2014'teki 8 sürümünden bu yana her 6 ayda bir yeni sürüm, her 2 yılda bir uzun destekli (LTS) sürüm çıkarıyor. LTS'ler: 8, 11, 17, 21, 25. Bu bölümün amacı sadece "şu özellik hangi sürümde geldi" demek değil; he…
Sürüm Geçişi: Riskler ve Kazanımlar
Yeni bir Java sürümüne geçmek genellikle kârlıdır — ama "derle, çalıştır, bitti" kadar basit değildir. Her büyük geçişin somut kazanımları (performans, güvenlik, dil özellikleri) olduğu kadar riskleri de (kaldırılan A…
Ağ Programlama (Networking) Temelleri
Bugün yazdığımız uygulamaların neredeyse hiçbiri yalnız çalışmaz: bir mobil uygulama sunucuya istek atar, bir web sitesi veritabanına bağlanır, mikroservisler birbirleriyle konuşur. Bütün bunların altında ağ programla…
Socket Programlama
Önceki bölümde ağın temel kavramlarını ve TCP/UDP'yi tanıdık. Şimdi TCP soketleriyle gerçek istemci-sunucu uygulamaları yazmayı derinleştiriyoruz. Soket, iki makine (veya aynı makinedeki iki süreç) arasındaki iletişim…
URL ve URL İşlemleri
Soket programlamada ham TCP/UDP kanallarıyla çalıştık. Ama web dünyasında kaynaklara genelde adresleriyle (URL) erişiriz: https://site.com/urunler?kategori=java. Java, bu adresleri ayrıştırmak, parçalarına ayırmak, gü…
URLConnection, HttpURLConnection ve HttpClient
URL'leri ayrıştırmayı öğrendik; şimdi onlara bağlanıp veri alıp vermeyi ele alıyoruz. Bir mobil uygulamanın API'ye istek atması, bir servisin başka bir servisi çağırması — hepsi HTTP üzerinden olur. Java bunu üç katma…
Erişim Belirleyiciler (Access Modifiers)
Nesne yönelimli tasarımın kalbinde kapsülleme (encapsulation) yatar: bir sınıfın iç ayrıntılarını gizleyip dışarıya yalnızca güvenli, kontrollü bir arayüz sunmak. Bunu sağlayan araç erişim belirleyicileridir. Her alan…
Paketler (Packages)
Bir proje büyüdükçe yüzlerce, binlerce sınıf olur. Bunları tek bir klasöre yığmak hem kaosa yol açar hem de isim çakışmalarına (iki farklı Date sınıfı gibi) neden olur. Paketler, sınıfları mantıksal gruplara ayıran ve…
Aggregation ve Composition (HAS-A İlişkisi)
Nesneler tek başına yaşamaz; birbirleriyle ilişkilidir. Kalıtım bölümünde IS-A ("bir tür ... olma": Köpek bir Hayvandır) ilişkisini gördük. Ama nesneler arası en yaygın ilişki aslında HAS-A ("sahip olma": Araba bir Mo…
İç Sınıflar (Inner Classes)
Java'da bir sınıfın içine başka bir sınıf yerleştirebilirsin. Bu iç sınıflar (nested classes), yalnızca bir yerde kullanılan yardımcı yapıları, ait oldukları sınıfın yanında tutmanı sağlar — kod hem düzenli hem de kap…
Anonim Sınıflar (Anonymous Classes)
Bazen bir arayüzü veya soyut sınıfı yalnızca bir kez, sadece o anda kullanmak için uygulamak istersin; ona ayrı bir isim/dosya vermek gereksizdir. Anonim sınıflar tam da bunun içindir: bir sınıfı tanımladığın yerde, i…
Singleton Sınıf
Bazı nesnelerden uygulamada tek bir tane olmalıdır: bir yapılandırma yöneticisi, bir log sistemi, bir veritabanı bağlantı havuzu. Bunlardan birden çok oluşturmak hem kaynak israfı hem de tutarsızlık (farklı ayar kopya…
Statik ve Dinamik Bağlama (Static & Dynamic Binding)
Bir metot çağrısı yazdığında — nesne.metot() — Java'nın hangi gerçek metodu çalıştıracağına karar vermesi gerekir. Bu karara bağlama (binding) denir ve iki zamanda olabilir: derleme anında (statik/early binding) veya…
Başlatma Blokları (Initializer Blocks)
Bir nesne new ile oluşturulurken veya bir sınıf ilk kez yüklenirken, alanların belirli değerlerle hazırlanması gerekir. Çoğu zaman bunu constructor'da veya alan tanımında yaparız. Ama Java iki ek araç sunar: örnek baş…
Iteratorlar (Iterators)
Bir koleksiyonun elemanlarını tek tek gezmek, programlamanın en sık yaptığı işlerden biridir. Ama farklı koleksiyonların (liste, küme, kuyruk...) iç yapıları çok farklıdır. Iterator, bu farkı gizleyen ortak bir gezint…
Comparable Arayüzü (Doğal Sıralama)
Nesneleri sıralamak istediğimizde, Java'nın "hangisi önce gelir?" sorusunu yanıtlaması gerekir. Sayılar için bu açıktır (küçükten büyüğe), String için alfabetiktir. Peki kendi sınıfların — Urun, Kisi? İşte burada Comp…
Comparator (Esnek ve Çoklu Sıralama)
Comparable bir tipe tek bir doğal sıra kazandırır. Ama gerçek hayatta aynı veriyi farklı zamanlarda farklı ölçütlere göre sıralamak isteriz: ürünleri kâh fiyata, kâh ada, kâh stoğa göre. Sınıfın içine her sıralamayı y…
Enumeration ve Legacy (Eski) Yapılar
Java'nın koleksiyon dünyası iki katmanlıdır: 1996'daki ilk sürümlerden kalan eski (legacy) sınıflar (Vector, Stack, Hashtable, Enumeration) ve Java 1.2 ile gelen modern Collections Framework (ArrayList, ArrayDeque, Ha…
Scanner Sınıfı
Scanner, Java'da metin girdisini okuyup parçalara ayırmanın en pratik yoludur. Klavyeden kullanıcı girdisi almak, bir dosyayı satır satır işlemek veya bir metni belirteçlere (token) ayırmak için kullanılır. Tek bir sı…
ArrayList Sınıfı
ArrayList, Java'da açık ara en çok kullanılan koleksiyondur. İçte boyutu otomatik büyüyen bir dizi tutar; böylece sabit boyutlu dizilerin (int[]) aksine eleman ekledikçe genişler. İndeksli hızlı erişim, kolay ekleme/s…
LinkedList Sınıfı
LinkedList, ArrayList'e alternatif bir List uygulamasıdır; ama iç yapısı tamamen farklıdır. Dizi yerine çift yönlü bağlı liste (doubly linked list) kullanır: her eleman bir "düğümdür" ve kendinden önceki ve sonraki dü…
HashMap Sınıfı
HashMap, bir anahtarı bir değere eşleyen koleksiyondur (key → value) ve ArrayList'ten sonra en çok kullanılan veri yapısıdır. "Kullanıcı adından kullanıcıya", "ürün kodundan stoğa", "kelimeden sayısına"... gibi her tü…
TreeMap, LinkedHashMap ve EnumMap
HashMap hızlıdır ama elemanları sırasız tutar. Çoğu zaman buna ihtiyacın yoktur — ama bazen anahtarların sıralı olması, ekleme sırasının korunması veya enum anahtarlar için özel hız gerekir. Bu konuda Map ailesinin üç…
Set Aileleri (HashSet, LinkedHashSet, TreeSet, EnumSet)
Set (küme), benzersiz elemanlar topluluğudur: aynı eleman iki kez bulunamaz. Bir listede yinelenenleri temizlemek, "bu öğe daha önce görüldü mü?" diye sormak veya matematiksel küme işlemleri yapmak için kullanılır. Ma…
PriorityQueue ve ArrayDeque
Bazı problemler "sıradaki elemanı" özel bir kurala göre ister: ya uçlardan (baş/son) erişim (yığın, kuyruk) ya da önceliğe göre erişim. Java bu iki ihtiyaca iki güçlü sınıfla yanıt verir: çift uçlu kuyruk ArrayDeque v…
StringBuilder Sınıfı
String Java'da değişmezdir (immutable): bir kez oluşturulan metin asla değişmez; "değiştirme" gibi görünen her işlem aslında yeni bir String üretir. Bu, güvenlik ve thread-güvenliği için harikadır ama bir metni parça…
Java 8 Yenilikleri (2014, LTS)
Java 8, dilin tarihindeki en dönüştürücü sürümdür. Fonksiyonel programlama öğelerini Java'ya getirerek nasıl kod yazdığımızı kökten değiştirdi. Bugün yazdığın modern Java'nın temeli bu sürümle atıldı; bu yüzden her bi…
Java 9 Yenilikleri (2017)
Java 9, dilin en büyük yapısal değişikliğini getirdi: Modül Sistemi (JPMS / Project Jigsaw). Bunun yanında günlük kodu kolaylaştıran birçok küçük ama değerli ekleme yaptı: koleksiyon fabrika metotları, Stream/Optional…
Java 10 Yenilikleri (2018)
Java 10, yarı yıllık sürüm temposunun ilk adımıydı ve görece küçük ama günlük kodda çok hissedilen bir yenilikle öne çıktı: var (yerel değişken tip çıkarımı). Ayrıca değişmez koleksiyon oluşturmayı kolaylaştıran topla…
Java 11 Yenilikleri (2018, LTS)
Java 11, Java 8'den sonra ikinci büyük LTS sürümüdür ve uzun yıllar üretimde en yaygın taban oldu. Çok sayıda günlük kolaylık getirdi: yeni String metotları, standart HttpClient, dosya G/Ç kısayolları, lambda'da var v…
Java 12 Yenilikleri (2019)
Java 12, dil ergonomisini iyileştiren önizleme özellikleri ve pratik kütüphane eklemeleri getirdi. En önemlisi, sonraki sürümlerde standartlaşacak switch ifadeleridir (switch expressions); ayrıca yeni String metotları…
Java 13 Yenilikleri (2019)
Java 13, iki önizleme özelliğiyle dil ergonomisini ileri taşıdı: çok satırlı metni dertten kurtaran text blocks ve switch ifadelerini tamamlayan yield anahtar kelimesi. İkisi de sonraki sürümlerde standartlaştı ve JDK…
Java 14 Yenilikleri (2020)
Java 14, önceki sürümlerin önizleme özelliklerini olgunlaştırdı ve hata ayıklamayı kökten kolaylaştıran bir yenilik getirdi. Öne çıkanlar: switch ifadelerinin standartlaşması, pattern matching for instanceof (önizleme…
Java 15 Yenilikleri (2020)
Java 15, iki önemli dil özelliğini öne çıkardı: sealed sınıflar (önizleme) ve text blocks'un standartlaşması. Sealed sınıflar, kalıtım hiyerarşilerini kontrol altına alarak güvenli ve eksiksiz modelleme sağlar; text b…
Java 16 Yenilikleri (2021)
Java 16, önceki sürümlerin iki büyük önizleme özelliğini standartlaştırdı: records ve pattern matching for instanceof. Ayrıca pratik stream eklemeleri (toList, mapMulti) getirdi. Bu, Java 17 LTS'e giden yolun son adım…
AWT'ye Giriş (Abstract Window Toolkit)
AWT (Abstract Window Toolkit), Java'nın ilk grafik arayüz (GUI) kütüphanesidir (1996). Pencere, buton, metin kutusu gibi bileşenleri ve bunların olaylarını (tıklama, tuş) yönetir. Bugün masaüstü GUI'de yerini büyük öl…
Swing'e Giriş
Swing, Java'nın AWT üzerine kurulu, daha zengin ve platformdan bağımsız masaüstü GUI kütüphanesidir (1998). AWT'nin işletim sistemine bağlı "ağır" bileşenlerinin aksine, Swing bileşenleri Java ile çizilir (lightweight…
Servlet'e Giriş
Servlet, sunucuya gelen bir HTTP isteğini işleyip yanıt üreten bir Java sınıfıdır. Java'nın web teknolojilerinin temelidir: bugün kullandığın Spring MVC, JSF ve neredeyse tüm Java web çatıları, perde arkasında servlet…
JSP'ye Giriş (JavaServer Pages)
JSP (JavaServer Pages), HTML içine dinamik Java verisi gömmenin klasik yoludur. Servlet'le saf Java içinden HTML yazmak (out.write("<h1>...")) zahmetlidir; JSP bunu tersine çevirir: bir HTML sayfası yazarsın, içine öz…
Düzenli İfadeler (Regular Expressions / Regex)
Regex, metin içinde desen aramak, doğrulamak ve değiştirmek için kullanılan güçlü bir mini dildir. "Bu metin geçerli bir e-posta mı?", "şu logdaki tüm tarihleri bul", "kart numarasını maskele" gibi işleri tek satırda…
Serialization (Serileştirme)
Serialization, bir Java nesnesini byte dizisine çevirme; deserialization ise byte dizisini geri nesneye dönüştürme işlemidir. Bu sayede bir nesneyi diske kaydedebilir, ağ üzerinden gönderebilir veya bir oturumda sakla…
Recursion (Özyineleme)
Özyineleme (recursion), bir metodun kendini çağırmasıdır. İlk bakışta tuhaf görünse de, doğası gereği "kendine benzeyen" problemler için (ağaç gezme, böl-ve-fethet, geri izleme) son derece doğal ve okunaklı bir araçtı…
Process API (Süreç Yönetimi)
Bazen Java programının dışındaki programları çalıştırman gerekir: bir sistem komutu, başka bir betik, harici bir araç. Veya çalışan süreçler hakkında bilgi almak istersin (PID, başlangıç zamanı, ebeveyn). Java'nın Pro…
Base64 Kodlama
Base64, ikili (binary) veriyi yalnızca güvenli ASCII karakterleriyle (A–Z, a–z, 0–9, +, /) temsil eden bir kodlama şemasıdır. Amaç, yalnızca metin taşıyabilen kanallardan (JSON, XML, e-posta, URL, HTTP başlıkları) iki…
Arrays Yardımcı Sınıfı
Diziler (int[], String[]...) Java'nın en temel veri yapısıdır: sabit boyutlu, hızlı, bellek açısından kompakt. Ama dizilerin metotları yoktur — sıralamak, aramak, kopyalamak, karşılaştırmak için java.util.Arrays yardı…
BitSet Sınıfı
BitSet, otomatik büyüyen bir bit dizisidir: her bayrak (true/false) yalnızca 1 bit yer kaplar. Çok sayıda açık/kapalı durumu (izinler, varlık kümeleri, "görüldü mü" işaretleri) tutmak için boolean[]'dan çok daha kompa…
Properties Sınıfı
Properties, anahtar-değer çiftlerinden oluşan bir yapılandırma deposudur ve hem anahtarlar hem değerler String'tir. Java uygulamalarında ayarları (veritabanı adresi, port, özellik bayrakları) ve uluslararasılaştırma (…
Math Sınıfı
Math, matematiksel işlemler için statik metotlar ve sabitler sunan yardımcı sınıftır. Mutlak değer, üs/kök, yuvarlama, trigonometri, logaritma... hepsi buradadır. Ayrıca bu konu, sayılarla çalışırken her geliştiricini…
Sayı Wrapper Sınıfları ve Autoboxing
Java'da iki tür veri vardır: ilkel tipler (int, double, boolean, char...) ve nesneler. İlkel tipler hızlı ve kompakttır ama nesne değildir — metotları yoktur, null olamaz ve koleksiyonlarda (List<int> yazılamaz) kulla…
Character ve Boolean Sınıfları
İki temel ilkel tipin — char ve boolean — wrapper sınıfları olan Character ve Boolean, küçük ama günlük kodda sık kullanılan yardımcılar sunar. Character, metin ayrıştırma ve doğrulamanın temelidir; Boolean ise mantık…
CompletableFuture (Asenkron Programlama)
Modern uygulamalar sürekli bekler: bir API'den yanıt, veritabanından sonuç, dosyadan veri. Bu beklemeleri tek tek, sırayla yapmak (senkron) zaman kaybıdır — özellikle birbirinden bağımsız işleri paralel yürütebilecekk…
Komut Satırı Argümanları
Bir programa çalışırken dışarıdan veri vermenin en temel yolu komut satırı argümanlarıdır. main metodunun String[] args parametresi, programı başlatırken verdiğin değerleri taşır. Komut satırı araçları (CLI), betikler…
Marker Interface (İşaretleyici Arayüz)
Marker (işaretleyici) interface, içinde hiç metot olmayan bir arayüzdür. Tuhaf görünür — metot yoksa ne işe yarar? Amacı bir sınıfa etiket koymaktır: "bu tip şu yeteneğe/izne sahiptir". Derleyici veya çalışma zamanı b…
@Deprecated ve Anotasyonlar
Anotasyonlar (annotations), koda meta-veri ekler: @Override, @Deprecated, @Entity, @Test... Kodun davranışını doğrudan değiştirmezler ama derleyici, araçlar ve framework'ler bunları okuyup ona göre davranır. Reflectio…
JVM: Garbage Collection ve JIT
Java'nın "yaz bir kez, her yerde çalış" gücü ve performansının arkasında JVM (Java Virtual Machine) vardır. JVM'in iki kritik mekanizması, programının belleğini ve hızını otomatik olarak yönetir: Garbage Collection (ç…
Java vs C++
Java, 1990'larda büyük ölçüde C++'ın karmaşıklığına ve tehlikelerine bir yanıt olarak tasarlandı. C++'ın C-benzeri sözdizimini ve nesne yönelimli yapısını korurken; elle bellek yönetimi, işaretçiler ve çoklu kalıtım g…
JVM Mimarisi
JVM (Java Virtual Machine), Java'nın "bir kez yaz, her yerde çalıştır" (write once, run anywhere) sözünü mümkün kılan motordur. Java kodu doğrudan makine koduna değil, platformdan bağımsız bytecode'a derlenir; JVM bu…
JDK vs JRE vs JVM
Java dünyasına yeni girenlerin en çok karıştırdığı üç kısaltma: JDK, JRE, JVM. Üçü de ilişkilidir ama farklı şeylerdir ve birbirinin içine geçer. Bu ayrımı netleştirmek, "neyi kurmalıyım?", "üretim sunucusunda ne gere…
Type Casting (Tip Dönüşümü)
Type casting, bir değeri/nesneyi bir tipten başka bir tipe dönüştürmektir. Java güçlü tipli bir dildir; bu dönüşümler kurallara bağlıdır. İki tamamen farklı bağlam vardır: ilkel tipler arasında (sayısal dönüşüm) ve ne…
Unicode ve Karakter Kodlama
Metin işlemenin altında, çoğu zaman görmezden geldiğimiz ama hata yaptığında baş ağrıtan bir katman vardır: karakter kodlama. "Türkçe karakterler neden bozuk çıktı?", "emoji'nin uzunluğu neden 2?", "bu dosya neden anl…
Date & Time (java.time)
Tarih ve saatle çalışmak, neredeyse her uygulamada gereklidir: kayıt zamanı, doğum tarihi, randevu, zaman damgası, geri sayım. Java 8'e kadar bu, hatalı ve sinir bozucu Date/Calendar sınıflarıyla yapılırdı. Java 8, ja…
Operatörler
Operatörler, değerler üzerinde işlem yapan sembollerdir: toplama, karşılaştırma, mantıksal birleştirme... Programlamanın en temel yapı taşlarıdır ve her satırda kullanılırlar. Bu konu, Java operatörlerini kategori kat…
Bitwise (Bit Düzeyi) Operatörler
Bit operatörleri, sayıları bir bütün olarak değil, onları oluşturan tek tek bitler (0/1) üzerinde işler. Günlük iş kodunda nadir görünseler de; izin/bayrak sistemleri, performans-kritik kod, grafik, ağ protokolleri ve…
Javadoc (Kod Dokümantasyonu)
Kod yalnızca çalışması için değil, başkalarının (ve gelecekteki senin) anlaması için de yazılır. Javadoc, Java'nın standart dokümantasyon sistemidir: kaynak koddaki özel yorumlardan profesyonel HTML API dokümanları ür…
Değişken Kapsamı (Variable Scope)
Bir değişkenin kapsamı (scope), ona nereden erişilebileceğini ve ne kadar süre yaşayacağını belirler. Yanlış kapsam seçimi, "değişken bulunamıyor" derleme hatalarından, "değer beklediğim gibi değişmedi" mantık hatalar…
Constructor'lar (Yapıcılar)
Constructor (yapıcı), bir nesne new ile oluşturulurken otomatik çağrılan özel bir metottur. Görevi, nesneyi geçerli bir başlangıç durumuna getirmektir — alanları anlamlı değerlerle doldurmak. İyi tasarlanmış construct…
Paketleme ve Dağıtım (JAR, Multi-Release JAR, jlink, jpackage)
Kodu yazıp derlemek bir şey; onu başkalarının çalıştırabileceği bir artefakt olarak paketleyip dağıtmak başka bir şeydir. Bu konu, Java uygulamalarını paketleme ve dağıtma araçlarını ele alır: klasik JAR'dan, sürüme d…
E-posta Gönderme
Birçok uygulama e-posta gönderir: kayıt onayı, parola sıfırlama, bildirim, fatura. Java'da bu, standart kütüphanede değil, Jakarta Mail (eski adıyla JavaMail) kütüphanesiyle yapılır; Spring kullanıyorsan JavaMailSende…
Kaldırılmış ve Eski (Legacy) Özellikler
Java 25+ yıllık bir dildir ve geriye dönük uyumluluğa büyük önem verir. Yine de zamanla bazı özellikler kullanımdan kaldırılır (deprecated) ve sonunda silinir (removed). Bir geliştirici olarak, eski öğretici/kod örnek…
Java 17 Yenilikleri (2021, LTS)
Java 17, Java 11'den sonra üçüncü büyük LTS sürümüdür ve uzun süre modern Java'nın fiili standardı oldu. Java 9–16 arasında önizleme olarak olgunlaşan birçok özelliği standartlaştırdı; en önemlisi sealed sınıflardır.…
Java 18 Yenilikleri (2022)
Java 18, LTS olmayan bir ara sürümdür ve görece küçük ama pratikte hissedilen iyileştirmeler getirdi. En önemlisi, yıllardır süren bir taşınabilirlik sorununu çözen UTF-8'in varsayılan karakter kümesi olmasıdır (JEP 4…
Java 19 Yenilikleri (2022)
Java 19, LTS olmayan bir sürüm olsa da, Java'nın geleceğini şekillendiren iki büyük özelliğin önizleme olarak ilk kez göründüğü sürümdür: Sanal Thread'ler (Project Loom) ve Record Patterns. Bu özellikler Java 21'de st…
Java 20 Yenilikleri (2023)
Java 20, LTS olmayan bir rafine etme (refinement) sürümüdür: yeni "büyük" özellikler getirmek yerine, Java 21 LTS'te standartlaşacak özellikleri önizleme iterasyonlarıyla olgunlaştırdı. Bu yüzden Java 20'yi, 21'e gide…
Java 21 Yenilikleri (2023, LTS)
Java 21, Java 17'den sonraki büyük LTS sürümüdür ve son yılların en önemli sürümlerinden biridir. Java 19-20 boyunca önizleme olarak olgunlaşan büyük özellikleri standartlaştırdı: sanal thread'ler, record patterns, sw…
Java 22 Yenilikleri (2024)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Bu portal JDK 21 üzerinde çalışır; Java 22+ > özellikleri burada derlenmez. Aşağıdaki kod parçacıkları JDK 22 gerektirir ve yalnızca > tanıtım amaçlıdır. Çalışan sürümler…
Java 23 Yenilikleri (2024)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Portal JDK 21 üzerinde çalışır; Java 23+ > özellikleri burada derlenmez. Kod parçacıkları JDK 23 gerektirir, tanıtım amaçlıdır.
Java 24 Yenilikleri (2025)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Portal JDK 21 üzerinde çalışır; Java 24+ > özellikleri burada derlenmez. Kod parçacıkları JDK 24 gerektirir, tanıtım amaçlıdır.
Java 25 Yenilikleri (2025, LTS) — En Yeni Sürüm
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Portal JDK 21 üzerinde çalışır; Java 25 > özellikleri burada derlenmez. Kod parçacıkları JDK 25 gerektirir, tanıtım amaçlıdır.
Spring Nedir ve IoC Felsefesi
Spring'i öğrenmenin en iyi yolu, onun hangi sorunu çözdüğünü anlamaktır. Çünkü Spring bir "sihir" değil; uzun yıllar boyunca kurumsal Java uygulamalarında tekrar tekrar karşılaşılan bir acıya verilmiş, çok zarif bir c…
Dependency Injection (Bağımlılık Enjeksiyonu)
Önceki bölümde IoC felsefesini ve container'ın nesneleri bizim yerimize oluşturup bağladığını gördük. Şimdi bu bağlamanın nasıl yapıldığına yakından bakıyoruz. Dependency Injection (DI), bir nesnenin ihtiyaç duyduğu b…
Bean Yaşam Döngüsü ve Scope
Container'ın bean'leri oluşturup bağladığını biliyoruz. Peki bu bean'ler tam olarak ne zaman oluşturulur, ne zaman yok edilir ve container içinde kaç tane kopyaları olur? Bu sorular yaşam döngüsü (lifecycle) ve kapsam…
Yapılandırma Yöntemleri ve Stereotype Anotasyonları
Container'ın bean'leri yönettiğini biliyoruz. Peki container'a "hangi bean'ler var?" diye nasıl söyleriz? Spring bunun için birkaç yol sunar ve modern projelerde genelde ikisini birlikte kullanırız: kendi sınıflarımız…
Spring AOP (Aspect-Oriented Programming)
Her ciddi uygulamada, asıl iş mantığının yanında tekrar eden "yan görevler" vardır: loglama, güvenlik kontrolü, transaction yönetimi, performans ölçümü, önbellekleme. Bunlara kesişen ilgiler (cross-cutting concerns) d…
SpEL, Olaylar (Events) ve Profiller
Spring çekirdeğinin son durağında, container'ı daha esnek ve güçlü kılan üç yardımcı yeteneği işliyoruz: ifadeleri çalışma anında değerlendiren SpEL, bileşenleri gevşek bağlayan olay mekanizması ve uygulamayı ortama g…
Veri Erişimi: Spring JDBC ve JdbcTemplate
Neredeyse her kurumsal uygulama bir veritabanıyla konuşur. Java bölümünde ham JDBC'yi öğrendin ve onun ne kadar "kazan kodu" (boilerplate) gerektirdiğini gördün: bağlantı aç, statement hazırla, ResultSet'i gez, kaynak…
Transaction Yönetimi
Bir veritabanı işlemi çoğu zaman tek bir adım değildir: para transferinde birinden düşülür, diğerine eklenir; sipariş oluşturulurken başlık ve kalemler birlikte yazılır. Bu adımların hepsi başarılı olmalı ya da hiçbir…
Doğrulama (Validation)
Bir uygulamanın en kırılgan sınırı, dış dünyadan veri aldığı yerdir: kullanıcı formları, API istekleri, dosya içerikleri. "Yaş negatif olmasın", "e-posta geçerli olsun", "ad boş olmasın" gibi kuralları her yerde elle…
Spring Boot Nedir ve İlk Uygulama
Spring Framework'ün gücünü gördük; ama saf Spring'le bir web uygulaması kurmak hâlâ epey yapılandırma (sunucu kurulumu, bağımlılık uyumu, XML/Java config) gerektirir. Spring Boot, bu kurulum yükünü neredeyse sıfıra in…
REST API Geliştirme
İlk Boot uygulamamızda bir GET endpoint'i yazdık. Şimdi REST API'lerin tüm mekaniğini ele alıyoruz: kaynakları oluşturmak, okumak, güncellemek ve silmek (CRUD); doğru HTTP metotlarını ve durum kodlarını kullanmak; ist…
Spring Data JPA
JDBC ve JdbcTemplate ile veritabanına SQL yazarak eriştik. Spring Data JPA, bir adım daha ileri gider: nesneleri tablolara eşler (ORM, Hibernate ile) ve veri erişim kodunun büyük kısmını sen hiç yazmadan üretir. Bir a…
Validation ve Global Exception Handling
Bir API'nin dış dünyaya bakan iki kritik sorumluluğu vardır: gelen veriyi doğrulamak ve hata olduğunda istemciye anlamlı, tutarlı bir cevap dönmek. Spring Framework bölümünde Bean Validation'ı öğrendik; şimdi onu bir…
Spring Security
Bir uygulamayı dünyaya açtığın an, "kimsin?" ve "ne yapmaya yetkilisin?" sorularını cevaplamak zorundasın. Spring Security, kimlik doğrulama (authentication) ve yetkilendirme (authorization) için Java dünyasının fiili…
Caching, Async ve Scheduling
Bir uygulamayı hızlı ve verimli kılmanın üç güçlü aracını ele alıyoruz: tekrarlayan pahalı işlemleri önbelleğe almak (@Cacheable), uzun süren işleri arka plana atmak (@Async) ve belirli aralıklarla otomatik görev çalı…
Actuator ve Üretim Araçları
Bir uygulamayı yazmak işin yarısıdır; onu üretimde çalışır, izlenebilir ve yönetilebilir tutmak diğer yarısıdır. "Uygulama ayakta mı? Belleği ne durumda? Saniyede kaç sipariş geliyor?" sorularını cevaplamak gerekir. S…
Test
Çalışan bir kod yazmak yetmez; çalışmaya devam ettiğini garanti etmek gerekir. Testler, kodun doğruluğunu otomatik olarak doğrular; bir değişiklik bir şeyi bozduğunda anında haber verir. Bu güven, projeyi korkusuzca g…
Dağıtık Transaction ve Saga Pattern
@Transactional ile tek bir veritabanında "ya hepsi ya hiçbiri" garantisini öğrendik. Ama mikroservis mimarisinde bir iş akışı birden çok servise ve veritabanına yayılır: sipariş servisi, stok servisi, ödeme servisi, k…
Spring Boot Runners (Başlangıç Görevleri)
Bir uygulama başladığında, ilk istekten önce bir kez çalışması gereken işler olur: önbellek ısıtma, başlangıç verisi yükleme (seed), bağlantı kontrolü, bir kuyruğu dinlemeye başlama, tek seferlik geçiş (migration). Sp…
Servis Bileşenleri ve Katmanlı Mimari
Bir Spring Boot uygulaması büyüdükçe, tüm mantığı controller'lara doldurmak sürdürülemez hale gelir. Sağlam uygulamalar katmanlı mimari kullanır: her katmanın tek bir sorumluluğu vardır. Bu konu, Spring'in stereotip a…
Spring Boot Interceptor (HandlerInterceptor)
Birçok istekte tekrar eden işler vardır: loglama, süre ölçme, kimlik/yetki kontrolü, istek sayacı, dil ayarı. Bunları her controller metoduna tek tek yazmak hem tekrar hem hata kaynağıdır. Interceptor, Spring MVC sevi…
Spring Boot Servlet Filter
Filter, Java web dünyasının (Servlet API'si) en eski ara katman mekanizmasıdır (topic 65). Bir isteği, daha Spring MVC'ye (DispatcherServlet) ulaşmadan en dışta karşılar ve yanıt çıkarken son olarak görür. Spring Boot…
Spring Boot CORS Desteği
Modern web uygulamalarında frontend (örn. https://uygulamam.com) ve backend API (örn. https://api.uygulamam.com) genelde farklı kökenlerde (origin) çalışır. Tarayıcılar güvenlik gereği, bir sayfanın kendi kökeni dışın…
Application Properties ve Yapılandırma
Bir uygulamanın davranışını koda gömmek yerine dışarıdan yapılandırmak, profesyonel geliştirmenin temelidir: veritabanı adresi, port, özellik bayrakları, dış servis anahtarları... Aynı kod farklı ortamlarda (geliştirm…
Spring Boot Logging (Günlükleme)
System.out.println hata ayıklamak için yeterli görünür ama üretimde işe yaramaz: seviye yok, zaman damgası yok, kapatılamaz, dosyaya yazılamaz, performansı bozar. Profesyonel uygulamalar logging kullanır. Spring Boot,…
REST Tüketimi (RestClient / RestTemplate / WebClient)
Bir uygulama sık sık başka servislerin API'lerini çağırır: bir ödeme servisi, bir döviz kuru API'si, başka bir mikroservis. Bu konuya "REST tüketimi" (consuming REST) denir. Önceki konuda (topic 01) API sunmayı öğrend…
Spring Boot Dosya İşleme (Upload / Download)
Birçok uygulama dosya alıp verir: profil fotoğrafı yükleme, CSV/Excel içe aktarma, PDF/rapor indirme, belge yönetimi. Spring Boot, dosya yükleme (multipart) ve indirme işlemlerini basit anotasyonlarla destekler. Bu ko…
Uluslararasılaştırma (i18n)
Uygulaman birden çok dilde kullanıcıya hitap ediyorsa, metinleri koda gömmek yerine dile göre dışarıdan sağlamalısın. i18n (internationalization — i + 18 harf + n), uygulamayı farklı dil ve bölgelere uyarlayabilir hal…
Spring Boot OAuth2 ve JWT
Modern API'ler durumsuz (stateless) kimlik doğrulama kullanır: sunucu oturum (session) tutmaz; istemci her istekte kim olduğunu kanıtlayan bir token taşır. Bu token genelde bir JWT (JSON Web Token)'dır ve OAuth2 akışl…
Spring Boot Annotations (Anotasyonlara Genel Bakış)
Spring Boot, "yapılandırmayı koda gömme" felsefesini anotasyonlarla hayata geçirir. XML yapılandırma dosyaları yerine, sınıflarını ve metotlarını anotasyonlarla işaretlersin; Spring bunları okuyup bean'leri oluşturur,…
Gömülü Sunucu Yapılandırması (Tomcat Port & Sunucu Ayarları)
Spring Boot'un en büyük kolaylıklarından biri gömülü web sunucusudur: uygulaman bir .jar olarak çalışır ve içinde Tomcat (varsayılan), Jetty veya Undertow bulunur — ayrıca bir sunucu kurup .war dağıtmana gerek yoktur.…
Eureka — Servis Keşfi (Service Discovery)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Eureka, Spring Cloud bağımlılığı ve birden > çok ayrı servis gerektirir; bu portal (tek JVM, JDK 21) bunu çalıştıramaz. Aşağıdaki kod/yapı > tanıtım amaçlıdır.
Eureka'ya Servis Kaydı ve Servisler Arası Çağrı
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Spring Cloud + Eureka + birden çok servis > gerektirir; portalda çalışmaz. Kod tanıtım amaçlıdır.
API Gateway (Spring Cloud Gateway)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Spring Cloud Gateway + birden çok servis > gerektirir; portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
Spring Cloud Config Server (Merkezi Yapılandırma)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Spring Cloud Config + bir Git deposu + birden çok > servis gerektirir; portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
Spring Cloud Config Client (Merkezi Ayarı Tüketme)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Spring Cloud Config + çalışan bir Config Server > gerektirir; portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
API Dokümantasyonu (SpringDoc OpenAPI / Swagger UI)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. SpringDoc OpenAPI ek bağımlılık gerektirir; > portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
Spring Boot Admin (Server / Client)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Spring Boot Admin ek bağımlılık + birden çok > servis gerektirir; portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
Dağıtık İzleme (Distributed Tracing)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Micrometer Tracing + Zipkin/Tempo + birden çok > servis gerektirir; portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
Docker İmajı Oluşturma
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Docker, bir konteyner ortamı gerektirir; portalda > çalışmaz. Komutlar/dosyalar tanıtım amaçlıdır.
Spring Boot ile Apache Kafka
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Kafka, çalışan bir Kafka broker'ı + ek bağımlılık > gerektirir; portalda çalışmaz. Kod tanıtım amaçlıdır.
Spring Boot WebSocket (Gerçek Zamanlı İletişim)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. WebSocket starter + bir tarayıcı/istemci > gerektirir; portalda çalışmaz. Kod tanıtım amaçlıdır.
Spring Boot Batch (Toplu İşleme)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Spring Batch starter + bir veritabanı (iş > meta-verisi için) gerektirir; portalda çalışmaz. Kod tanıtım amaçlıdır.
Spring Boot Flyway (Veritabanı Şema Migration'ı)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Flyway bağımlılığı + bir veritabanı gerektirir; > portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
Spring Boot ile E-posta Gönderme
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. spring-boot-starter-mail + bir SMTP sunucusu > gerektirir; portalda çalışmaz. Kod tanıtım amaçlıdır. (E-postanın genel/saf Java tarafı için > Java bölümündeki "E-posta Gön…
Dayanıklılık: Resilience4j (ve Hystrix)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Resilience4j bağımlılığı + (anlamlı olması için) > uzak servisler gerektirir; portalda çalışmaz. Kod tanıtım amaçlıdır.
Başlangıç: Initializr, CLI, Bootstrapping ve Araçlar
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Anlatılan araçlar (Initializr, CLI, STS) proje > oluşturma/geliştirme ortamıyla ilgilidir; portalda çalıştırılmaz. Tanıtım amaçlıdır. (Bu konu > listendeki "Quick Start us…
Build Systems, Starter'lar ve Kod Yapısı
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Build araçları/proje yapısıyla ilgili kavramsal > bir konudur. (Listendeki "Build Systems", "Starters" ve "Code Structure" başlıklarını birlikte > ele alır. Build araçları…
WAR Dağıtımı (Harici Tomcat'e Dağıtım)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Harici bir Tomcat sunucusu gerektirir; portalda > çalışmaz. Kod/yapı tanıtım amaçlıdır.
Spring Boot Thymeleaf (Sunucu Tarafı Şablonlar)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. spring-boot-starter-thymeleaf bağımlılığı > gerektirir (portal classpath'inde yok); portalda çalışmaz. Kod tanıtım amaçlıdır.
Spring Boot'ta HTTPS Etkinleştirme
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. HTTPS bir TLS sertifikası/keystore gerektirir; > portalda çalışmaz. Yapılandırma tanıtım amaçlıdır.
Spring Boot ile Twilio (SMS / İletişim)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. Twilio SDK + bir Twilio hesabı (API anahtarı) > gerektirir; portalda çalışmaz. Kod tanıtım amaçlıdır.
Spring Boot ve Google Cloud Platform (GCP)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. GCP, bir Google Cloud hesabı/kimlik bilgisi + > Spring Cloud GCP bağımlılıkları gerektirir; portalda çalışmaz. Kod/yapı tanıtım amaçlıdır.
Google OAuth2 ile Giriş (Social Sign-In)
> ⚠️ Bu konuda çalıştırılabilir örnek yoktur. spring-boot-starter-oauth2-client + Google'da > kayıtlı bir OAuth uygulaması (client id/secret) gerektirir; portalda çalışmaz. Kod/yapı tanıtım > amaçlıdır.
Spring ve Spring Boot: Temel Farklar
Bu eğitimde önce Spring Framework'ün çekirdeğini, sonra Spring Boot'u öğrendik. Şimdi ikisini yan yana koyup farkı net görelim — çünkü "Spring mi Spring Boot mu?" sorusu yeni başlayanların en sık karıştırdığı konudur.…
Ne Zaman Hangisi ve Geçiş
Temel farkları gördükten sonra pratik soru şu: yeni bir projede hangisini seçmeli, var olan düz Spring projesini Boot'a taşımalı mı, taşırsan nasıl? Bu bölüm bu kararları netleştirir.
Java 8 — Detaylı Sürüm Analizi ve Örnekler
> Bu klasör, Java 8 sürümünün getirdiği tüm önemli özellikleri derinlemesine > anlatan Türkçe bir dokümantasyon ve her özellik için çalışan, derlenebilir > örnek .java dosyaları içerir.
Java 9 (Eylül 2017) — Detaylı Türkçe Analiz
| Bilgi | Değer | |-------|-------| | Sürüm | Java SE 9 (JDK 9) | | Çıkış Tarihi | 21 Eylül 2017 | | LTS mi? | HAYIR (LTS değildir) | | Destek Durumu | SONA ERDİ — Java 9 kısa ömürlü bir "feature release" idi. Genel d…
Java 10 (Mart 2018) — Detayli Surum Analizi
> Bu klasor, Java 10'un getirdigi yenilikleri Turkce, derinlemesine ve calisan kod ornekleriyle anlatir.
Java 11 (Eylül 2018) — LTS Sürüm Detaylı Analizi
> Çıkış Tarihi: Eylül 2018 > Sürüm Tipi: LTS (Long Term Support — Uzun Süreli Destek) ⭐ > Önceki LTS: Java 8 (Mart 2014) > Sonraki LTS: Java 17 (Eylül 2021)
Java 12 (Mart 2019) — Detaylı Sürüm Analizi
> Çıkış Tarihi: 19 Mart 2019 > Sürüm Tipi: Standart (feature) sürüm — LTS DEĞİL > Destek Modeli: Java 12, 6 aylık sürüm döngüsünün bir parçasıdır. Java 13 (Eylül 2019) çıktığında resmî destek bitmiştir. Yani Java 12 k…
Java 13 (Eylül 2019) — Detaylı Sürüm Analizi
> Bu doküman, Java 13 ile gelen yenilikleri Türkçe, derinlemesine ve gerçek > hayat örnekleriyle anlatır. İlgili çalışan kod için bkz. TextBlocksPreview.java.
Java 14 (Mart 2020) — Detaylı Sürüm Analizi
> Bu doküman Java 14 sürümüyle gelen önemli dil ve platform özelliklerini Türkçe olarak, > "nedir / neden geldi / ne işe yarar / nerede kolaylık sağlar / eski vs yeni / gerçek hayat" > başlıklarıyla derinlemesine anla…
Java 15 (Eylül 2020) — Detaylı Sürüm Analizi
> Bu doküman Java 15 sürümünü Türkçe olarak, her özellik için > NEDİR / NEDEN GELDİ / NE İŞE YARAR / NEREDE KOLAYLIK SAĞLAR / > ESKİ vs YENİ / GERÇEK HAYAT ÖRNEĞİ başlıklarıyla derinlemesine açıklar.
Java 16 (Mart 2021) — Detaylı Türkçe Dokümantasyon
| Özellik | Değer | |---|---| | Sürüm | Java SE 16 / JDK 16 | | Çıkış Tarihi | 16 Mart 2021 | | LTS mi? | HAYIR — kısa destekli ("feature release") sürümdür | | Destek Durumu | Java 17 (Eylül 2021) çıkınca destek sona…
Java 17 (Eylül 2021) — LTS — Detaylı Türkçe Dokümantasyon
> Java 17, Java 8 ve Java 11'den sonra kurumsal dünyanın en çok hedeflediği > LTS sürümüdür. Bu klasör, bu repo'nun EN DETAYLI bölümüdür.
Java 18 (Mart 2022)
| Özellik | Değer | |---|---| | Sürüm | Java 18 (JDK 18) | | Çıkış Tarihi | 22 Mart 2022 | | Destek Türü | Feature Release (kısa vadeli, LTS DEĞİL) | | LTS mı? | Hayır. Sonraki LTS Java 21'dir (Eylül 2023). | | Önceki…
Java 19 (Eylül 2022)
| Özellik | Değer | |---|---| | Sürüm | Java 19 (JDK 19) | | Çıkış Tarihi | 20 Eylül 2022 | | Destek Türü | Feature Release (kısa vadeli, LTS DEĞİL) | | LTS mı? | Hayır | | Tarihsel Önemi | Project Loom (Virtual Threa…
Java 20 (Mart 2023)
| Özellik | Değer | |---|---| | Sürüm | Java 20 (JDK 20) | | Çıkış Tarihi | 21 Mart 2023 | | Destek Türü | Feature Release (kısa vadeli, LTS DEĞİL) | | LTS mı? | Hayır. Bir sonraki sürüm olan Java 21 LTS'in hemen önce…
Java 21 (Eylül 2023) — LTS — YENİ KURUMSAL STANDART
| Özellik | Değer | |---|---| | Sürüm | Java 21 (JDK 21) | | Çıkış Tarihi | 19 Eylül 2023 | | Destek Türü | LTS (Long-Term Support) — UZUN VADELİ DESTEK | | LTS mı? | EVET. Java 8, 11, 17'den sonraki en yeni LTS. | |…
Java 22 (Mart 2024) — Detaylı Türkçe Analiz
| Özellik | Değer | |--------------------|--------------------------------------------------------------| | Sürüm | Java SE 22 / JDK 22 | | Çıkış tarihi | 19 Mart 2024 | | Tür | Feature release (non-LTS) — kısa destek…
Java 23 — Sürüm Analizi ve Özellikler
> Bu doküman Java 23 sürümünü Türkçe olarak detaylı şekilde açıklar. Hedef kitle: > Java geliştiricileri, eğitmenler ve sürümler arası geçişi planlayanlar.
Java 24 — Detaylı Sürüm Analizi (Türkçe)
> Bu doküman, Java 24 ile gelen önemli özellikleri "NEDİR / NEDEN GELDİ / NE İŞE YARAR / > NEREDE KOLAYLIK SAĞLAR / ESKİ vs YENİ / GERÇEK HAYAT ÖRNEĞİ" başlıkları altında > Türkçe olarak açıklar. Eğitim ve referans am…
Java 25 (Eylül 2025) — EN GÜNCEL LTS SÜRÜMÜ
> Bu klasör, Java-Versiyon-Analizi serisinin en detaylı bölümüdür. > Çünkü Java 25, şu an piyasadaki en güncel LTS (Long-Term Support) sürümüdür > ve 2026 itibarıyla kurumsal projelerin birincil hedef sürümüdür.
Multi-DataSource (Çoklu Veri Kaynağı)
Tek bir Spring Boot uygulamasından birden fazla veritabanına (ör. PostgreSQL + Oracle) aynı anda bağlanma.
React
Bileşen tabanlı modern arayüz geliştirme ve Spring Boot REST API’leri ile veri alışverişi.
Apache Kafka
Olay tabanlı mimari için dağıtık mesajlaşma: producer/consumer ve Spring Kafka entegrasyonu.
Redis
Bellek-içi veri deposu ile önbellekleme, oturum yönetimi ve Spring Data Redis kullanımı.