1) Java Programının Çalışma Mantığı Nedir?
Programcı Java kodunu yazar. “.java” dosyası olarak kaydedilir. Bu kod Java derleyicisi (eclipse vb.) ile derlenir. Sonuçta bytekod adı verilen (“.class” uzantılı) bir tür makine kodu ortaya çıkar. Platform bağımsızlığını sağlayan şey bytecode’ dur. Çünkü bir kere bytecode oluştuktan sonra yazılım sanal makine içeren tüm işletim sistemlerinde (Windows, Linux vb.) çalışabilir.
2) Java’ da Veri Türleri Nelerdir? Örnekle Açıkla
Java’ da veri türleri 2’ ye ayrılır:
3) Java’da equals() ve == arasındaki fark nedir?
Eşittir: Primitive tiplerde → değeri karşılaştırır. equals() içerik karşılaştırmak için kullanılır ne ilkel olmayan veri tiplerinde(String vb.) kullanılır
4) Asenkron Programlama Nedir?
Bir programın eş zamanlı olarak birden fazla işlemi yönetebilmesini sağlayan bir programlama yaklaşımıdır. JS, Phyton, Kotlin asenkron programlama dilleridir.
5) This anahtar sözcüğü nedir?
o anda hangi nesne üzerinde işlem yapılıyorsa o nesnenin referansını döndürür.
6) int ile Integer arasındaki Fark nedir?
int: Java’nın temel veri tipidir. Hafızada direkt sayı tutulur. Daha hızlıdır. null olamaz. Metot değildir, nesne özellikleri yoktur.
Integer, int için oluşturulmuş bir wrapper class’tır. Bir nesnedir (Object). null olabilir. İçinde yardımcı metotlar vardır. Koleksiyonlarda kullanılır (ArrayList, HashMap vb.)
7) Java da Sınıf ve Nesne Kavramını açıkla
Sınıflar, nesnelerimiz için genel özellikler tanımladığımız yapılardır. Sınıf ( class) soyut bir veri tipidir. (Nesne(Object) sınıf kavramını soyutlaştırır. Örneğin kedi bir türdür yani bir sınıftır. Ama evde beslediğimiz kediyi bu sınıfın bir nesnesi olarak düşünebiliriz.
8) “Final” anahtar kelimesi ne işe yarar?
final değişkenler sadece bir kez değer alabilir. Genelde sabitlerde kullanılır.
final double PI = 3.14;
final metodlarda, Bir metodun override edilmesini engeller. final class’lar da, Bir class’ın miras alınmasını engeller.9) “Static” anahtar kelimesi ne işe yarar? Static ve non-static metotlar arasındaki temel fark nedir?
Oluşturuldukları sınıfın nesnesini oluşturmadan erişebileceğimiz fonksiyonlardır.
10) Java’da lambda ifadeleri nedir ve nasıl kullanılır?
11) Java da “Constructor” kavramını açıkla
Her nesnenin ilk üretildiği anda çalıştırılan fonksiyonlardır. Bir constructor’da this() ve super() aynı anda kullanılamaz. Constructor return etmez yani değer döndürmez çünkü amacı bu değildir. Amacı, nesnenin başlangıç değerini atamaktır.
12) Java da Encapsulation(Kapsülleme) kavramını ve önemini açıkla
Dışardan erişilmesini istemediğimiz veya kimin erişmesini istediğimiz yapıya denir. Bu yapı erişim belirteçleri ile kullanılır.
13) Java da Overriding ile Overloading in farklarını açıklayınız.
Overloading, aynı isme sahip metodların farklı sayıda ve türde parametre alarak yeniden yazılmış halidir. Yani metotun imzası değişir. Overriding, iki farklı class da aynı metod varken, birbirinden extend yani kalıtım ile kullanılıp aynı metodun içinin farklı olması anlamına gelir. Overridding; bir üst class daki çarpma metodunu, içindeki argümanları değiştirmeden aynı argümanlarla çağırıp kullanmaktır. Bu halde metot un imzası değişmez.
14) Java’da Super Anahtar Kelimesi Ne İşe Yarar?
Üst sınıf (parent class) elemanlarına erişmek için kullanılır. Super anahtar kelimesi, özellikle inheritance (kalıtım) kullanırken çok önemlidir ve kodun daha düzenli ve anlaşılır olmasını sağlar. Ayrıca üst sınıfın davranışlarını alt sınıflarda genişletmeye olanak tanır.
15) Java da Polimorfizm (Çok Biçimlilik) Nedir?
Bir nesnenin çok şekilli olarak kullanılabilmesidir. Nesne, aynı davranışı farklı formlar ve görünüşler ile yerine getirebilir. Gerçek hayattan örnek vermemiz gerekirse; bir kişinin birden fazla görevi yapması, misal erkek olan biri, bir koca, bir çalışan veya bir baba olabilir. Yani aynı kişi farklı davranışlara sahip olabilir ve farklı görevlere sahip olabilir.
16) inner Class kavramını ve Static inner Class’ ı açıkla
İnner class özelliği sayesinde bir sınıf diğer bir sınıfın içerisinde tanımlanabilir. Böylece mantıksal bir bütünü oluşturan birçok sınıf tek bir çatı altında toplanabilir. Static inner class: Bir iç sınıf static olabilir. Bu da dış sınıfın bir nesnesini oluşturmadan ona erişebileceğiniz anlamına gelir. Dinamik boyut (otomatik büyüyüp küçülür). Hızlı erişim (indeks bazlı). Null değerleri kabul eder.
17) Java’da Javadoc nedir ve nasıl kullanılır?
Java kaynak kodunu belgelemek için kullanılan bir dokümantasyon aracıdır. Sık Kullanılan Javadoc Etiketleri: @param: Metot parametresini açıklar, @return: Dönüş değerini açıklar. @throws: Fırlatılan istisnaları açıklar. Javadoc belgeleri, javadoc aracı kullanılarak HTML belgelerine dönüştürülebilir.
18) ArrayList Nedir?
Java’da dinamik bir dizi yapısı sunan ve Collection Framework’ün bir parçası olan bir sınıftır. Normal bir dizi gibidir fakat boyut sınırı yoktur. İstenildiği zaman öğe eklenir veya öğe silinebilir. Sık ekleme/silme işlemlerinde performans düşer. Birbirini tekrar eden ve boş değerleri içerebilir. Primitive tipleri doğrudan depolayamaz (wrapper class kullanılır). Yani int,char, double vb. gibi ilkel türlerden ArrayList oluşturamayız.
19) Interfaceler ile Abstract’ lar arasındaki farklar nelerdir?
Javada Çoklu Kalıtım Yapılamaz yani bir sınıf birden fazla sınıfı extends ile miras alamaz. Çoklu kalıtım yapabilmek için Arayüzleri (Interfaces) veya dahili sınıfları kullanırız (Abstract ile interfaces farkı). Interface de Erişim belirtkesi ya public olur ya da hiç olmaz. Abstract’ lar private, protected değişken içerebilir. Arayüzde sadece default ve static metodlar içerir. Arayüzde yer alan tüm metotlar gövdesizdir yani abstract metotlar yer alır. Arayüzde yazılan metotlar gövdesiz olduğu için yaptıkları iş belli değildir.

20) Inheritance (miras) ve polymorphism (çok biçimlilik) arasındaki temel fark nedir? Inheritance, bir sınıfın başka bir sınıftan özelliklerini ve davranışlarını miras almasını ifade eder. Polymorphism ise aynı isme sahip ancak farklı davranışlara sahip olan nesneleri ifade eder. Inheritance, sınıflar arasında bir hiyerarşi oluştururken, polymorphism farklı sınıfların aynı ismi kullanarak genel bir arayüz sağlamasına olanak tanır.
21) Java’da composition nedir ve neden önemlidir?
Java’da composition, bir sınıfın başka bir sınıfın nesnesini kendi içinde bulundurması ilişkisidir.
Composition’ın avantajları: Daha güçlü kapsülleme sağlar. Kodun yeniden kullanılabilirliğini artırır. Sınıflar arası bağımlılığı azaltır. Kalıtıma (inheritance) alternatif olarak daha esnek bir yapı sunar.
22) Java’da annotation nedir ve nasıl kullanılır?
Java Annotation’ları kodunuza üst veri (metadata) eklemenin bir yoludur. Java komutlarına ek bilgi eklemek için kullanılan ifadelerdir. Eklenen bu ek bilgiler komutların çalışmasını değiştirmeyecektir. Ancak Java Reflection yapısı kullanılarak annotation bilgileri alınır ve işlem yapılabilir. Yaygın Annotation’lar: @Override: Bir metodun üst sınıftan override edildiğini belirtir.
@Deprecated: Bir metodun veya sınıfın kullanımının önerilmediğini gösteri
@Target: Annotation’ın nerede (sınıf, metod, alan vb.) kullanılacağını belirler.
Java annotation’lar, kodu daha okunaklı, düzenli ve anlaşılır hale getirmenin yanı sıra, framework’lerle entegrasyonu kolaylaştırır ve çalışma zamanında ek işlemler yapılmasına olanak tanır. Kendi annotation’larınızı oluşturarak özelleştirilmiş işlevler de ekleyebilirsiniz. XML konfigürasyonlarını azaltır, okunabilirliği artırır ve geliştirme sürecini kolaylaştırır.
23) Java Development Kit (JDK) Nedir? JVM ile bağlantısı nedir?
JDK, JVM’yi ve ek araçları içerir. JVM, JDK’nin çalıştırma (runtime) kısmını sağlar. Bu nedenle, JDK olmadan Java uygulamaları geliştirmek mümkün değildir. JDK, Java uygulamalarını oluşturmak için gereken araçlar, kütüphaneler ve uygulama çalıştırma ortamını (JRE – Java Runtime Environment) bir araya getirir.
JDK, aşağıdaki bileşenleri içerir:
– Java Compiler (Derleyici) (javac) ve Java Runtime Environment (JRE)
Akış Şeması: Kaynak Kod (.java) → [JDK (javac)] → Bytecode (.class) → [JVM] → Çalışan Program
24) Java da Enum kavramını açıkla
Enum (Enumeration), sabit değerlerin bir koleksiyonunu temsil eden özel bir sınıf türüdür. Türleri önceden tanımlanmış sabit değerleri ifade etmede kullanılır. Örneğin gün, ay, renk, yön isimleri gibi. Enum türler dışarıdan new operatörü ile türetilemezler. Enumlar içinde yazılan yapıcı metotlar sadece enum sabitleri tarafından çağırılabilirler.
25) OOP nedir ve neden önemlidir?
OOP, nesneler arası ilişkilerin ve programlama yapısının bir paradigmasıdır. Java gibi birçok modern programlama dilinde temel bir yaklaşım olarak kullanılır. OOP, kodun düzenli, esnek, tekrar kullanılabilir ve anlaşılır olmasını sağlar. Temel prensipleri encapsulation (kapsülleme), inheritance (miras), polymorphism (çok biçimlilik) ve abstraction (soyutlama) içerir.
26) Java da Thread nedir? Her bir işlemin altında çalışan alt işlemlere thread adı verilir. Aynı anda birden fazla işlem yapmayı sağlayan yapıya thread denir. Bu yapı sayesinde işlemler birbirlerini beklemeden kendi işlemini yapar. İş parçacıkları, bir programın aynı anda birden çok şey yaparak daha verimli çalışmasını sağlar. İş parçacıkları, ana programı kesintiye uğratmadan arka planda karmaşık görevleri gerçekleştirmek için kullanılabilir. Thread kullanımı için Thread sınıfını kalıtım almak(extends) veya Runnable arayüzünü uygulamak(implements) olmak üzere iki yöntem kullanılır.
27) HashMap Nedir?
HashMap, Java programlama dilinde kullanılan bir veri yapısıdır ve anahtar-değer(key-value) çiftlerini depolamak için kullanılır. Her bir key, benzersiz olmalıdır ve bir değerle ilişkilendirilir.
28) Java Collection Framework Nedir?
Collection: İçerisinde birden fazla nesne barındırabilen ve gerektiğinde nesne ekleme-silme gibi işlemlere imkan sağlayan bir başka nesnedir.
Collection sınıfları 4 türdür.
Nesneleri liste halinde tutan List sınıfları
Vector, ArrayList, LinkedList, Stack
Nesneleri tek olacak şekilde tutan Set sınıfları
HashSet, TreeSet
Nesneleri eklenme sırasına göre düzenleyen Queue sınıfları
PriorityQueue, LinkedList
Nesneleri tek bir anahtarla eşleştiren Map sınıfları
HashMap, HashTable, LinkedHashMap, TreeMap.
29) ArrayList ile LinkedList arasındaki fark nedir?
ArrayList sınıfının içinde normal bir dizi vardır. Bir öğe eklendiğinde, diziye yerleştirilir. Dizi yeterince büyük değilse, eskisinin yerini alacak yeni, daha büyük bir dizi oluşturulur ve eskisi kaldırılır. LinkedList öğelerini “kapsayıcılarda saklar.” Listenin ilk kapsayıcıya bir bağlantısı vardır ve her kapsayıcının listedeki bir sonraki kapsayıcıya bir bağlantısı vardır. Listeye bir öğe eklemek için öğe yeni bir kapsayıcıya yerleştirilir ve bu kapsayıcı listedeki diğer kapsayıcılardan birine bağlanır.
Ne Zaman Hangisini Kullanmalı:
ArrayList kullanın:
Veri üzerinde sık sık random erişim yapılıyorsa
Liste boyutu çok sık değişmiyorsa
Elemanlar genellikle sona ekleniyorsa
Bellek kullanımı önemliyse
LinkedList kullanın:
Sık sık eleman ekleme/silme işlemi yapılıyorsa
Liste başına veya ortasına sık ekleme yapılıyorsa
Liste boyutu sürekli değişiyorsa
Random erişim ihtiyacı yoksa

30) Error ile Exception arasındaki fark nedir?
Error yakalayamadığımız hatalardır, Exception try- Catch ile yakalayabildiğimiz ve kontrol edebildiğimiz hatalardır.
31) Java’da Abstraction (Soyutlama) Nedir?
Eğer bir sınıf için nesne üretmek mantıksız geliyorsa o sınıf soyutlanabilir. Alt sınıfların ortak özelliklerini ve işlevlerini taşıyan ancak henüz bir nesnesi olmayan bir üst sınıf oluşturmak istenirse bir soyut (abstract) üst sınıf oluşturulur.
Soyutlama, bir sınıfa veya metoda temel görevlerin tanımlanması, detayların ise tanımlanmaması demektir. Temel olarak bir soruna ait çözüme giderken kullanılacak yöntemlerin, ilk etapta daha genel basit ve soyut bir tanımını yapmaktır.
Abstraction, programlamada karmaşıklığı azaltmak ve gereksiz ayrıntıları gizlemek için kullanılan bir tekniktir. Örnek: Bir araba kullanırken motorun iç işleyişini bilmeden, sadece direksiyon, gaz ve fren pedalını kullanarak sürersin. İşte bu soyutlamadır! Araba, karmaşık detayları gizleyerek kullanıcıya sade bir arayüz sunar. Java’da abstraction, bir nesnenin ne yaptığına odaklanıp, nasıl yaptığını gizlemek anlamına gelir. Bu, kullanıcıya yalnızca gerekli olan özellikleri veya davranışları gösterirken, uygulama ayrıntılarını saklar. Javada Abstraction(Soyutlama) tanımlayacağımız nesnenin istediğimiz gerekli olan özelliklerini tanımlama olanağı sağlayıp istemediğimiz özellikleri göz ardı etmemize yarayan kodlama yöntemdir. Kısacası Javada Abstraction(Soyutlama) yapısı bizlere kod kalabalığını önleyen bir kodlama yöntemidir.
Java’da abstraction, temel olarak iki şekilde gerçekleştirilir:
Abstract Class (Soyut Sınıf) kullanarak.
Interface (Arayüz) kullanarak.
Soyut Sınıf Özellikleri: