{"id":40224,"date":"2026-02-25T13:41:01","date_gmt":"2026-02-25T10:41:01","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=40224"},"modified":"2026-02-25T13:41:01","modified_gmt":"2026-02-25T10:41:01","slug":"core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/","title":{"rendered":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi"},"content":{"rendered":"<h2>Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi<\/h2>\n<p><body><\/p>\n<h2>Java Geli\u015ftiricileri \u0130\u00e7in Bilgi Tazeleyici: Core Java Quiz Neden \u00d6nemli?<\/h2>\n<p>Java, yaz\u0131l\u0131m d\u00fcnyas\u0131n\u0131n en k\u00f6kl\u00fc ve yayg\u0131n olarak kullan\u0131lan programlama dillerinden biridir. Geni\u015f uygulama alanlar\u0131, platform ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131 ve g\u00fc\u00e7l\u00fc ekosistemi sayesinde milyonlarca geli\u015ftirici taraf\u0131ndan tercih edilmektedir. Bir Java geli\u015ftiricisi olarak kariyerinizde ilerlemek, yeni projelere dahil olmak veya teknik m\u00fclakatlarda ba\u015far\u0131l\u0131 olmak i\u00e7in Core Java konular\u0131na hakim olmak vazge\u00e7ilmezdir. Temel Java bilgisi, dilin derinliklerine inebilmenizin, daha karma\u015f\u0131k \u00e7er\u00e7eveleri (Spring, Hibernate vb.) anlayabilmenizin ve verimli, hatas\u0131z kod yazabilmenizin temelini olu\u015fturur.<\/p>\n<p>Bu makale, Core Java bilginizi test etmek, eksiklerinizi belirlemek ve \u00f6nemli kavramlar\u0131 peki\u015ftirmek amac\u0131yla haz\u0131rlanm\u0131\u015ft\u0131r. Her bir b\u00f6l\u00fcm, belirli bir Core Java konusuna odaklanacak, konuya dair bir soru sunacak ve ard\u0131ndan detayl\u0131 bir a\u00e7\u0131klama ile do\u011fru cevab\u0131 verecektir. Bu rehber, hem yeni ba\u015flayanlar hem de deneyimli geli\u015ftiriciler i\u00e7in de\u011ferli bir kaynak olacakt\u0131r. Haydi, Java bilginizi s\u0131namaya ba\u015flayal\u0131m!<\/p>\n<h2>Java Temelleri ve Ortam\u0131<\/h2>\n<p>Java&#8217;n\u0131n temel yap\u0131 ta\u015flar\u0131, dilin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak i\u00e7in kritik \u00f6neme sahiptir. JVM&#8217;den veri tiplerine, operat\u00f6rlerden String y\u00f6netimine kadar bu b\u00f6l\u00fcm, Java&#8217;n\u0131n \u00e7ekirdek bile\u015fenlerine odaklanmaktad\u0131r.<\/p>\n<h3>JVM, JRE, JDK Farklar\u0131<\/h3>\n<p><strong>Soru:<\/strong> Bir Java uygulamas\u0131n\u0131 derlemek ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in hangi bile\u015fenlere ihtiyac\u0131n\u0131z vard\u0131r? JVM, JRE ve JDK aras\u0131ndaki temel farklar\u0131 a\u00e7\u0131klay\u0131n\u0131z.<\/p>\n<p><strong>Cevap:<\/strong> Bir Java uygulamas\u0131n\u0131 derlemek ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <strong>JDK (Java Development Kit)<\/strong> bile\u015fenine ihtiyac\u0131n\u0131z vard\u0131r. JDK, Java uygulamalar\u0131 geli\u015ftirmek i\u00e7in gereken t\u00fcm ara\u00e7lar\u0131 (derleyici &#8211; <code>javac<\/code>, hata ay\u0131klay\u0131c\u0131 &#8211; <code>jdb<\/code> vb.) ve ayn\u0131 zamanda JRE&#8217;yi (Java Runtime Environment) i\u00e7erir. JRE ise, bir Java uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gerekli olan sanal makineyi (JVM &#8211; Java Virtual Machine) ve temel k\u00fct\u00fcphaneleri bar\u0131nd\u0131r\u0131r. K\u0131saca, <strong>JDK geli\u015ftirme i\u00e7in<\/strong>, <strong>JRE \u00e7al\u0131\u015ft\u0131rma i\u00e7in<\/strong>, <strong>JVM ise Java bytecode&#8217;unu yorumlay\u0131p y\u00fcr\u00fcten soyut bir makinedir<\/strong>. Yani, JDK hem geli\u015ftirme hem de \u00e7al\u0131\u015ft\u0131rma yetene\u011fi sunarken, JRE yaln\u0131zca \u00e7al\u0131\u015ft\u0131rma yetene\u011fi sa\u011flar ve JVM ise bu \u00e7al\u0131\u015ft\u0131rma i\u015fleminin temelini olu\u015fturur.<\/p>\n<h3>\u0130lkel Veri Tipleri ve Referans Tipleri<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da <code>int<\/code> ve <code>Integer<\/code> aras\u0131ndaki fark nedir? Ne zaman hangisini tercih etmelisiniz?<\/p>\n<p><strong>Cevap:<\/strong> <code>int<\/code>, Java&#8217;daki sekiz ilkel veri tipinden biridir ve do\u011frudan bellek \u00fczerinde de\u011fer saklar. Haf\u0131za kullan\u0131m\u0131 a\u00e7\u0131s\u0131ndan daha verimlidir ve varsay\u0131lan de\u011feri 0&#8217;d\u0131r. <code>Integer<\/code> ise, <code>int<\/code> ilkel tipinin sarmalay\u0131c\u0131 (wrapper) s\u0131n\u0131f\u0131d\u0131r ve bir nesnedir. Nesne oldu\u011fu i\u00e7in <code>null<\/code> de\u011feri alabilir ve koleksiyon \u00e7er\u00e7evesinde (\u00f6rne\u011fin <code>ArrayList<\/code>) ilkel tiplerin kullan\u0131lamad\u0131\u011f\u0131 durumlarda tercih edilir. <code>int<\/code> daha \u00e7ok performans kritik hesaplamalar i\u00e7in uygunken, <code>Integer<\/code> nesne gerektiren durumlarda, \u00f6rne\u011fin generic tiplerle veya null de\u011ferlerin m\u00fcmk\u00fcn oldu\u011fu yerlerde kullan\u0131l\u0131r. Java 5&#8217;ten itibaren gelen autoboxing\/unboxing \u00f6zelli\u011fi sayesinde bu iki tip aras\u0131nda otomatik d\u00f6n\u00fc\u015f\u00fcm yap\u0131labilir.<\/p>\n<h3>String De\u011fi\u015fmezli\u011fi (Immutability)<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da <code>String<\/code> nesneleri neden de\u011fi\u015fmez (immutable) olarak kabul edilir? Bunun avantajlar\u0131 nelerdir?<\/p>\n<p><strong>Cevap:<\/strong> Java&#8217;da <code>String<\/code> nesneleri de\u011fi\u015fmezdir, yani bir <code>String<\/code> nesnesi olu\u015fturulduktan sonra i\u00e7eri\u011fi de\u011fi\u015ftirilemez. Bir <code>String<\/code> \u00fczerinde yap\u0131lan her &#8220;de\u011fi\u015fiklik&#8221; asl\u0131nda bellekte yeni bir <code>String<\/code> nesnesi olu\u015fturulmas\u0131na neden olur. Bunun ba\u015fl\u0131ca avantajlar\u0131 \u015funlard\u0131r: <strong>G\u00fcvenlik:<\/strong> Veritaban\u0131 ba\u011flant\u0131 bilgileri, \u015fifreler gibi hassas veriler <code>String<\/code> olarak sakland\u0131\u011f\u0131nda, de\u011fi\u015fmezlik sayesinde bu verilerin referanslar\u0131 farkl\u0131 metotlara ge\u00e7ti\u011finde dahi orijinal i\u00e7eri\u011fin manip\u00fcle edilemeyece\u011fi garantilenir. <strong>Thread G\u00fcvenli\u011fi:<\/strong> De\u011fi\u015fmez nesneler, birden fazla i\u015f par\u00e7ac\u0131\u011f\u0131 taraf\u0131ndan g\u00fcvenle payla\u015f\u0131labilir, \u00e7\u00fcnk\u00fc durumlar\u0131 asla de\u011fi\u015fmez. Bu da senkronizasyon mekanizmalar\u0131na olan ihtiyac\u0131 azalt\u0131r. <strong>Performans:<\/strong> String havuzu (String Pool) sayesinde ayn\u0131 i\u00e7eri\u011fe sahip <code>String<\/code>&#8216;ler tek bir bellek konumunu payla\u015fabilir, bu da bellek kullan\u0131m\u0131n\u0131 optimize eder.<\/p>\n<h3><code>final<\/code> Anahtar Kelimesi<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da <code>final<\/code> anahtar kelimesinin bir de\u011fi\u015fken, bir metot ve bir s\u0131n\u0131f i\u00e7in kullan\u0131ld\u0131\u011f\u0131nda ne anlama geldi\u011fini a\u00e7\u0131klay\u0131n\u0131z.<\/p>\n<p><strong>Cevap:<\/strong> <code>final<\/code> anahtar kelimesi Java&#8217;da \u00fc\u00e7 farkl\u0131 ba\u011flamda kullan\u0131l\u0131r:<\/p>\n<ol>\n<li><strong><code>final<\/code> bir de\u011fi\u015fken:<\/strong> Bir de\u011fi\u015fken <code>final<\/code> olarak tan\u0131mland\u0131\u011f\u0131nda, de\u011feri yaln\u0131zca bir kez atanabilir ve daha sonra de\u011fi\u015ftirilemez. Genellikle sabitler i\u00e7in kullan\u0131l\u0131r (\u00f6rne\u011fin <code>final int MAX_VALUE = 100;<\/code>).<\/li>\n<li><strong><code>final<\/code> bir metot:<\/strong> Bir metot <code>final<\/code> olarak tan\u0131mland\u0131\u011f\u0131nda, alt s\u0131n\u0131flar taraf\u0131ndan ezilemez (override edilemez). Bu, metodun davran\u0131\u015f\u0131n\u0131n alt s\u0131n\u0131flarda de\u011fi\u015ftirilmemesini garanti eder.<\/li>\n<li><strong><code>final<\/code> bir s\u0131n\u0131f:<\/strong> Bir s\u0131n\u0131f <code>final<\/code> olarak tan\u0131mland\u0131\u011f\u0131nda, o s\u0131n\u0131ftan ba\u015fka bir s\u0131n\u0131f miras alamaz (extend edilemez). Bu, s\u0131n\u0131f\u0131n tasar\u0131m\u0131n\u0131n ve davran\u0131\u015f\u0131n\u0131n tamamen kontrol alt\u0131nda tutulmas\u0131n\u0131 sa\u011flar (\u00f6rne\u011fin <code>java.lang.String<\/code> s\u0131n\u0131f\u0131 <code>final<\/code>&#8216;d\u0131r).<\/li>\n<\/ol>\n<h2>Nesne Y\u00f6nelimli Programlama (OOP) \u0130lkeleri<\/h2>\n<p>Java, nesne y\u00f6nelimli bir programlama dilidir ve OOP&#8217;nin d\u00f6rt temel ilkesi (Kaps\u00fclleme, Miras Alma, \u00c7ok Bi\u00e7imlilik, Soyutlama) dilin g\u00fcc\u00fcn\u00fc ve esnekli\u011fini olu\u015fturur. Bu b\u00f6l\u00fcm, bu ilkelerin derinlemesine anla\u015f\u0131lmas\u0131na odaklanmaktad\u0131r.<\/p>\n<h3>Kaps\u00fclleme (Encapsulation)<\/h3>\n<p><strong>Soru:<\/strong> Kaps\u00fclleme nedir ve Java&#8217;da nas\u0131l sa\u011flan\u0131r? Bir \u00f6rnekle a\u00e7\u0131klay\u0131n\u0131z.<\/p>\n<p><strong>Cevap:<\/strong> Kaps\u00fclleme, nesne y\u00f6nelimli programlaman\u0131n temel ilkelerinden biridir ve verileri (alanlar\/field&#8217;lar) ve bu veriler \u00fczerinde i\u015flem yapan metotlar\u0131 (davran\u0131\u015flar) tek bir birim alt\u0131nda birle\u015ftirme ve d\u0131\u015f d\u00fcnyadan gizleme s\u00fcrecidir. Java&#8217;da kaps\u00fclleme, genellikle s\u0131n\u0131f\u0131n alanlar\u0131n\u0131 <code>private<\/code> eri\u015fim belirleyicisi ile tan\u0131mlayarak ve bu alanlara eri\u015fimi ve manip\u00fclasyonu <code>public<\/code> metotlar (getter ve setter metotlar\u0131) arac\u0131l\u0131\u011f\u0131yla sa\u011flayarak ger\u00e7ekle\u015ftirilir. Bu yakla\u015f\u0131m, nesnenin i\u00e7 durumunun kontrols\u00fcz eri\u015fime kar\u015f\u0131 korunmas\u0131n\u0131 sa\u011flar ve d\u0131\u015far\u0131dan yaln\u0131zca tan\u0131mlanm\u0131\u015f aray\u00fczler arac\u0131l\u0131\u011f\u0131yla etkile\u015fim kurulmas\u0131na izin verir. \u00d6rne\u011fin, bir <code>Hesap<\/code> s\u0131n\u0131f\u0131nda <code>bakiye<\/code> alan\u0131 <code>private<\/code> tan\u0131mlan\u0131r ve <code>getBakiye()<\/code> ve <code>setBakiye()<\/code> metotlar\u0131 ile eri\u015fim sa\u011flan\u0131r.<\/p>\n<h3>Miras Alma (Inheritance)<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da \u00e7oklu miras (multiple inheritance) neden desteklenmez? Alternatif olarak hangi mekanizmalar kullan\u0131l\u0131r?<\/p>\n<p><strong>Cevap:<\/strong> Java, s\u0131n\u0131flar aras\u0131nda do\u011frudan \u00e7oklu miras\u0131 desteklemez. Yani, bir s\u0131n\u0131f birden fazla \u00fcst s\u0131n\u0131ftan miras alamaz. Bunun temel nedeni &#8220;Elmas Problemi&#8221; (Diamond Problem) olarak bilinen belirsizlik durumudur: E\u011fer bir s\u0131n\u0131f iki farkl\u0131 \u00fcst s\u0131n\u0131ftan miras al\u0131r ve bu \u00fcst s\u0131n\u0131flar\u0131n her ikisinde de ayn\u0131 isimde bir metot varsa, alt s\u0131n\u0131f\u0131n hangi metodun uygulamas\u0131n\u0131 kullanaca\u011f\u0131 belirsiz hale gelir. Bu durum derleyici i\u00e7in kafa kar\u0131\u015ft\u0131r\u0131c\u0131d\u0131r ve \u00e7al\u0131\u015fma zaman\u0131nda \u00f6ng\u00f6r\u00fclemeyen davran\u0131\u015flara yol a\u00e7abilir. Java, bu karma\u015f\u0131kl\u0131\u011f\u0131 \u00f6nlemek amac\u0131yla tekli miras ilkesini benimsemi\u015ftir. \u00c7oklu miras\u0131n sa\u011flad\u0131\u011f\u0131 faydalar\u0131 elde etmek i\u00e7in Java, <strong>aray\u00fczleri (interfaces)<\/strong> kullan\u0131r. Bir s\u0131n\u0131f birden fazla aray\u00fcz\u00fc uygulayabilir ve b\u00f6ylece farkl\u0131 davran\u0131\u015f setlerini birle\u015ftirebilir. Java 8 ile birlikte aray\u00fczlerde varsay\u0131lan metotlar\u0131n (default methods) eklenmesi, bu alternatifin g\u00fcc\u00fcn\u00fc daha da art\u0131rm\u0131\u015ft\u0131r.<\/p>\n<h3>\u00c7ok Bi\u00e7imlilik (Polymorphism)<\/h3>\n<p><strong>Soru:<\/strong> Metot ezme (method overriding) ve metot a\u015f\u0131r\u0131 y\u00fckleme (method overloading) aras\u0131ndaki farklar\u0131 a\u00e7\u0131klay\u0131n\u0131z. Her ikisi de \u00e7ok bi\u00e7imlili\u011fin hangi t\u00fcr\u00fcne \u00f6rnek te\u015fkil eder?<\/p>\n<p><strong>Cevap:<\/strong><\/p>\n<ul>\n<li><strong>Metot Ezme (Overriding):<\/strong> Bir alt s\u0131n\u0131f\u0131n, \u00fcst s\u0131n\u0131f\u0131nda tan\u0131mlanm\u0131\u015f bir metodu kendi ihtiyac\u0131na g\u00f6re yeniden tan\u0131mlamas\u0131d\u0131r. Metot imzas\u0131 (isim, parametre say\u0131s\u0131 ve tipleri) ayn\u0131 kal\u0131r, ancak implementasyonu de\u011fi\u015fir. \u00c7al\u0131\u015fma zaman\u0131 \u00e7ok bi\u00e7imlili\u011fine (runtime polymorphism) \u00f6rnektir.<\/li>\n<li><strong>Metot A\u015f\u0131r\u0131 Y\u00fckleme (Overloading):<\/strong> Ayn\u0131 s\u0131n\u0131f i\u00e7inde veya miras al\u0131nan bir s\u0131n\u0131fta, ayn\u0131 isme sahip ancak farkl\u0131 parametre listelerine (say\u0131, tip veya s\u0131ralama) sahip birden fazla metot tan\u0131mlanmas\u0131d\u0131r. D\u00f6n\u00fc\u015f tipi farkl\u0131 olabilir ancak tek ba\u015f\u0131na yeterli de\u011fildir. Derleme zaman\u0131 \u00e7ok bi\u00e7imlili\u011fine (compile-time polymorphism) \u00f6rnektir.<\/li>\n<\/ul>\n<p>K\u0131sacas\u0131, overriding miras hiyerar\u015fisinde metot davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirirken, overloading ayn\u0131 s\u0131n\u0131fta farkl\u0131 parametrelerle ayn\u0131 isimli metotlar olu\u015fturur.<\/p>\n<h3>Soyut S\u0131n\u0131flar (Abstract Classes) ve Aray\u00fczler (Interfaces)<\/h3>\n<p><strong>Soru:<\/strong> Soyut s\u0131n\u0131flar ve aray\u00fczler aras\u0131ndaki temel farklar nelerdir? Ne zaman hangisini kullanmay\u0131 tercih etmelisiniz?<\/p>\n<p><strong>Cevap:<\/strong> Hem soyut s\u0131n\u0131flar hem de aray\u00fczler soyutlama sa\u011flamak i\u00e7in kullan\u0131l\u0131r, ancak \u00f6nemli farklar\u0131 vard\u0131r:<\/p>\n<ul>\n<li><strong>Soyut S\u0131n\u0131flar:<\/strong> K\u0131smen implement edilmi\u015f s\u0131n\u0131flard\u0131r. Hem soyut (implementasyonu olmayan) hem de somut (implementasyonu olan) metotlar i\u00e7erebilirler. Alanlar tan\u0131mlayabilir, kurucular\u0131 olabilir ve yaln\u0131zca tek bir soyut s\u0131n\u0131ftan miras al\u0131nabilir. Bir &#8220;is-a&#8221; ili\u015fkisini (bir nesnenin ba\u015fka bir nesne t\u00fcr\u00fc olmas\u0131) ifade etmek i\u00e7in idealdir.<\/li>\n<li><strong>Aray\u00fczler:<\/strong> Java 8 \u00f6ncesinde sadece soyut metotlar ve sabitler i\u00e7erebilirlerdi. Java 8 sonras\u0131 varsay\u0131lan ve statik metotlar\u0131 da i\u00e7erebilirler. Alanlar\u0131 varsay\u0131lan olarak <code>public static final<\/code>&#8216;d\u0131r. Kurucular\u0131 olamaz. Bir s\u0131n\u0131f birden fazla aray\u00fcz\u00fc uygulayabilir. Bir &#8220;has-a&#8221; ili\u015fkisini (bir nesnenin belirli bir yetene\u011fe sahip olmas\u0131) veya bir davran\u0131\u015f s\u00f6zle\u015fmesini tan\u0131mlamak i\u00e7in idealdir.<\/li>\n<\/ul>\n<p>Soyut s\u0131n\u0131f, ortak bir temel implementasyon sa\u011flarken, aray\u00fcz tamamen davran\u0131\u015f s\u00f6zle\u015fmesi tan\u0131mlar.<\/p>\n<h2>\u0130stisna Y\u00f6netimi (Exception Handling)<\/h2>\n<p>Hata y\u00f6netimi, sa\u011flam ve g\u00fcvenilir Java uygulamalar\u0131 geli\u015ftirmek i\u00e7in kritik bir beceridir. Bu b\u00f6l\u00fcm, istisna t\u00fcrlerini, y\u00f6netim mekanizmalar\u0131n\u0131 ve en iyi uygulamalar\u0131 ele almaktad\u0131r.<\/p>\n<h3>Checked ve Unchecked Exceptions<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da &#8220;checked&#8221; (kontrol edilmi\u015f) ve &#8220;unchecked&#8221; (kontrol edilmemi\u015f) istisnalar aras\u0131ndaki fark nedir? Birer \u00f6rnek veriniz.<\/p>\n<p><strong>Cevap:<\/strong><\/p>\n<ul>\n<li><strong>Checked Exceptions (Kontrol Edilmi\u015f \u0130stisnalar):<\/strong> Derleme zaman\u0131nda kontrol edilen istisnalard\u0131r. Java derleyicisi, bu t\u00fcr istisnalar\u0131n yakalanmas\u0131n\u0131 (<code>try-catch<\/code> blo\u011fu ile) veya metodun imzas\u0131nda belirtilmesini (<code>throws<\/code> anahtar kelimesi ile) zorunlu k\u0131lar. Bu istisnalar genellikle program\u0131n kontrol\u00fc d\u0131\u015f\u0131ndaki, ancak kurtar\u0131labilir durumlar\u0131 (\u00f6rne\u011fin, dosya bulunamad\u0131 &#8211; <code>FileNotFoundException<\/code>, SQL hatas\u0131 &#8211; <code>SQLException<\/code>) temsil eder.<\/li>\n<li><strong>Unchecked Exceptions (Kontrol Edilmemi\u015f \u0130stisnalar):<\/strong> \u00c7al\u0131\u015fma zaman\u0131nda (runtime) meydana gelen istisnalard\u0131r ve derleyici taraf\u0131ndan kontrol edilmezler. Genellikle programc\u0131 hatalar\u0131n\u0131 (\u00f6rne\u011fin, s\u0131f\u0131ra b\u00f6lme &#8211; <code>ArithmeticException<\/code>, dizi s\u0131n\u0131rlar\u0131 d\u0131\u015f\u0131na \u00e7\u0131kma &#8211; <code>ArrayIndexOutOfBoundsException<\/code>, <code>null<\/code> referans\u0131na eri\u015fim &#8211; <code>NullPointerException<\/code>) temsil ederler. Bu istisnalar\u0131 yakalamak zorunlu de\u011fildir, ancak program\u0131n daha sa\u011flam olmas\u0131 i\u00e7in baz\u0131lar\u0131n\u0131 yakalamak faydal\u0131 olabilir.<\/li>\n<\/ul>\n<h3><code>try-catch-finally<\/code> Blo\u011fu<\/h3>\n<p><strong>Soru:<\/strong> <code>try-catch-finally<\/code> blo\u011funun her bir k\u0131sm\u0131n\u0131n amac\u0131n\u0131 a\u00e7\u0131klay\u0131n\u0131z. <code>finally<\/code> blo\u011fu her zaman \u00e7al\u0131\u015f\u0131r m\u0131? \u0130stisnai durumlar nelerdir?<\/p>\n<p><strong>Cevap:<\/strong><\/p>\n<ul>\n<li><strong><code>try<\/code>:<\/strong> Potansiyel olarak istisna f\u0131rlatabilecek kod blo\u011funu i\u00e7erir.<\/li>\n<li><strong><code>catch<\/code>:<\/strong> <code>try<\/code> blo\u011funda f\u0131rlat\u0131lan belirli bir istisna t\u00fcr\u00fcn\u00fc yakalamak ve i\u015flemek i\u00e7in kullan\u0131l\u0131r. Birden fazla <code>catch<\/code> blo\u011fu olabilir.<\/li>\n<li><strong><code>finally<\/code>:<\/strong> <code>try<\/code> blo\u011fu tamamland\u0131ktan veya bir istisna yakaland\u0131ktan sonra her zaman y\u00fcr\u00fct\u00fclen kod blo\u011fudur. Genellikle kaynaklar\u0131 (dosya ak\u0131\u015flar\u0131, veritaban\u0131 ba\u011flant\u0131lar\u0131 vb.) kapatmak gibi temizlik i\u015flemleri i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<p>Evet, <code>finally<\/code> blo\u011fu genellikle her zaman \u00e7al\u0131\u015f\u0131r. Ancak, <code>System.exit()<\/code> \u00e7a\u011fr\u0131s\u0131 yap\u0131lmas\u0131, JVM&#8217;nin \u00e7\u00f6kmesi (\u00f6rne\u011fin bellek yetersizli\u011fi gibi ciddi bir hata &#8211; <code>OutOfMemoryError<\/code>) veya i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131n aniden sonland\u0131r\u0131lmas\u0131 gibi \u00e7ok nadir ve istisnai durumlarda <code>finally<\/code> blo\u011fu y\u00fcr\u00fct\u00fclmeyebilir.<\/p>\n<h2>Java Koleksiyon \u00c7er\u00e7evesi (Collections Framework)<\/h2>\n<p>Java Koleksiyon \u00c7er\u00e7evesi, veri yap\u0131lar\u0131n\u0131 depolamak ve manip\u00fcle etmek i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir dizi aray\u00fcz ve s\u0131n\u0131f sa\u011flar. Bu b\u00f6l\u00fcm, en s\u0131k kullan\u0131lan koleksiyonlar\u0131 ve onlar\u0131n \u00f6zelliklerini ele almaktad\u0131r.<\/p>\n<h3><code>List<\/code>, <code>Set<\/code>, <code>Map<\/code> Aray\u00fczleri<\/h3>\n<p><strong>Soru:<\/strong> Java Koleksiyon \u00c7er\u00e7evesi&#8217;ndeki <code>List<\/code>, <code>Set<\/code> ve <code>Map<\/code> aray\u00fczlerinin temel \u00f6zelliklerini ve kullan\u0131m ama\u00e7lar\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131n\u0131z.<\/p>\n<p><strong>Cevap:<\/strong><\/p>\n<ul>\n<li><strong><code>List<\/code>:<\/strong> S\u0131ral\u0131 bir eleman koleksiyonunu temsil eder. Elemanlar eklenme s\u0131ras\u0131na g\u00f6re tutulur ve indeks tabanl\u0131 eri\u015fim m\u00fcmk\u00fcnd\u00fcr. Tekrar eden elemanlara izin verir. \u00d6rnek implementasyonlar: <code>ArrayList<\/code>, <code>LinkedList<\/code>. Kullan\u0131m amac\u0131: Elemanlar\u0131n s\u0131ras\u0131n\u0131n \u00f6nemli oldu\u011fu ve tekrar eden elemanlar\u0131n olabilece\u011fi durumlar (\u00f6rne\u011fin, bir \u00f6\u011frenci listesi).<\/li>\n<li><strong><code>Set<\/code>:<\/strong> Tekil elemanlardan olu\u015fan bir koleksiyonu temsil eder. Tekrar eden elemanlara izin vermez ve elemanlar\u0131n s\u0131ras\u0131 genellikle garanti edilmez (<code>LinkedHashSet<\/code> hari\u00e7). \u00d6rnek implementasyonlar: <code>HashSet<\/code>, <code>TreeSet<\/code>. Kullan\u0131m amac\u0131: Tekil elemanlar\u0131n tutulmas\u0131 gereken durumlar (\u00f6rne\u011fin, benzersiz ID&#8217;lerin k\u00fcmesi).<\/li>\n<li><strong><code>Map<\/code>:<\/strong> Anahtar-de\u011fer \u00e7iftleri \u015feklinde elemanlar\u0131 saklayan bir koleksiyondur. Her anahtar tekil olmal\u0131, ancak de\u011ferler tekrar edebilir. Anahtarlar ve de\u011ferler aras\u0131nda bir e\u015fleme sa\u011flar. \u00d6rnek implementasyonlar: <code>HashMap<\/code>, <code>TreeMap<\/code>. Kullan\u0131m amac\u0131: Bir anahtar arac\u0131l\u0131\u011f\u0131yla de\u011ferlere h\u0131zl\u0131 eri\u015fim gereken durumlar (\u00f6rne\u011fin, bir s\u00f6zl\u00fck veya kullan\u0131c\u0131 profilleri).<\/li>\n<\/ul>\n<h3><code>ArrayList<\/code> ve <code>LinkedList<\/code> Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h3>\n<p><strong>Soru:<\/strong> <code>ArrayList<\/code> ve <code>LinkedList<\/code> aras\u0131ndaki temel performans farklar\u0131 nelerdir? Hangi senaryolarda hangisi tercih edilmelidir?<\/p>\n<p><strong>Cevap:<\/strong><\/p>\n<ul>\n<li><strong><code>ArrayList<\/code>:<\/strong> Dahili olarak dinamik bir dizi (array) kullan\u0131r. Elemanlara indeksle eri\u015fim (<code>get(index)<\/code>) \u00e7ok h\u0131zl\u0131d\u0131r (O(1)). Ancak ortadan eleman ekleme veya silme i\u015flemi maliyetlidir (O(n)), \u00e7\u00fcnk\u00fc di\u011fer elemanlar\u0131n kayd\u0131r\u0131lmas\u0131 gerekir. Listenin sonuna eleman ekleme genellikle h\u0131zl\u0131d\u0131r (amortized O(1)). B\u00fcy\u00fck veri setlerinde s\u0131k s\u0131k indeks tabanl\u0131 eri\u015fim ve sonuna ekleme yap\u0131l\u0131yorsa tercih edilir.<\/li>\n<li><strong><code>LinkedList<\/code>:<\/strong> \u00c7ift y\u00f6nl\u00fc ba\u011fl\u0131 liste (doubly linked list) yap\u0131s\u0131n\u0131 kullan\u0131r. Elemanlara indeksle eri\u015fim yava\u015ft\u0131r (O(n)), \u00e7\u00fcnk\u00fc listenin ba\u015f\u0131ndan veya sonundan ba\u015flayarak elemanlar tek tek gezilir. Ancak listenin herhangi bir yerinden eleman ekleme veya silme i\u015flemi h\u0131zl\u0131d\u0131r (O(1)), \u00e7\u00fcnk\u00fc sadece d\u00fc\u011f\u00fcm referanslar\u0131 g\u00fcncellenir. S\u0131k s\u0131k ortadan eleman ekleme veya silme yap\u0131l\u0131yorsa tercih edilir.<\/li>\n<\/ul>\n<h3><code>HashMap<\/code> ve <code>TreeMap<\/code> Farklar\u0131<\/h3>\n<p><strong>Soru:<\/strong> <code>HashMap<\/code> ve <code>TreeMap<\/code> aras\u0131ndaki temel farklar nelerdir? Null anahtar ve de\u011fer kabul etme durumlar\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131n\u0131z.<\/p>\n<p><strong>Cevap:<\/strong><\/p>\n<ul>\n<li><strong><code>HashMap<\/code>:<\/strong> Anahtar-de\u011fer \u00e7iftlerini depolamak i\u00e7in hash tablosu kullan\u0131r. Elemanlar\u0131n s\u0131ras\u0131n\u0131 garanti etmez; eklenme s\u0131ras\u0131 veya do\u011fal s\u0131ralama yoktur. H\u0131zl\u0131 ekleme, silme ve arama i\u015flemleri sunar (ortalama O(1)). Bir tane <code>null<\/code> anahtar ve birden fazla <code>null<\/code> de\u011fer kabul eder.<\/li>\n<li><strong><code>TreeMap<\/code>:<\/strong> Anahtar-de\u011fer \u00e7iftlerini depolamak i\u00e7in k\u0131rm\u0131z\u0131-siyah a\u011fa\u00e7 (red-black tree) yap\u0131s\u0131n\u0131 kullan\u0131r. Elemanlar\u0131 anahtarlar\u0131n do\u011fal s\u0131ralamas\u0131na g\u00f6re veya \u00f6zel bir <code>Comparator<\/code> ile s\u0131ralanm\u0131\u015f bir \u015fekilde tutar. Ekleme, silme ve arama i\u015flemleri <code>HashMap<\/code>&#8216;e g\u00f6re biraz daha yava\u015ft\u0131r (O(log n)). <code>null<\/code> anahtar kabul etmez, ancak birden fazla <code>null<\/code> de\u011fer kabul eder.<\/li>\n<\/ul>\n<p><code>HashMap<\/code> performansa odaklan\u0131rken, <code>TreeMap<\/code> s\u0131ral\u0131 verilere ihtiya\u00e7 duyulan durumlarda tercih edilir.<\/p>\n<h2>\u00c7oklu \u0130\u015f Par\u00e7ac\u0131\u011f\u0131 (Multithreading) ve E\u015fzamanl\u0131l\u0131k<\/h2>\n<p>\u00c7oklu i\u015f par\u00e7ac\u0131\u011f\u0131, Java&#8217;n\u0131n e\u015fzamanl\u0131 programlama yeteneklerinin merkezindedir. Bu b\u00f6l\u00fcm, i\u015f par\u00e7ac\u0131\u011f\u0131 olu\u015fturma, senkronizasyon ve ya\u015fam d\u00f6ng\u00fcs\u00fc gibi konular\u0131 ele almaktad\u0131r.<\/p>\n<h3><code>Thread<\/code> S\u0131n\u0131f\u0131 ve <code>Runnable<\/code> Aray\u00fcz\u00fc<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da bir i\u015f par\u00e7ac\u0131\u011f\u0131 (thread) olu\u015fturman\u0131n iki temel yolu nedir? Hangi y\u00f6ntem genellikle tercih edilir ve neden?<\/p>\n<p><strong>Cevap:<\/strong> Java&#8217;da bir i\u015f par\u00e7ac\u0131\u011f\u0131 olu\u015fturman\u0131n iki temel yolu vard\u0131r:<\/p>\n<ol>\n<li><strong><code>Thread<\/code> s\u0131n\u0131f\u0131n\u0131 geni\u015fleterek (extending):<\/strong> <code>java.lang.Thread<\/code> s\u0131n\u0131f\u0131ndan miras alan bir s\u0131n\u0131f olu\u015fturulur ve <code>run()<\/code> metodu ezilir.<\/li>\n<li><strong><code>Runnable<\/code> aray\u00fcz\u00fcn\u00fc uygulayarak (implementing):<\/strong> <code>java.lang.Runnable<\/code> aray\u00fcz\u00fcn\u00fc uygulayan bir s\u0131n\u0131f olu\u015fturulur ve <code>run()<\/code> metodu implemente edilir. Ard\u0131ndan bu <code>Runnable<\/code> nesnesi bir <code>Thread<\/code> nesnesine parametre olarak verilir.<\/li>\n<\/ol>\n<p>Genellikle <strong><code>Runnable<\/code> aray\u00fcz\u00fcn\u00fc uygulamak tercih edilir<\/strong>. Bunun temel nedeni, Java&#8217;da bir s\u0131n\u0131f\u0131n yaln\u0131zca tek bir s\u0131n\u0131ftan miras alabilmesidir (tekli miras). E\u011fer <code>Thread<\/code> s\u0131n\u0131f\u0131n\u0131 geni\u015fletirseniz, s\u0131n\u0131f\u0131n\u0131z ba\u015fka bir s\u0131n\u0131ftan miras alma yetene\u011fini kaybeder. <code>Runnable<\/code> aray\u00fcz\u00fcn\u00fc kullanmak, kodun daha esnek olmas\u0131n\u0131 sa\u011flar ve i\u015f par\u00e7ac\u0131\u011f\u0131 mant\u0131\u011f\u0131n\u0131 (<code>run()<\/code> metodu) i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131n kendisinden (<code>Thread<\/code> nesnesi) ay\u0131rarak daha temiz bir tasar\u0131m sunar. Ayr\u0131ca, ayn\u0131 <code>Runnable<\/code> nesnesini birden fazla <code>Thread<\/code> nesnesine vererek ayn\u0131 g\u00f6revi farkl\u0131 i\u015f par\u00e7ac\u0131klar\u0131nda \u00e7al\u0131\u015ft\u0131rmak da m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h3>Senkronizasyon ve Deadlock<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da <code>synchronized<\/code> anahtar kelimesinin amac\u0131 nedir? Deadlock (kilitlenme) nedir ve nas\u0131l \u00f6nlenebilir?<\/p>\n<p><strong>Cevap:<\/strong> <code>synchronized<\/code> anahtar kelimesi, Java&#8217;da \u00e7oklu i\u015f par\u00e7ac\u0131kl\u0131 ortamlarda payla\u015f\u0131lan kaynaklara eri\u015fimi kontrol etmek ve i\u015f par\u00e7ac\u0131\u011f\u0131 g\u00fcvenli\u011fini sa\u011flamak i\u00e7in kullan\u0131l\u0131r. Bir metot veya kod blo\u011fu <code>synchronized<\/code> olarak i\u015faretlendi\u011finde, ayn\u0131 anda yaln\u0131zca bir i\u015f par\u00e7ac\u0131\u011f\u0131 o metoda veya blo\u011fa eri\u015febilir. Bu, veri tutars\u0131zl\u0131\u011f\u0131n\u0131 ve yar\u0131\u015f ko\u015fullar\u0131n\u0131 (race conditions) \u00f6nler.<\/p>\n<p><strong>Deadlock (kilitlenme)<\/strong>, iki veya daha fazla i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131n birbirlerinin serbest b\u0131rakmas\u0131n\u0131 bekledi\u011fi, ancak hi\u00e7birinin serbest b\u0131rakma yapmad\u0131\u011f\u0131 ve dolay\u0131s\u0131yla hi\u00e7bir i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131n ilerleyemedi\u011fi bir durumdur. \u00d6rne\u011fin, \u0130\u015f Par\u00e7ac\u0131\u011f\u0131 A, Kaynak 1&#8217;i tutarken Kaynak 2&#8217;yi bekler ve \u0130\u015f Par\u00e7ac\u0131\u011f\u0131 B, Kaynak 2&#8217;yi tutarken Kaynak 1&#8217;i beklerse deadlock olu\u015fur. Deadlock&#8217;u \u00f6nlemek i\u00e7in stratejiler \u015funlard\u0131r: kilitlerin tutarl\u0131 bir s\u0131rayla al\u0131nmas\u0131, kilitlerin timeout ile al\u0131nmas\u0131 (belirli bir s\u00fcre sonra b\u0131rak\u0131lmas\u0131), kaynaklar\u0131n tek bir i\u015flemde elde edilmesi veya kilit hiyerar\u015fisi kullan\u0131lmas\u0131.<\/p>\n<h2>Java 8 ve Sonras\u0131 Yenilikler<\/h2>\n<p>Java 8, dilin evriminde \u00f6nemli bir d\u00f6n\u00fcm noktas\u0131 olmu\u015ftur. Lambda ifadeleri, Stream API ve Optional gibi \u00f6zellikler, kod yazma \u015feklimizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde de\u011fi\u015ftirmi\u015ftir. Bu b\u00f6l\u00fcm, bu yeniliklerin baz\u0131lar\u0131n\u0131 incelemektedir.<\/p>\n<h3>Lambda \u0130fadeleri<\/h3>\n<p><strong>Soru:<\/strong> Lambda ifadeleri Java&#8217;ya ne gibi faydalar sa\u011flam\u0131\u015ft\u0131r? Basit bir \u00f6rnekle a\u00e7\u0131klay\u0131n\u0131z.<\/p>\n<p><strong>Cevap:<\/strong> Lambda ifadeleri (lambda expressions), Java 8 ile birlikte gelen ve fonksiyonel programlama tarz\u0131n\u0131 dile ta\u015f\u0131yan \u00f6nemli bir \u00f6zelliktir. Temel amac\u0131, tek metotlu aray\u00fczlerin (fonksiyonel aray\u00fczler) anonim implementasyonlar\u0131n\u0131 daha k\u0131sa ve okunabilir bir s\u00f6zdizimiyle yazmay\u0131 sa\u011flamakt\u0131r.<\/p>\n<p>Faydalar\u0131:<\/p>\n<ul>\n<li><strong>Daha Az Kod:<\/strong> Anonim i\u00e7 s\u0131n\u0131flara g\u00f6re \u00e7ok daha az kod yazmay\u0131 gerektirir.<\/li>\n<li><strong>Okunabilirlik:<\/strong> Kodun amac\u0131n\u0131 daha net bir \u015fekilde ifade eder.<\/li>\n<li><strong>Paralel \u0130\u015fleme:<\/strong> Stream API ile birlikte kullan\u0131larak veri koleksiyonlar\u0131 \u00fczerinde paralel i\u015flemeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<p>\u00d6rnek: Bir <code>List<\/code>&#8216;i s\u0131ralamak i\u00e7in eski y\u00f6ntemle <code>Comparator<\/code> anonim s\u0131n\u0131f\u0131 yazmak yerine:<br \/>\n<code>Collections.sort(list, (a, b) -> a.compareTo(b));<\/code><br \/>\nBu, <code>a<\/code> ve <code>b<\/code> parametrelerini alan ve <code>a.compareTo(b)<\/code> sonucunu d\u00f6nd\u00fcren basit bir fonksiyondur.<\/p>\n<h3>Stream API<\/h3>\n<p><strong>Soru:<\/strong> Java Stream API&#8217;nin temel amac\u0131 nedir ve koleksiyonlar \u00fczerinde ne t\u00fcr i\u015flemleri kolayla\u015ft\u0131r\u0131r?<\/p>\n<p><strong>Cevap:<\/strong> Java Stream API, Java 8 ile tan\u0131t\u0131lan ve koleksiyonlar (veya di\u011fer veri kaynaklar\u0131) \u00fczerinde i\u015flevsel stil i\u015flemleri ger\u00e7ekle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc bir soyutlama sa\u011flayan bir yap\u0131d\u0131r. Temel amac\u0131, veri i\u015fleme mant\u0131\u011f\u0131n\u0131 daha bildirimsel, daha \u00f6zl\u00fc ve potansiyel olarak paralel bir \u015fekilde ifade etmeyi kolayla\u015ft\u0131rmakt\u0131r.<\/p>\n<p>Stream API, \u00fc\u00e7 ana t\u00fcrde i\u015flem sunar:<\/p>\n<ol>\n<li><strong>Kaynak (Source):<\/strong> Bir koleksiyon, dizi, I\/O kanal\u0131 veya bir \u00fcretici fonksiyonu gibi veri kayna\u011f\u0131.<\/li>\n<li><strong>Ara \u0130\u015flemler (Intermediate Operations):<\/strong> Bir stream \u00fczerinde d\u00f6n\u00fc\u015ft\u00fcrme veya filtreleme gibi i\u015flemler yapar ve yeni bir stream d\u00f6nd\u00fcr\u00fcr. Bu i\u015flemler tembeldir (lazy), yani terminal bir i\u015flem \u00e7a\u011fr\u0131lana kadar y\u00fcr\u00fct\u00fclmezler (\u00f6rne\u011fin <code>filter()<\/code>, <code>map()<\/code>, <code>sorted()<\/code>).<\/li>\n<li><strong>Terminal \u0130\u015flemler (Terminal Operations):<\/strong> Bir stream \u00fczerinde nihai bir i\u015flem yapar ve bir sonu\u00e7 (tek bir de\u011fer, bir koleksiyon veya bir yan etki) \u00fcretir. Bu i\u015flemler stream&#8217;i kapat\u0131r ve bir daha kullan\u0131lamaz hale getirir (\u00f6rne\u011fin <code>forEach()<\/code>, <code>collect()<\/code>, <code>reduce()<\/code>, <code>count()<\/code>).<\/li>\n<\/ol>\n<p>Stream API, \u00f6zellikle b\u00fcy\u00fck veri setleri \u00fczerinde filtreleme, d\u00f6n\u00fc\u015ft\u00fcrme, gruplama ve \u00f6zetleme gibi i\u015flemleri daha verimli ve okunabilir bir \u015fekilde yapmay\u0131 sa\u011flar, hatta paralel i\u015flemeye olanak tan\u0131r.<\/p>\n<h2>Genel En \u0130yi Uygulamalar ve M\u00fclakat \u0130pu\u00e7lar\u0131<\/h2>\n<p>Core Java&#8217;y\u0131 bilmek kadar, bu bilgiyi do\u011fru ve etkili bir \u015fekilde kullanmak da \u00f6nemlidir. Bu b\u00f6l\u00fcm, s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan pratik konulara ve m\u00fclakatlara haz\u0131rl\u0131k ipu\u00e7lar\u0131na de\u011finmektedir.<\/p>\n<h3><code>equals()<\/code> ve <code>hashCode()<\/code> Metotlar\u0131<\/h3>\n<p><strong>Soru:<\/strong> Bir s\u0131n\u0131fta <code>equals()<\/code> metodunu ezdi\u011finizde (override etti\u011finizde) neden <code>hashCode()<\/code> metodunu da ezmeniz gerekir? Bu metotlar aras\u0131ndaki kontrat nedir?<\/p>\n<p><strong>Cevap:<\/strong> Java&#8217;da bir s\u0131n\u0131fta <code>equals()<\/code> metodunu ezdi\u011finizde, <code>hashCode()<\/code> metodunu da ezmeniz kesinlikle gereklidir. Bu, <code>Object<\/code> s\u0131n\u0131f\u0131 taraf\u0131ndan tan\u0131mlanan ve t\u00fcm Java s\u0131n\u0131flar\u0131n\u0131n uymas\u0131 gereken temel bir kontratt\u0131r:<\/p>\n<ul>\n<li>E\u011fer iki nesne <code>equals()<\/code> metoduna g\u00f6re e\u015fitse, bu iki nesnenin <code>hashCode()<\/code> metotlar\u0131 da ayn\u0131 tam say\u0131 de\u011ferini d\u00f6nd\u00fcrmelidir.<\/li>\n<li>E\u011fer iki nesnenin <code>hashCode()<\/code> metotlar\u0131 ayn\u0131 tam say\u0131 de\u011ferini d\u00f6nd\u00fcr\u00fcyorsa, bu iki nesnenin <code>equals()<\/code> metoduna g\u00f6re e\u015fit olmas\u0131 <strong>gerekmez<\/strong> (\u00e7ak\u0131\u015fmalar olabilir), ancak e\u015fit olma olas\u0131l\u0131\u011f\u0131 art\u0131r\u0131lmal\u0131d\u0131r.<\/li>\n<li>E\u011fer iki nesne <code>equals()<\/code> metoduna g\u00f6re e\u015fit de\u011filse, bu iki nesnenin <code>hashCode()<\/code> metotlar\u0131n\u0131n farkl\u0131 tam say\u0131 de\u011ferleri d\u00f6nd\u00fcrmesi <strong>gerekmez<\/strong>.<\/li>\n<\/ul>\n<p>Bu kontrat\u0131n ihlal edilmesi, \u00f6zellikle <code>HashMap<\/code>, <code>HashSet<\/code> gibi hash tabanl\u0131 koleksiyonlarda nesnelerin do\u011fru \u015fekilde \u00e7al\u0131\u015fmamas\u0131na, bulunamamas\u0131na veya beklenmeyen davran\u0131\u015flara yol a\u00e7ar. \u00c7\u00fcnk\u00fc bu koleksiyonlar \u00f6nce <code>hashCode()<\/code> ile bir b\u00f6lme (bucket) belirler, ard\u0131ndan <code>equals()<\/code> ile nesneleri kar\u015f\u0131la\u015ft\u0131r\u0131r.<\/p>\n<h3>Garbage Collection<\/h3>\n<p><strong>Soru:<\/strong> Java&#8217;da Garbage Collection (\u00c7\u00f6p Toplama) nas\u0131l \u00e7al\u0131\u015f\u0131r? Geli\u015ftiriciler olarak Garbage Collector&#8217;\u0131 do\u011frudan nas\u0131l kontrol edebiliriz?<\/p>\n<p><strong>Cevap:<\/strong> Java&#8217;da Garbage Collection (GC), art\u0131k kullan\u0131lmayan (hi\u00e7bir aktif referans\u0131 olmayan) nesneleri otomatik olarak bellekten temizleyen bir s\u00fcre\u00e7tir. Geli\u015ftiricilerin manuel bellek y\u00f6netimi yapmas\u0131na gerek kalmadan bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemeyi ve program\u0131n daha g\u00fcvenli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamay\u0131 ama\u00e7lar. GC, genellikle arka planda \u00e7al\u0131\u015f\u0131r ve &#8220;mark-and-sweep&#8221; (i\u015faretle ve s\u00fcp\u00fcr) gibi algoritmalar kullan\u0131r: \u00f6nce eri\u015filebilir nesneleri i\u015faretler, sonra eri\u015filemeyen nesneleri bellekten temizler.<\/p>\n<p>Geli\u015ftiriciler olarak Garbage Collector&#8217;\u0131 do\u011frudan ve kesin olarak kontrol edemeyiz. Java Sanal Makinesi (JVM) ne zaman GC&#8217;nin \u00e7al\u0131\u015faca\u011f\u0131na kendisi karar verir. Ancak <code>System.gc()<\/code> veya <code>Runtime.getRuntime().gc()<\/code> metotlar\u0131n\u0131 \u00e7a\u011f\u0131rarak bir GC \u00e7al\u0131\u015ft\u0131rma <strong>iste\u011finde bulunabiliriz<\/strong>. Bu bir istek oldu\u011fu i\u00e7in, JVM bu iste\u011fi g\u00f6z ard\u0131 edebilir ve GC&#8217;yi hemen \u00e7al\u0131\u015ft\u0131rmayabilir. En iyi uygulama, GC&#8217;ye m\u00fcdahale etmeye \u00e7al\u0131\u015fmak yerine, nesnelerin referanslar\u0131n\u0131 do\u011fru y\u00f6neterek ve bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nleyerek temiz ve verimli kod yazmaya odaklanmakt\u0131r.<\/p>\n<h2>Sonu\u00e7: S\u00fcrekli \u00d6\u011frenme ve Geli\u015fim<\/h2>\n<p>Bu makalede Core Java&#8217;n\u0131n bir\u00e7ok temel ve ileri d\u00fczey konusunu kapsayan sorular ve detayl\u0131 cevaplar sunduk. JVM&#8217;den OOP ilkelerine, istisna y\u00f6netiminden koleksiyonlara ve Java 8 yeniliklerine kadar geni\u015f bir yelpazede bilginizi tazelediniz ve muhtemelen yeni \u015feyler \u00f6\u011frendiniz.<\/p>\n<p>Core Java, sadece bir programlama dilinin temeli olman\u0131n \u00f6tesinde, yaz\u0131l\u0131m geli\u015ftirmenin temel prensiplerini anlamak i\u00e7in bir kap\u0131d\u0131r. Bu t\u00fcr quizler ve bilgi testleri, \u00f6\u011frenme s\u00fcrecinin \u00f6nemli bir par\u00e7as\u0131d\u0131r. Bilgiyi peki\u015ftirmenize, eksiklerinizi g\u00f6rmenize ve kendinize g\u00fcveninizi art\u0131rman\u0131za yard\u0131mc\u0131 olurlar. Unutmay\u0131n, yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131 s\u00fcrekli de\u011fi\u015fiyor ve geli\u015fiyor. Bu nedenle, s\u00fcrekli \u00f6\u011frenmeye, pratik yapmaya ve en g\u00fcncel teknolojileri takip etmeye devam etmek ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r.<\/p>\n<p>Umar\u0131z bu rehber, Core Java bilginizi g\u00fc\u00e7lendirmenize ve bir sonraki teknik m\u00fclakat\u0131n\u0131zda veya projenizde size yard\u0131mc\u0131 olmu\u015ftur. Ba\u015far\u0131lar dileriz!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi\nJava Geli\u015ftiricileri \u0130\u00e7in Bilgi Tazeleyici: Core Java Quiz Neden \u00d6nemli?\nJav","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-40224","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi\" \/>\n<meta property=\"og:description\" content=\"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi  Java Geli\u015ftiricileri \u0130\u00e7in Bilgi Tazeleyici: Core Java Quiz Neden \u00d6nemli? Jav\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-25T10:41:01+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi\",\"datePublished\":\"2026-02-25T10:41:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/\"},\"wordCount\":3988,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/\",\"name\":\"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-25T10:41:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi","og_description":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi  Java Geli\u015ftiricileri \u0130\u00e7in Bilgi Tazeleyici: Core Java Quiz Neden \u00d6nemli? Jav","og_url":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-25T10:41:01+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi","datePublished":"2026-02-25T10:41:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/"},"wordCount":3988,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/","name":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-25T10:41:01+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/core-java-bilginizi-test-edin-kapsamli-bir-soru-ve-cevap-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Core Java Bilginizi Test Edin: Kapsaml\u0131 Bir Soru ve Cevap Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=40224"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40224\/revisions"}],"predecessor-version":[{"id":40225,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40224\/revisions\/40225"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}